/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ({ /***/ "./node_modules/aurelia-binding/dist/native-modules/aurelia-binding.js": /*!*****************************************************************************!*\ !*** ./node_modules/aurelia-binding/dist/native-modules/aurelia-binding.js ***! \*****************************************************************************/ /*! exports provided: getArrayObserver, getMapObserver, getSetObserver, targetContext, sourceContext, camelCase, createOverrideContext, getContextFor, createScopeForTest, connectable, enqueueBindingConnect, setConnectQueueThreshold, enableConnectQueue, disableConnectQueue, getConnectQueueSize, subscriberCollection, ExpressionObserver, calcSplices, mergeSplice, projectArraySplices, getChangeRecords, ModifyCollectionObserver, CollectionLengthObserver, Expression, BindingBehavior, ValueConverter, Assign, Conditional, AccessThis, AccessScope, AccessMember, AccessKeyed, CallScope, CallMember, CallFunction, Binary, Unary, LiteralPrimitive, LiteralString, LiteralTemplate, LiteralArray, LiteralObject, Unparser, ExpressionCloner, cloneExpression, bindingMode, Parser, ParserImplementation, delegationStrategy, EventManager, EventSubscriber, DirtyChecker, DirtyCheckProperty, propertyAccessor, PrimitiveObserver, SetterObserver, XLinkAttributeObserver, dataAttributeAccessor, DataAttributeObserver, StyleObserver, ValueAttributeObserver, CheckedObserver, SelectValueObserver, ClassObserver, hasDeclaredDependencies, declarePropertyDependencies, computedFrom, ComputedExpression, createComputedObserver, elements, presentationElements, presentationAttributes, SVGAnalyzer, ObserverLocator, ObjectObservationAdapter, BindingExpression, Binding, CallExpression, Call, ValueConverterResource, valueConverter, BindingBehaviorResource, bindingBehavior, ListenerExpression, Listener, NameExpression, BindingEngine, observable, connectBindingToSignal, signalBindings */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getArrayObserver\", function() { return _getArrayObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMapObserver\", function() { return _getMapObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSetObserver\", function() { return _getSetObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"targetContext\", function() { return targetContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sourceContext\", function() { return sourceContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"camelCase\", function() { return camelCase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createOverrideContext\", function() { return createOverrideContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getContextFor\", function() { return getContextFor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createScopeForTest\", function() { return createScopeForTest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"connectable\", function() { return connectable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"enqueueBindingConnect\", function() { return enqueueBindingConnect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setConnectQueueThreshold\", function() { return setConnectQueueThreshold; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"enableConnectQueue\", function() { return enableConnectQueue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"disableConnectQueue\", function() { return disableConnectQueue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getConnectQueueSize\", function() { return getConnectQueueSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"subscriberCollection\", function() { return subscriberCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionObserver\", function() { return ExpressionObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"calcSplices\", function() { return calcSplices; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeSplice\", function() { return mergeSplice; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"projectArraySplices\", function() { return projectArraySplices; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getChangeRecords\", function() { return getChangeRecords; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ModifyCollectionObserver\", function() { return ModifyCollectionObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CollectionLengthObserver\", function() { return CollectionLengthObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return Expression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingBehavior\", function() { return BindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValueConverter\", function() { return ValueConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Assign\", function() { return Assign; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Conditional\", function() { return Conditional; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AccessThis\", function() { return AccessThis; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AccessScope\", function() { return AccessScope; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AccessMember\", function() { return AccessMember; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AccessKeyed\", function() { return AccessKeyed; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CallScope\", function() { return CallScope; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CallMember\", function() { return CallMember; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CallFunction\", function() { return CallFunction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Binary\", function() { return Binary; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Unary\", function() { return Unary; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralPrimitive\", function() { return LiteralPrimitive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralString\", function() { return LiteralString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralTemplate\", function() { return LiteralTemplate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralArray\", function() { return LiteralArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LiteralObject\", function() { return LiteralObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Unparser\", function() { return _Unparser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionCloner\", function() { return ExpressionCloner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneExpression\", function() { return cloneExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bindingMode\", function() { return bindingMode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Parser\", function() { return Parser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ParserImplementation\", function() { return ParserImplementation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"delegationStrategy\", function() { return delegationStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventManager\", function() { return EventManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventSubscriber\", function() { return EventSubscriber; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DirtyChecker\", function() { return DirtyChecker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DirtyCheckProperty\", function() { return DirtyCheckProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"propertyAccessor\", function() { return propertyAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PrimitiveObserver\", function() { return PrimitiveObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SetterObserver\", function() { return SetterObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"XLinkAttributeObserver\", function() { return XLinkAttributeObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dataAttributeAccessor\", function() { return dataAttributeAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DataAttributeObserver\", function() { return DataAttributeObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StyleObserver\", function() { return StyleObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValueAttributeObserver\", function() { return ValueAttributeObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CheckedObserver\", function() { return CheckedObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SelectValueObserver\", function() { return SelectValueObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ClassObserver\", function() { return ClassObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hasDeclaredDependencies\", function() { return hasDeclaredDependencies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"declarePropertyDependencies\", function() { return declarePropertyDependencies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"computedFrom\", function() { return computedFrom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComputedExpression\", function() { return ComputedExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createComputedObserver\", function() { return createComputedObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"elements\", function() { return elements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"presentationElements\", function() { return presentationElements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"presentationAttributes\", function() { return presentationAttributes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SVGAnalyzer\", function() { return SVGAnalyzer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ObserverLocator\", function() { return ObserverLocator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ObjectObservationAdapter\", function() { return ObjectObservationAdapter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingExpression\", function() { return BindingExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Binding\", function() { return Binding; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CallExpression\", function() { return CallExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Call\", function() { return Call; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValueConverterResource\", function() { return ValueConverterResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"valueConverter\", function() { return valueConverter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingBehaviorResource\", function() { return BindingBehaviorResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bindingBehavior\", function() { return bindingBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ListenerExpression\", function() { return ListenerExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Listener\", function() { return Listener; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NameExpression\", function() { return NameExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingEngine\", function() { return BindingEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"observable\", function() { return observable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"connectBindingToSignal\", function() { return connectBindingToSignal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"signalBindings\", function() { return signalBindings; });\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-logging */ \"./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js\");\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\n/* harmony import */ var aurelia_task_queue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! aurelia-task-queue */ \"./node_modules/aurelia-task-queue/dist/native-modules/aurelia-task-queue.js\");\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! aurelia-metadata */ \"./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js\");\n\n\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _dec, _dec2, _class, _dec3, _class2, _dec4, _class3, _dec5, _class5, _dec6, _class7, _dec7, _class8, _dec8, _class9, _dec9, _class10, _class12, _temp, _dec10, _class13, _class14, _temp2;\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n\nvar targetContext = 'Binding:target';\nvar sourceContext = 'Binding:source';\n\nvar map = Object.create(null);\n\nfunction camelCase(name) {\n if (name in map) {\n return map[name];\n }\n var result = name.charAt(0).toLowerCase() + name.slice(1).replace(/[_.-](\\w|$)/g, function (_, x) {\n return x.toUpperCase();\n });\n map[name] = result;\n return result;\n}\n\nfunction createOverrideContext(bindingContext, parentOverrideContext) {\n return {\n bindingContext: bindingContext,\n parentOverrideContext: parentOverrideContext || null\n };\n}\n\nfunction getContextFor(name, scope, ancestor) {\n var oc = scope.overrideContext;\n\n if (ancestor) {\n while (ancestor && oc) {\n ancestor--;\n oc = oc.parentOverrideContext;\n }\n if (ancestor || !oc) {\n return undefined;\n }\n return name in oc ? oc : oc.bindingContext;\n }\n\n while (oc && !(name in oc) && !(oc.bindingContext && name in oc.bindingContext)) {\n oc = oc.parentOverrideContext;\n }\n if (oc) {\n return name in oc ? oc : oc.bindingContext;\n }\n\n return scope.bindingContext || scope.overrideContext;\n}\n\nfunction createScopeForTest(bindingContext, parentBindingContext) {\n if (parentBindingContext) {\n return {\n bindingContext: bindingContext,\n overrideContext: createOverrideContext(bindingContext, createOverrideContext(parentBindingContext))\n };\n }\n return {\n bindingContext: bindingContext,\n overrideContext: createOverrideContext(bindingContext)\n };\n}\n\nvar slotNames = [];\nvar versionSlotNames = [];\nvar lastSlot = -1;\nfunction ensureEnoughSlotNames(currentSlot) {\n if (currentSlot === lastSlot) {\n lastSlot += 5;\n var ii = slotNames.length = versionSlotNames.length = lastSlot + 1;\n for (var i = currentSlot + 1; i < ii; ++i) {\n slotNames[i] = '_observer' + i;\n versionSlotNames[i] = '_observerVersion' + i;\n }\n }\n}\nensureEnoughSlotNames(-1);\n\nfunction addObserver(observer) {\n var observerSlots = this._observerSlots === undefined ? 0 : this._observerSlots;\n var i = observerSlots;\n while (i-- && this[slotNames[i]] !== observer) {}\n\n if (i === -1) {\n i = 0;\n while (this[slotNames[i]]) {\n i++;\n }\n this[slotNames[i]] = observer;\n observer.subscribe(sourceContext, this);\n\n if (i === observerSlots) {\n this._observerSlots = i + 1;\n }\n }\n\n if (this._version === undefined) {\n this._version = 0;\n }\n this[versionSlotNames[i]] = this._version;\n ensureEnoughSlotNames(i);\n}\n\nfunction observeProperty(obj, propertyName) {\n var observer = this.observerLocator.getObserver(obj, propertyName);\n addObserver.call(this, observer);\n}\n\nfunction observeArray(array) {\n var observer = this.observerLocator.getArrayObserver(array);\n addObserver.call(this, observer);\n}\n\nfunction unobserve(all) {\n var i = this._observerSlots;\n while (i--) {\n if (all || this[versionSlotNames[i]] !== this._version) {\n var observer = this[slotNames[i]];\n this[slotNames[i]] = null;\n if (observer) {\n observer.unsubscribe(sourceContext, this);\n }\n }\n }\n}\n\nfunction connectable() {\n return function (target) {\n target.prototype.observeProperty = observeProperty;\n target.prototype.observeArray = observeArray;\n target.prototype.unobserve = unobserve;\n target.prototype.addObserver = addObserver;\n };\n}\n\nvar queue = [];\nvar queued = {};\nvar nextId = 0;\nvar minimumImmediate = 100;\nvar frameBudget = 15;\n\nvar isFlushRequested = false;\nvar immediate = 0;\n\nfunction flush(animationFrameStart) {\n var length = queue.length;\n var i = 0;\n while (i < length) {\n var binding = queue[i];\n queued[binding.__connectQueueId] = false;\n binding.connect(true);\n i++;\n\n if (i % 100 === 0 && aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"PLATFORM\"].performance.now() - animationFrameStart > frameBudget) {\n break;\n }\n }\n queue.splice(0, i);\n\n if (queue.length) {\n aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"PLATFORM\"].requestAnimationFrame(flush);\n } else {\n isFlushRequested = false;\n immediate = 0;\n }\n}\n\nfunction enqueueBindingConnect(binding) {\n if (immediate < minimumImmediate) {\n immediate++;\n binding.connect(false);\n } else {\n var id = binding.__connectQueueId;\n if (id === undefined) {\n id = nextId;\n nextId++;\n binding.__connectQueueId = id;\n }\n\n if (!queued[id]) {\n queue.push(binding);\n queued[id] = true;\n }\n }\n if (!isFlushRequested) {\n isFlushRequested = true;\n aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"PLATFORM\"].requestAnimationFrame(flush);\n }\n}\n\nfunction setConnectQueueThreshold(value) {\n minimumImmediate = value;\n}\n\nfunction enableConnectQueue() {\n setConnectQueueThreshold(100);\n}\n\nfunction disableConnectQueue() {\n setConnectQueueThreshold(Number.MAX_SAFE_INTEGER);\n}\n\nfunction getConnectQueueSize() {\n return queue.length;\n}\n\nfunction addSubscriber(context, callable) {\n if (this.hasSubscriber(context, callable)) {\n return false;\n }\n if (!this._context0) {\n this._context0 = context;\n this._callable0 = callable;\n return true;\n }\n if (!this._context1) {\n this._context1 = context;\n this._callable1 = callable;\n return true;\n }\n if (!this._context2) {\n this._context2 = context;\n this._callable2 = callable;\n return true;\n }\n if (!this._contextsRest) {\n this._contextsRest = [context];\n this._callablesRest = [callable];\n return true;\n }\n this._contextsRest.push(context);\n this._callablesRest.push(callable);\n return true;\n}\n\nfunction removeSubscriber(context, callable) {\n if (this._context0 === context && this._callable0 === callable) {\n this._context0 = null;\n this._callable0 = null;\n return true;\n }\n if (this._context1 === context && this._callable1 === callable) {\n this._context1 = null;\n this._callable1 = null;\n return true;\n }\n if (this._context2 === context && this._callable2 === callable) {\n this._context2 = null;\n this._callable2 = null;\n return true;\n }\n var callables = this._callablesRest;\n if (callables === undefined || callables.length === 0) {\n return false;\n }\n var contexts = this._contextsRest;\n var i = 0;\n while (!(callables[i] === callable && contexts[i] === context) && callables.length > i) {\n i++;\n }\n if (i >= callables.length) {\n return false;\n }\n contexts.splice(i, 1);\n callables.splice(i, 1);\n return true;\n}\n\nvar arrayPool1 = [];\nvar arrayPool2 = [];\nvar poolUtilization = [];\n\nfunction callSubscribers(newValue, oldValue) {\n var context0 = this._context0;\n var callable0 = this._callable0;\n var context1 = this._context1;\n var callable1 = this._callable1;\n var context2 = this._context2;\n var callable2 = this._callable2;\n var length = this._contextsRest ? this._contextsRest.length : 0;\n var contextsRest = void 0;\n var callablesRest = void 0;\n var poolIndex = void 0;\n var i = void 0;\n if (length) {\n poolIndex = poolUtilization.length;\n while (poolIndex-- && poolUtilization[poolIndex]) {}\n if (poolIndex < 0) {\n poolIndex = poolUtilization.length;\n contextsRest = [];\n callablesRest = [];\n poolUtilization.push(true);\n arrayPool1.push(contextsRest);\n arrayPool2.push(callablesRest);\n } else {\n poolUtilization[poolIndex] = true;\n contextsRest = arrayPool1[poolIndex];\n callablesRest = arrayPool2[poolIndex];\n }\n\n i = length;\n while (i--) {\n contextsRest[i] = this._contextsRest[i];\n callablesRest[i] = this._callablesRest[i];\n }\n }\n\n if (context0) {\n if (callable0) {\n callable0.call(context0, newValue, oldValue);\n } else {\n context0(newValue, oldValue);\n }\n }\n if (context1) {\n if (callable1) {\n callable1.call(context1, newValue, oldValue);\n } else {\n context1(newValue, oldValue);\n }\n }\n if (context2) {\n if (callable2) {\n callable2.call(context2, newValue, oldValue);\n } else {\n context2(newValue, oldValue);\n }\n }\n if (length) {\n for (i = 0; i < length; i++) {\n var callable = callablesRest[i];\n var context = contextsRest[i];\n if (callable) {\n callable.call(context, newValue, oldValue);\n } else {\n context(newValue, oldValue);\n }\n contextsRest[i] = null;\n callablesRest[i] = null;\n }\n poolUtilization[poolIndex] = false;\n }\n}\n\nfunction hasSubscribers() {\n return !!(this._context0 || this._context1 || this._context2 || this._contextsRest && this._contextsRest.length);\n}\n\nfunction hasSubscriber(context, callable) {\n var has = this._context0 === context && this._callable0 === callable || this._context1 === context && this._callable1 === callable || this._context2 === context && this._callable2 === callable;\n if (has) {\n return true;\n }\n var index = void 0;\n var contexts = this._contextsRest;\n if (!contexts || (index = contexts.length) === 0) {\n return false;\n }\n var callables = this._callablesRest;\n while (index--) {\n if (contexts[index] === context && callables[index] === callable) {\n return true;\n }\n }\n return false;\n}\n\nfunction subscriberCollection() {\n return function (target) {\n target.prototype.addSubscriber = addSubscriber;\n target.prototype.removeSubscriber = removeSubscriber;\n target.prototype.callSubscribers = callSubscribers;\n target.prototype.hasSubscribers = hasSubscribers;\n target.prototype.hasSubscriber = hasSubscriber;\n };\n}\n\nvar ExpressionObserver = (_dec = connectable(), _dec2 = subscriberCollection(), _dec(_class = _dec2(_class = function () {\n function ExpressionObserver(scope, expression, observerLocator, lookupFunctions) {\n \n\n this.scope = scope;\n this.expression = expression;\n this.observerLocator = observerLocator;\n this.lookupFunctions = lookupFunctions;\n }\n\n ExpressionObserver.prototype.getValue = function getValue() {\n return this.expression.evaluate(this.scope, this.lookupFunctions);\n };\n\n ExpressionObserver.prototype.setValue = function setValue(newValue) {\n this.expression.assign(this.scope, newValue);\n };\n\n ExpressionObserver.prototype.subscribe = function subscribe(context, callable) {\n var _this = this;\n\n if (!this.hasSubscribers()) {\n this.oldValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n this.expression.connect(this, this.scope);\n }\n this.addSubscriber(context, callable);\n if (arguments.length === 1 && context instanceof Function) {\n return {\n dispose: function dispose() {\n _this.unsubscribe(context, callable);\n }\n };\n }\n };\n\n ExpressionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n this.unobserve(true);\n this.oldValue = undefined;\n }\n };\n\n ExpressionObserver.prototype.call = function call() {\n var newValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n var oldValue = this.oldValue;\n if (newValue !== oldValue) {\n this.oldValue = newValue;\n this.callSubscribers(newValue, oldValue);\n }\n this._version++;\n this.expression.connect(this, this.scope);\n this.unobserve(false);\n };\n\n return ExpressionObserver;\n}()) || _class) || _class);\n\nfunction isIndex(s) {\n return +s === s >>> 0;\n}\n\nfunction toNumber(s) {\n return +s;\n}\n\nfunction newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n}\n\nvar EDIT_LEAVE = 0;\nvar EDIT_UPDATE = 1;\nvar EDIT_ADD = 2;\nvar EDIT_DELETE = 3;\n\nfunction ArraySplice() {}\n\nArraySplice.prototype = {\n calcEditDistances: function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n var rowCount = oldEnd - oldStart + 1;\n var columnCount = currentEnd - currentStart + 1;\n var distances = new Array(rowCount);\n var north = void 0;\n var west = void 0;\n\n for (var i = 0; i < rowCount; ++i) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n for (var j = 0; j < columnCount; ++j) {\n distances[0][j] = j;\n }\n\n for (var _i = 1; _i < rowCount; ++_i) {\n for (var _j = 1; _j < columnCount; ++_j) {\n if (this.equals(current[currentStart + _j - 1], old[oldStart + _i - 1])) {\n distances[_i][_j] = distances[_i - 1][_j - 1];\n } else {\n north = distances[_i - 1][_j] + 1;\n west = distances[_i][_j - 1] + 1;\n distances[_i][_j] = north < west ? north : west;\n }\n }\n }\n\n return distances;\n },\n\n spliceOperationsFromEditDistances: function spliceOperationsFromEditDistances(distances) {\n var i = distances.length - 1;\n var j = distances[0].length - 1;\n var current = distances[i][j];\n var edits = [];\n while (i > 0 || j > 0) {\n if (i === 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j === 0) {\n edits.push(EDIT_DELETE);\n i--;\n continue;\n }\n var northWest = distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n var north = distances[i][j - 1];\n\n var min = void 0;\n if (west < north) {\n min = west < northWest ? west : northWest;\n } else {\n min = north < northWest ? north : northWest;\n }\n\n if (min === northWest) {\n if (northWest === current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = northWest;\n }\n i--;\n j--;\n } else if (min === west) {\n edits.push(EDIT_DELETE);\n i--;\n current = west;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n },\n\n calcSplices: function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n\n var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart === 0 && oldStart === 0) {\n prefixCount = this.sharedPrefix(current, old, minLength);\n }\n\n if (currentEnd === current.length && oldEnd === old.length) {\n suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);\n }\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) {\n return [];\n }\n\n if (currentStart === currentEnd) {\n var _splice = newSplice(currentStart, [], 0);\n while (oldStart < oldEnd) {\n _splice.removed.push(old[oldStart++]);\n }\n\n return [_splice];\n } else if (oldStart === oldEnd) {\n return [newSplice(currentStart, [], currentEnd - currentStart)];\n }\n\n var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));\n\n var splice = undefined;\n var splices = [];\n var index = currentStart;\n var oldIndex = oldStart;\n for (var i = 0; i < ops.length; ++i) {\n switch (ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice) {\n splice = newSplice(index, [], 0);\n }\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:\n if (!splice) {\n splice = newSplice(index, [], 0);\n }\n\n splice.addedCount++;\n index++;\n break;\n case EDIT_DELETE:\n if (!splice) {\n splice = newSplice(index, [], 0);\n }\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(splice);\n }\n return splices;\n },\n\n sharedPrefix: function sharedPrefix(current, old, searchLength) {\n for (var i = 0; i < searchLength; ++i) {\n if (!this.equals(current[i], old[i])) {\n return i;\n }\n }\n\n return searchLength;\n },\n\n sharedSuffix: function sharedSuffix(current, old, searchLength) {\n var index1 = current.length;\n var index2 = old.length;\n var count = 0;\n while (count < searchLength && this.equals(current[--index1], old[--index2])) {\n count++;\n }\n\n return count;\n },\n\n calculateSplices: function calculateSplices(current, previous) {\n return this.calcSplices(current, 0, current.length, previous, 0, previous.length);\n },\n\n equals: function equals(currentValue, previousValue) {\n return currentValue === previousValue;\n }\n};\n\nvar arraySplice = new ArraySplice();\n\nfunction calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n return arraySplice.calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd);\n}\n\nfunction intersect(start1, end1, start2, end2) {\n if (end1 < start2 || end2 < start1) {\n return -1;\n }\n\n if (end1 === start2 || end2 === start1) {\n return 0;\n }\n\n if (start1 < start2) {\n if (end1 < end2) {\n return end1 - start2;\n }\n\n return end2 - start2;\n }\n\n if (end2 < end1) {\n return end2 - start1;\n }\n\n return end1 - start1;\n}\n\nfunction mergeSplice(splices, index, removed, addedCount) {\n var splice = newSplice(index, removed, addedCount);\n\n var inserted = false;\n var insertionOffset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = splices[i];\n current.index += insertionOffset;\n\n if (inserted) {\n continue;\n }\n\n var intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount);\n\n if (intersectCount >= 0) {\n\n splices.splice(i, 1);\n i--;\n\n insertionOffset -= current.addedCount - current.removed.length;\n\n splice.addedCount += current.addedCount - intersectCount;\n var deleteCount = splice.removed.length + current.removed.length - intersectCount;\n\n if (!splice.addedCount && !deleteCount) {\n inserted = true;\n } else {\n var currentRemoved = current.removed;\n\n if (splice.index < current.index) {\n var prepend = splice.removed.slice(0, current.index - splice.index);\n Array.prototype.push.apply(prepend, currentRemoved);\n currentRemoved = prepend;\n }\n\n if (splice.index + splice.removed.length > current.index + current.addedCount) {\n var append = splice.removed.slice(current.index + current.addedCount - splice.index);\n Array.prototype.push.apply(currentRemoved, append);\n }\n\n splice.removed = currentRemoved;\n if (current.index < splice.index) {\n splice.index = current.index;\n }\n }\n } else if (splice.index < current.index) {\n\n inserted = true;\n\n splices.splice(i, 0, splice);\n i++;\n\n var offset = splice.addedCount - splice.removed.length;\n current.index += offset;\n insertionOffset += offset;\n }\n }\n\n if (!inserted) {\n splices.push(splice);\n }\n}\n\nfunction createInitialSplices(array, changeRecords) {\n var splices = [];\n\n for (var i = 0; i < changeRecords.length; i++) {\n var record = changeRecords[i];\n switch (record.type) {\n case 'splice':\n mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);\n break;\n case 'add':\n case 'update':\n case 'delete':\n if (!isIndex(record.name)) {\n continue;\n }\n\n var index = toNumber(record.name);\n if (index < 0) {\n continue;\n }\n\n mergeSplice(splices, index, [record.oldValue], record.type === 'delete' ? 0 : 1);\n break;\n default:\n console.error('Unexpected record type: ' + JSON.stringify(record));\n break;\n }\n }\n\n return splices;\n}\n\nfunction projectArraySplices(array, changeRecords) {\n var splices = [];\n\n createInitialSplices(array, changeRecords).forEach(function (splice) {\n if (splice.addedCount === 1 && splice.removed.length === 1) {\n if (splice.removed[0] !== array[splice.index]) {\n splices.push(splice);\n }\n\n return;\n }\n\n splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length));\n });\n\n return splices;\n}\n\nfunction newRecord(type, object, key, oldValue) {\n return {\n type: type,\n object: object,\n key: key,\n oldValue: oldValue\n };\n}\n\nfunction getChangeRecords(map) {\n var entries = new Array(map.size);\n var keys = map.keys();\n var i = 0;\n var item = void 0;\n\n while (item = keys.next()) {\n if (item.done) {\n break;\n }\n\n entries[i] = newRecord('added', map, item.value);\n i++;\n }\n\n return entries;\n}\n\nvar ModifyCollectionObserver = (_dec3 = subscriberCollection(), _dec3(_class2 = function () {\n function ModifyCollectionObserver(taskQueue, collection) {\n \n\n this.taskQueue = taskQueue;\n this.queued = false;\n this.changeRecords = null;\n this.oldCollection = null;\n this.collection = collection;\n this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n }\n\n ModifyCollectionObserver.prototype.subscribe = function subscribe(context, callable) {\n this.addSubscriber(context, callable);\n };\n\n ModifyCollectionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n this.removeSubscriber(context, callable);\n };\n\n ModifyCollectionObserver.prototype.addChangeRecord = function addChangeRecord(changeRecord) {\n if (!this.hasSubscribers() && !this.lengthObserver) {\n return;\n }\n\n if (changeRecord.type === 'splice') {\n var index = changeRecord.index;\n var arrayLength = changeRecord.object.length;\n if (index > arrayLength) {\n index = arrayLength - changeRecord.addedCount;\n } else if (index < 0) {\n index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount;\n }\n if (index < 0) {\n index = 0;\n }\n changeRecord.index = index;\n }\n\n if (this.changeRecords === null) {\n this.changeRecords = [changeRecord];\n } else {\n this.changeRecords.push(changeRecord);\n }\n\n if (!this.queued) {\n this.queued = true;\n this.taskQueue.queueMicroTask(this);\n }\n };\n\n ModifyCollectionObserver.prototype.flushChangeRecords = function flushChangeRecords() {\n if (this.changeRecords && this.changeRecords.length || this.oldCollection) {\n this.call();\n }\n };\n\n ModifyCollectionObserver.prototype.reset = function reset(oldCollection) {\n this.oldCollection = oldCollection;\n\n if (this.hasSubscribers() && !this.queued) {\n this.queued = true;\n this.taskQueue.queueMicroTask(this);\n }\n };\n\n ModifyCollectionObserver.prototype.getLengthObserver = function getLengthObserver() {\n return this.lengthObserver || (this.lengthObserver = new CollectionLengthObserver(this.collection));\n };\n\n ModifyCollectionObserver.prototype.call = function call() {\n var changeRecords = this.changeRecords;\n var oldCollection = this.oldCollection;\n var records = void 0;\n\n this.queued = false;\n this.changeRecords = [];\n this.oldCollection = null;\n\n if (this.hasSubscribers()) {\n if (oldCollection) {\n if (this.collection instanceof Map || this.collection instanceof Set) {\n records = getChangeRecords(oldCollection);\n } else {\n records = calcSplices(this.collection, 0, this.collection.length, oldCollection, 0, oldCollection.length);\n }\n } else {\n if (this.collection instanceof Map || this.collection instanceof Set) {\n records = changeRecords;\n } else {\n records = projectArraySplices(this.collection, changeRecords);\n }\n }\n\n this.callSubscribers(records);\n }\n\n if (this.lengthObserver) {\n this.lengthObserver.call(this.collection[this.lengthPropertyName]);\n }\n };\n\n return ModifyCollectionObserver;\n}()) || _class2);\n\nvar CollectionLengthObserver = (_dec4 = subscriberCollection(), _dec4(_class3 = function () {\n function CollectionLengthObserver(collection) {\n \n\n this.collection = collection;\n this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n this.currentValue = collection[this.lengthPropertyName];\n }\n\n CollectionLengthObserver.prototype.getValue = function getValue() {\n return this.collection[this.lengthPropertyName];\n };\n\n CollectionLengthObserver.prototype.setValue = function setValue(newValue) {\n this.collection[this.lengthPropertyName] = newValue;\n };\n\n CollectionLengthObserver.prototype.subscribe = function subscribe(context, callable) {\n this.addSubscriber(context, callable);\n };\n\n CollectionLengthObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n this.removeSubscriber(context, callable);\n };\n\n CollectionLengthObserver.prototype.call = function call(newValue) {\n var oldValue = this.currentValue;\n this.callSubscribers(newValue, oldValue);\n this.currentValue = newValue;\n };\n\n return CollectionLengthObserver;\n}()) || _class3);\n\nvar arrayProto = Array.prototype;\nvar pop = arrayProto.pop;\nvar push = arrayProto.push;\nvar reverse = arrayProto.reverse;\nvar shift = arrayProto.shift;\nvar sort = arrayProto.sort;\nvar splice = arrayProto.splice;\nvar unshift = arrayProto.unshift;\n\nif (arrayProto.__au_patched__) {\n aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('array-observation').warn('Detected 2nd attempt of patching array from Aurelia binding.' + ' This is probably caused by dependency mismatch between core modules and a 3rd party plugin.' + ' Please see https://github.com/aurelia/cli/pull/906 if you are using webpack.');\n} else {\n Reflect.defineProperty(arrayProto, '__au_patched__', { value: 1 });\n arrayProto.pop = function () {\n var notEmpty = this.length > 0;\n var methodCallResult = pop.apply(this, arguments);\n if (notEmpty && this.__array_observer__ !== undefined) {\n this.__array_observer__.addChangeRecord({\n type: 'delete',\n object: this,\n name: this.length,\n oldValue: methodCallResult\n });\n }\n return methodCallResult;\n };\n\n arrayProto.push = function () {\n var methodCallResult = push.apply(this, arguments);\n if (this.__array_observer__ !== undefined) {\n this.__array_observer__.addChangeRecord({\n type: 'splice',\n object: this,\n index: this.length - arguments.length,\n removed: [],\n addedCount: arguments.length\n });\n }\n return methodCallResult;\n };\n\n arrayProto.reverse = function () {\n var oldArray = void 0;\n if (this.__array_observer__ !== undefined) {\n this.__array_observer__.flushChangeRecords();\n oldArray = this.slice();\n }\n var methodCallResult = reverse.apply(this, arguments);\n if (this.__array_observer__ !== undefined) {\n this.__array_observer__.reset(oldArray);\n }\n return methodCallResult;\n };\n\n arrayProto.shift = function () {\n var notEmpty = this.length > 0;\n var methodCallResult = shift.apply(this, arguments);\n if (notEmpty && this.__array_observer__ !== undefined) {\n this.__array_observer__.addChangeRecord({\n type: 'delete',\n object: this,\n name: 0,\n oldValue: methodCallResult\n });\n }\n return methodCallResult;\n };\n\n arrayProto.sort = function () {\n var oldArray = void 0;\n if (this.__array_observer__ !== undefined) {\n this.__array_observer__.flushChangeRecords();\n oldArray = this.slice();\n }\n var methodCallResult = sort.apply(this, arguments);\n if (this.__array_observer__ !== undefined) {\n this.__array_observer__.reset(oldArray);\n }\n return methodCallResult;\n };\n\n arrayProto.splice = function () {\n var methodCallResult = splice.apply(this, arguments);\n if (this.__array_observer__ !== undefined) {\n this.__array_observer__.addChangeRecord({\n type: 'splice',\n object: this,\n index: +arguments[0],\n removed: methodCallResult,\n addedCount: arguments.length > 2 ? arguments.length - 2 : 0\n });\n }\n return methodCallResult;\n };\n\n arrayProto.unshift = function () {\n var methodCallResult = unshift.apply(this, arguments);\n if (this.__array_observer__ !== undefined) {\n this.__array_observer__.addChangeRecord({\n type: 'splice',\n object: this,\n index: 0,\n removed: [],\n addedCount: arguments.length\n });\n }\n return methodCallResult;\n };\n}\n\nfunction _getArrayObserver(taskQueue, array) {\n return ModifyArrayObserver.for(taskQueue, array);\n}\n\nvar ModifyArrayObserver = function (_ModifyCollectionObse) {\n _inherits(ModifyArrayObserver, _ModifyCollectionObse);\n\n function ModifyArrayObserver(taskQueue, array) {\n \n\n return _possibleConstructorReturn(this, _ModifyCollectionObse.call(this, taskQueue, array));\n }\n\n ModifyArrayObserver.for = function _for(taskQueue, array) {\n if (!('__array_observer__' in array)) {\n Reflect.defineProperty(array, '__array_observer__', {\n value: ModifyArrayObserver.create(taskQueue, array),\n enumerable: false, configurable: false\n });\n }\n return array.__array_observer__;\n };\n\n ModifyArrayObserver.create = function create(taskQueue, array) {\n return new ModifyArrayObserver(taskQueue, array);\n };\n\n return ModifyArrayObserver;\n}(ModifyCollectionObserver);\n\nvar Expression = function () {\n function Expression() {\n \n\n this.isAssignable = false;\n }\n\n Expression.prototype.evaluate = function evaluate(scope, lookupFunctions, args) {\n throw new Error('Binding expression \"' + this + '\" cannot be evaluated.');\n };\n\n Expression.prototype.assign = function assign(scope, value, lookupFunctions) {\n throw new Error('Binding expression \"' + this + '\" cannot be assigned to.');\n };\n\n Expression.prototype.toString = function toString() {\n return typeof FEATURE_NO_UNPARSER === 'undefined' ? _Unparser.unparse(this) : Function.prototype.toString.call(this);\n };\n\n return Expression;\n}();\n\nvar BindingBehavior = function (_Expression) {\n _inherits(BindingBehavior, _Expression);\n\n function BindingBehavior(expression, name, args) {\n \n\n var _this3 = _possibleConstructorReturn(this, _Expression.call(this));\n\n _this3.expression = expression;\n _this3.name = name;\n _this3.args = args;\n return _this3;\n }\n\n BindingBehavior.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n return this.expression.evaluate(scope, lookupFunctions);\n };\n\n BindingBehavior.prototype.assign = function assign(scope, value, lookupFunctions) {\n return this.expression.assign(scope, value, lookupFunctions);\n };\n\n BindingBehavior.prototype.accept = function accept(visitor) {\n return visitor.visitBindingBehavior(this);\n };\n\n BindingBehavior.prototype.connect = function connect(binding, scope) {\n this.expression.connect(binding, scope);\n };\n\n BindingBehavior.prototype.bind = function bind(binding, scope, lookupFunctions) {\n if (this.expression.expression && this.expression.bind) {\n this.expression.bind(binding, scope, lookupFunctions);\n }\n var behavior = lookupFunctions.bindingBehaviors(this.name);\n if (!behavior) {\n throw new Error('No BindingBehavior named \"' + this.name + '\" was found!');\n }\n var behaviorKey = 'behavior-' + this.name;\n if (binding[behaviorKey]) {\n throw new Error('A binding behavior named \"' + this.name + '\" has already been applied to \"' + this.expression + '\"');\n }\n binding[behaviorKey] = behavior;\n behavior.bind.apply(behavior, [binding, scope].concat(evalList(scope, this.args, binding.lookupFunctions)));\n };\n\n BindingBehavior.prototype.unbind = function unbind(binding, scope) {\n var behaviorKey = 'behavior-' + this.name;\n binding[behaviorKey].unbind(binding, scope);\n binding[behaviorKey] = null;\n if (this.expression.expression && this.expression.unbind) {\n this.expression.unbind(binding, scope);\n }\n };\n\n return BindingBehavior;\n}(Expression);\n\nvar ValueConverter = function (_Expression2) {\n _inherits(ValueConverter, _Expression2);\n\n function ValueConverter(expression, name, args) {\n \n\n var _this4 = _possibleConstructorReturn(this, _Expression2.call(this));\n\n _this4.expression = expression;\n _this4.name = name;\n _this4.args = args;\n _this4.allArgs = [expression].concat(args);\n return _this4;\n }\n\n ValueConverter.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n var converter = lookupFunctions.valueConverters(this.name);\n if (!converter) {\n throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n }\n\n if ('toView' in converter) {\n return converter.toView.apply(converter, evalList(scope, this.allArgs, lookupFunctions));\n }\n\n return this.allArgs[0].evaluate(scope, lookupFunctions);\n };\n\n ValueConverter.prototype.assign = function assign(scope, value, lookupFunctions) {\n var converter = lookupFunctions.valueConverters(this.name);\n if (!converter) {\n throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n }\n\n if ('fromView' in converter) {\n value = converter.fromView.apply(converter, [value].concat(evalList(scope, this.args, lookupFunctions)));\n }\n\n return this.allArgs[0].assign(scope, value, lookupFunctions);\n };\n\n ValueConverter.prototype.accept = function accept(visitor) {\n return visitor.visitValueConverter(this);\n };\n\n ValueConverter.prototype.connect = function connect(binding, scope) {\n var expressions = this.allArgs;\n var i = expressions.length;\n while (i--) {\n expressions[i].connect(binding, scope);\n }\n var converter = binding.lookupFunctions.valueConverters(this.name);\n if (!converter) {\n throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n }\n var signals = converter.signals;\n if (signals === undefined) {\n return;\n }\n i = signals.length;\n while (i--) {\n connectBindingToSignal(binding, signals[i]);\n }\n };\n\n return ValueConverter;\n}(Expression);\n\nvar Assign = function (_Expression3) {\n _inherits(Assign, _Expression3);\n\n function Assign(target, value) {\n \n\n var _this5 = _possibleConstructorReturn(this, _Expression3.call(this));\n\n _this5.target = target;\n _this5.value = value;\n _this5.isAssignable = true;\n return _this5;\n }\n\n Assign.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n return this.target.assign(scope, this.value.evaluate(scope, lookupFunctions));\n };\n\n Assign.prototype.accept = function accept(vistor) {\n vistor.visitAssign(this);\n };\n\n Assign.prototype.connect = function connect(binding, scope) {};\n\n Assign.prototype.assign = function assign(scope, value) {\n this.value.assign(scope, value);\n this.target.assign(scope, value);\n };\n\n return Assign;\n}(Expression);\n\nvar Conditional = function (_Expression4) {\n _inherits(Conditional, _Expression4);\n\n function Conditional(condition, yes, no) {\n \n\n var _this6 = _possibleConstructorReturn(this, _Expression4.call(this));\n\n _this6.condition = condition;\n _this6.yes = yes;\n _this6.no = no;\n return _this6;\n }\n\n Conditional.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n return !!this.condition.evaluate(scope, lookupFunctions) ? this.yes.evaluate(scope, lookupFunctions) : this.no.evaluate(scope, lookupFunctions);\n };\n\n Conditional.prototype.accept = function accept(visitor) {\n return visitor.visitConditional(this);\n };\n\n Conditional.prototype.connect = function connect(binding, scope) {\n this.condition.connect(binding, scope);\n if (this.condition.evaluate(scope)) {\n this.yes.connect(binding, scope);\n } else {\n this.no.connect(binding, scope);\n }\n };\n\n return Conditional;\n}(Expression);\n\nvar AccessThis = function (_Expression5) {\n _inherits(AccessThis, _Expression5);\n\n function AccessThis(ancestor) {\n \n\n var _this7 = _possibleConstructorReturn(this, _Expression5.call(this));\n\n _this7.ancestor = ancestor;\n return _this7;\n }\n\n AccessThis.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n var oc = scope.overrideContext;\n var i = this.ancestor;\n while (i-- && oc) {\n oc = oc.parentOverrideContext;\n }\n return i < 1 && oc ? oc.bindingContext : undefined;\n };\n\n AccessThis.prototype.accept = function accept(visitor) {\n return visitor.visitAccessThis(this);\n };\n\n AccessThis.prototype.connect = function connect(binding, scope) {};\n\n return AccessThis;\n}(Expression);\n\nvar AccessScope = function (_Expression6) {\n _inherits(AccessScope, _Expression6);\n\n function AccessScope(name, ancestor) {\n \n\n var _this8 = _possibleConstructorReturn(this, _Expression6.call(this));\n\n _this8.name = name;\n _this8.ancestor = ancestor;\n _this8.isAssignable = true;\n return _this8;\n }\n\n AccessScope.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n var context = getContextFor(this.name, scope, this.ancestor);\n return context[this.name];\n };\n\n AccessScope.prototype.assign = function assign(scope, value) {\n var context = getContextFor(this.name, scope, this.ancestor);\n return context ? context[this.name] = value : undefined;\n };\n\n AccessScope.prototype.accept = function accept(visitor) {\n return visitor.visitAccessScope(this);\n };\n\n AccessScope.prototype.connect = function connect(binding, scope) {\n var context = getContextFor(this.name, scope, this.ancestor);\n binding.observeProperty(context, this.name);\n };\n\n return AccessScope;\n}(Expression);\n\nvar AccessMember = function (_Expression7) {\n _inherits(AccessMember, _Expression7);\n\n function AccessMember(object, name) {\n \n\n var _this9 = _possibleConstructorReturn(this, _Expression7.call(this));\n\n _this9.object = object;\n _this9.name = name;\n _this9.isAssignable = true;\n return _this9;\n }\n\n AccessMember.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n var instance = this.object.evaluate(scope, lookupFunctions);\n return instance === null || instance === undefined ? instance : instance[this.name];\n };\n\n AccessMember.prototype.assign = function assign(scope, value) {\n var instance = this.object.evaluate(scope);\n\n if (instance === null || instance === undefined) {\n instance = {};\n this.object.assign(scope, instance);\n }\n\n instance[this.name] = value;\n return value;\n };\n\n AccessMember.prototype.accept = function accept(visitor) {\n return visitor.visitAccessMember(this);\n };\n\n AccessMember.prototype.connect = function connect(binding, scope) {\n this.object.connect(binding, scope);\n var obj = this.object.evaluate(scope);\n if (obj) {\n binding.observeProperty(obj, this.name);\n }\n };\n\n return AccessMember;\n}(Expression);\n\nvar AccessKeyed = function (_Expression8) {\n _inherits(AccessKeyed, _Expression8);\n\n function AccessKeyed(object, key) {\n \n\n var _this10 = _possibleConstructorReturn(this, _Expression8.call(this));\n\n _this10.object = object;\n _this10.key = key;\n _this10.isAssignable = true;\n return _this10;\n }\n\n AccessKeyed.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n var instance = this.object.evaluate(scope, lookupFunctions);\n var lookup = this.key.evaluate(scope, lookupFunctions);\n return getKeyed(instance, lookup);\n };\n\n AccessKeyed.prototype.assign = function assign(scope, value) {\n var instance = this.object.evaluate(scope);\n var lookup = this.key.evaluate(scope);\n return setKeyed(instance, lookup, value);\n };\n\n AccessKeyed.prototype.accept = function accept(visitor) {\n return visitor.visitAccessKeyed(this);\n };\n\n AccessKeyed.prototype.connect = function connect(binding, scope) {\n this.object.connect(binding, scope);\n var obj = this.object.evaluate(scope);\n if (obj instanceof Object) {\n this.key.connect(binding, scope);\n var key = this.key.evaluate(scope);\n\n if (key !== null && key !== undefined && !(Array.isArray(obj) && typeof key === 'number')) {\n binding.observeProperty(obj, key);\n }\n }\n };\n\n return AccessKeyed;\n}(Expression);\n\nvar CallScope = function (_Expression9) {\n _inherits(CallScope, _Expression9);\n\n function CallScope(name, args, ancestor) {\n \n\n var _this11 = _possibleConstructorReturn(this, _Expression9.call(this));\n\n _this11.name = name;\n _this11.args = args;\n _this11.ancestor = ancestor;\n return _this11;\n }\n\n CallScope.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n var args = evalList(scope, this.args, lookupFunctions);\n var context = getContextFor(this.name, scope, this.ancestor);\n var func = getFunction(context, this.name, mustEvaluate);\n if (func) {\n return func.apply(context, args);\n }\n return undefined;\n };\n\n CallScope.prototype.accept = function accept(visitor) {\n return visitor.visitCallScope(this);\n };\n\n CallScope.prototype.connect = function connect(binding, scope) {\n var args = this.args;\n var i = args.length;\n while (i--) {\n args[i].connect(binding, scope);\n }\n };\n\n return CallScope;\n}(Expression);\n\nvar CallMember = function (_Expression10) {\n _inherits(CallMember, _Expression10);\n\n function CallMember(object, name, args) {\n \n\n var _this12 = _possibleConstructorReturn(this, _Expression10.call(this));\n\n _this12.object = object;\n _this12.name = name;\n _this12.args = args;\n return _this12;\n }\n\n CallMember.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n var instance = this.object.evaluate(scope, lookupFunctions);\n var args = evalList(scope, this.args, lookupFunctions);\n var func = getFunction(instance, this.name, mustEvaluate);\n if (func) {\n return func.apply(instance, args);\n }\n return undefined;\n };\n\n CallMember.prototype.accept = function accept(visitor) {\n return visitor.visitCallMember(this);\n };\n\n CallMember.prototype.connect = function connect(binding, scope) {\n this.object.connect(binding, scope);\n var obj = this.object.evaluate(scope);\n if (getFunction(obj, this.name, false)) {\n var args = this.args;\n var i = args.length;\n while (i--) {\n args[i].connect(binding, scope);\n }\n }\n };\n\n return CallMember;\n}(Expression);\n\nvar CallFunction = function (_Expression11) {\n _inherits(CallFunction, _Expression11);\n\n function CallFunction(func, args) {\n \n\n var _this13 = _possibleConstructorReturn(this, _Expression11.call(this));\n\n _this13.func = func;\n _this13.args = args;\n return _this13;\n }\n\n CallFunction.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n var func = this.func.evaluate(scope, lookupFunctions);\n if (typeof func === 'function') {\n return func.apply(null, evalList(scope, this.args, lookupFunctions));\n }\n if (!mustEvaluate && (func === null || func === undefined)) {\n return undefined;\n }\n throw new Error(this.func + ' is not a function');\n };\n\n CallFunction.prototype.accept = function accept(visitor) {\n return visitor.visitCallFunction(this);\n };\n\n CallFunction.prototype.connect = function connect(binding, scope) {\n this.func.connect(binding, scope);\n var func = this.func.evaluate(scope);\n if (typeof func === 'function') {\n var args = this.args;\n var i = args.length;\n while (i--) {\n args[i].connect(binding, scope);\n }\n }\n };\n\n return CallFunction;\n}(Expression);\n\nvar Binary = function (_Expression12) {\n _inherits(Binary, _Expression12);\n\n function Binary(operation, left, right) {\n \n\n var _this14 = _possibleConstructorReturn(this, _Expression12.call(this));\n\n _this14.operation = operation;\n _this14.left = left;\n _this14.right = right;\n return _this14;\n }\n\n Binary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n var left = this.left.evaluate(scope, lookupFunctions);\n\n switch (this.operation) {\n case '&&':\n return left && this.right.evaluate(scope, lookupFunctions);\n case '||':\n return left || this.right.evaluate(scope, lookupFunctions);\n }\n\n var right = this.right.evaluate(scope, lookupFunctions);\n\n switch (this.operation) {\n case '==':\n return left == right;\n case '===':\n return left === right;\n case '!=':\n return left != right;\n case '!==':\n return left !== right;\n case 'instanceof':\n return typeof right === 'function' && left instanceof right;\n case 'in':\n return (typeof right === 'undefined' ? 'undefined' : _typeof(right)) === 'object' && right !== null && left in right;\n }\n\n if (left === null || right === null || left === undefined || right === undefined) {\n switch (this.operation) {\n case '+':\n if (left !== null && left !== undefined) return left;\n if (right !== null && right !== undefined) return right;\n return 0;\n case '-':\n if (left !== null && left !== undefined) return left;\n if (right !== null && right !== undefined) return 0 - right;\n return 0;\n }\n\n return null;\n }\n\n switch (this.operation) {\n case '+':\n return autoConvertAdd(left, right);\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '%':\n return left % right;\n case '<':\n return left < right;\n case '>':\n return left > right;\n case '<=':\n return left <= right;\n case '>=':\n return left >= right;\n case '^':\n return left ^ right;\n }\n\n throw new Error('Internal error [' + this.operation + '] not handled');\n };\n\n Binary.prototype.accept = function accept(visitor) {\n return visitor.visitBinary(this);\n };\n\n Binary.prototype.connect = function connect(binding, scope) {\n this.left.connect(binding, scope);\n var left = this.left.evaluate(scope);\n if (this.operation === '&&' && !left || this.operation === '||' && left) {\n return;\n }\n this.right.connect(binding, scope);\n };\n\n return Binary;\n}(Expression);\n\nvar Unary = function (_Expression13) {\n _inherits(Unary, _Expression13);\n\n function Unary(operation, expression) {\n \n\n var _this15 = _possibleConstructorReturn(this, _Expression13.call(this));\n\n _this15.operation = operation;\n _this15.expression = expression;\n return _this15;\n }\n\n Unary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n switch (this.operation) {\n case '!':\n return !this.expression.evaluate(scope, lookupFunctions);\n case 'typeof':\n return _typeof(this.expression.evaluate(scope, lookupFunctions));\n case 'void':\n return void this.expression.evaluate(scope, lookupFunctions);\n }\n\n throw new Error('Internal error [' + this.operation + '] not handled');\n };\n\n Unary.prototype.accept = function accept(visitor) {\n return visitor.visitPrefix(this);\n };\n\n Unary.prototype.connect = function connect(binding, scope) {\n this.expression.connect(binding, scope);\n };\n\n return Unary;\n}(Expression);\n\nvar LiteralPrimitive = function (_Expression14) {\n _inherits(LiteralPrimitive, _Expression14);\n\n function LiteralPrimitive(value) {\n \n\n var _this16 = _possibleConstructorReturn(this, _Expression14.call(this));\n\n _this16.value = value;\n return _this16;\n }\n\n LiteralPrimitive.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n return this.value;\n };\n\n LiteralPrimitive.prototype.accept = function accept(visitor) {\n return visitor.visitLiteralPrimitive(this);\n };\n\n LiteralPrimitive.prototype.connect = function connect(binding, scope) {};\n\n return LiteralPrimitive;\n}(Expression);\n\nvar LiteralString = function (_Expression15) {\n _inherits(LiteralString, _Expression15);\n\n function LiteralString(value) {\n \n\n var _this17 = _possibleConstructorReturn(this, _Expression15.call(this));\n\n _this17.value = value;\n return _this17;\n }\n\n LiteralString.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n return this.value;\n };\n\n LiteralString.prototype.accept = function accept(visitor) {\n return visitor.visitLiteralString(this);\n };\n\n LiteralString.prototype.connect = function connect(binding, scope) {};\n\n return LiteralString;\n}(Expression);\n\nvar LiteralTemplate = function (_Expression16) {\n _inherits(LiteralTemplate, _Expression16);\n\n function LiteralTemplate(cooked, expressions, raw, tag) {\n \n\n var _this18 = _possibleConstructorReturn(this, _Expression16.call(this));\n\n _this18.cooked = cooked;\n _this18.expressions = expressions || [];\n _this18.length = _this18.expressions.length;\n _this18.tagged = tag !== undefined;\n if (_this18.tagged) {\n _this18.cooked.raw = raw;\n _this18.tag = tag;\n if (tag instanceof AccessScope) {\n _this18.contextType = 'Scope';\n } else if (tag instanceof AccessMember || tag instanceof AccessKeyed) {\n _this18.contextType = 'Object';\n } else {\n throw new Error(_this18.tag + ' is not a valid template tag');\n }\n }\n return _this18;\n }\n\n LiteralTemplate.prototype.getScopeContext = function getScopeContext(scope, lookupFunctions) {\n return getContextFor(this.tag.name, scope, this.tag.ancestor);\n };\n\n LiteralTemplate.prototype.getObjectContext = function getObjectContext(scope, lookupFunctions) {\n return this.tag.object.evaluate(scope, lookupFunctions);\n };\n\n LiteralTemplate.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n var results = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n results[i] = this.expressions[i].evaluate(scope, lookupFunctions);\n }\n if (this.tagged) {\n var func = this.tag.evaluate(scope, lookupFunctions);\n if (typeof func === 'function') {\n var context = this['get' + this.contextType + 'Context'](scope, lookupFunctions);\n return func.call.apply(func, [context, this.cooked].concat(results));\n }\n if (!mustEvaluate) {\n return null;\n }\n throw new Error(this.tag + ' is not a function');\n }\n var result = this.cooked[0];\n for (var _i2 = 0; _i2 < this.length; _i2++) {\n result = String.prototype.concat(result, results[_i2], this.cooked[_i2 + 1]);\n }\n return result;\n };\n\n LiteralTemplate.prototype.accept = function accept(visitor) {\n return visitor.visitLiteralTemplate(this);\n };\n\n LiteralTemplate.prototype.connect = function connect(binding, scope) {\n for (var i = 0; i < this.length; i++) {\n this.expressions[i].connect(binding, scope);\n }\n if (this.tagged) {\n this.tag.connect(binding, scope);\n }\n };\n\n return LiteralTemplate;\n}(Expression);\n\nvar LiteralArray = function (_Expression17) {\n _inherits(LiteralArray, _Expression17);\n\n function LiteralArray(elements) {\n \n\n var _this19 = _possibleConstructorReturn(this, _Expression17.call(this));\n\n _this19.elements = elements;\n return _this19;\n }\n\n LiteralArray.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n var elements = this.elements;\n var result = [];\n\n for (var i = 0, length = elements.length; i < length; ++i) {\n result[i] = elements[i].evaluate(scope, lookupFunctions);\n }\n\n return result;\n };\n\n LiteralArray.prototype.accept = function accept(visitor) {\n return visitor.visitLiteralArray(this);\n };\n\n LiteralArray.prototype.connect = function connect(binding, scope) {\n var length = this.elements.length;\n for (var i = 0; i < length; i++) {\n this.elements[i].connect(binding, scope);\n }\n };\n\n return LiteralArray;\n}(Expression);\n\nvar LiteralObject = function (_Expression18) {\n _inherits(LiteralObject, _Expression18);\n\n function LiteralObject(keys, values) {\n \n\n var _this20 = _possibleConstructorReturn(this, _Expression18.call(this));\n\n _this20.keys = keys;\n _this20.values = values;\n return _this20;\n }\n\n LiteralObject.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n var instance = {};\n var keys = this.keys;\n var values = this.values;\n\n for (var i = 0, length = keys.length; i < length; ++i) {\n instance[keys[i]] = values[i].evaluate(scope, lookupFunctions);\n }\n\n return instance;\n };\n\n LiteralObject.prototype.accept = function accept(visitor) {\n return visitor.visitLiteralObject(this);\n };\n\n LiteralObject.prototype.connect = function connect(binding, scope) {\n var length = this.keys.length;\n for (var i = 0; i < length; i++) {\n this.values[i].connect(binding, scope);\n }\n };\n\n return LiteralObject;\n}(Expression);\n\nfunction evalList(scope, list, lookupFunctions) {\n var length = list.length;\n var result = [];\n for (var i = 0; i < length; i++) {\n result[i] = list[i].evaluate(scope, lookupFunctions);\n }\n return result;\n}\n\nfunction autoConvertAdd(a, b) {\n if (a !== null && b !== null) {\n if (typeof a === 'string' && typeof b !== 'string') {\n return a + b.toString();\n }\n\n if (typeof a !== 'string' && typeof b === 'string') {\n return a.toString() + b;\n }\n\n return a + b;\n }\n\n if (a !== null) {\n return a;\n }\n\n if (b !== null) {\n return b;\n }\n\n return 0;\n}\n\nfunction getFunction(obj, name, mustExist) {\n var func = obj === null || obj === undefined ? null : obj[name];\n if (typeof func === 'function') {\n return func;\n }\n if (!mustExist && (func === null || func === undefined)) {\n return null;\n }\n throw new Error(name + ' is not a function');\n}\n\nfunction getKeyed(obj, key) {\n if (Array.isArray(obj)) {\n return obj[parseInt(key, 10)];\n } else if (obj) {\n return obj[key];\n } else if (obj === null || obj === undefined) {\n return undefined;\n }\n\n return obj[key];\n}\n\nfunction setKeyed(obj, key, value) {\n if (Array.isArray(obj)) {\n var index = parseInt(key, 10);\n\n if (obj.length <= index) {\n obj.length = index + 1;\n }\n\n obj[index] = value;\n } else {\n obj[key] = value;\n }\n\n return value;\n}\n\nvar _Unparser = null;\n\n\nif (typeof FEATURE_NO_UNPARSER === 'undefined') {\n _Unparser = function () {\n function Unparser(buffer) {\n \n\n this.buffer = buffer;\n }\n\n Unparser.unparse = function unparse(expression) {\n var buffer = [];\n var visitor = new _Unparser(buffer);\n\n expression.accept(visitor);\n\n return buffer.join('');\n };\n\n Unparser.prototype.write = function write(text) {\n this.buffer.push(text);\n };\n\n Unparser.prototype.writeArgs = function writeArgs(args) {\n this.write('(');\n\n for (var i = 0, length = args.length; i < length; ++i) {\n if (i !== 0) {\n this.write(',');\n }\n\n args[i].accept(this);\n }\n\n this.write(')');\n };\n\n Unparser.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n var args = behavior.args;\n\n behavior.expression.accept(this);\n this.write('&' + behavior.name);\n\n for (var i = 0, length = args.length; i < length; ++i) {\n this.write(':');\n args[i].accept(this);\n }\n };\n\n Unparser.prototype.visitValueConverter = function visitValueConverter(converter) {\n var args = converter.args;\n\n converter.expression.accept(this);\n this.write('|' + converter.name);\n\n for (var i = 0, length = args.length; i < length; ++i) {\n this.write(':');\n args[i].accept(this);\n }\n };\n\n Unparser.prototype.visitAssign = function visitAssign(assign) {\n assign.target.accept(this);\n this.write('=');\n assign.value.accept(this);\n };\n\n Unparser.prototype.visitConditional = function visitConditional(conditional) {\n conditional.condition.accept(this);\n this.write('?');\n conditional.yes.accept(this);\n this.write(':');\n conditional.no.accept(this);\n };\n\n Unparser.prototype.visitAccessThis = function visitAccessThis(access) {\n if (access.ancestor === 0) {\n this.write('$this');\n return;\n }\n this.write('$parent');\n var i = access.ancestor - 1;\n while (i--) {\n this.write('.$parent');\n }\n };\n\n Unparser.prototype.visitAccessScope = function visitAccessScope(access) {\n var i = access.ancestor;\n while (i--) {\n this.write('$parent.');\n }\n this.write(access.name);\n };\n\n Unparser.prototype.visitAccessMember = function visitAccessMember(access) {\n access.object.accept(this);\n this.write('.' + access.name);\n };\n\n Unparser.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n access.object.accept(this);\n this.write('[');\n access.key.accept(this);\n this.write(']');\n };\n\n Unparser.prototype.visitCallScope = function visitCallScope(call) {\n var i = call.ancestor;\n while (i--) {\n this.write('$parent.');\n }\n this.write(call.name);\n this.writeArgs(call.args);\n };\n\n Unparser.prototype.visitCallFunction = function visitCallFunction(call) {\n call.func.accept(this);\n this.writeArgs(call.args);\n };\n\n Unparser.prototype.visitCallMember = function visitCallMember(call) {\n call.object.accept(this);\n this.write('.' + call.name);\n this.writeArgs(call.args);\n };\n\n Unparser.prototype.visitPrefix = function visitPrefix(prefix) {\n this.write('(' + prefix.operation);\n if (prefix.operation.charCodeAt(0) >= 97) {\n this.write(' ');\n }\n prefix.expression.accept(this);\n this.write(')');\n };\n\n Unparser.prototype.visitBinary = function visitBinary(binary) {\n binary.left.accept(this);\n if (binary.operation.charCodeAt(0) === 105) {\n this.write(' ' + binary.operation + ' ');\n } else {\n this.write(binary.operation);\n }\n binary.right.accept(this);\n };\n\n Unparser.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n this.write('' + literal.value);\n };\n\n Unparser.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n var elements = literal.elements;\n\n this.write('[');\n\n for (var i = 0, length = elements.length; i < length; ++i) {\n if (i !== 0) {\n this.write(',');\n }\n\n elements[i].accept(this);\n }\n\n this.write(']');\n };\n\n Unparser.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n var keys = literal.keys;\n var values = literal.values;\n\n this.write('{');\n\n for (var i = 0, length = keys.length; i < length; ++i) {\n if (i !== 0) {\n this.write(',');\n }\n\n this.write('\\'' + keys[i] + '\\':');\n values[i].accept(this);\n }\n\n this.write('}');\n };\n\n Unparser.prototype.visitLiteralString = function visitLiteralString(literal) {\n var escaped = literal.value.replace(/'/g, \"\\'\");\n this.write('\\'' + escaped + '\\'');\n };\n\n Unparser.prototype.visitLiteralTemplate = function visitLiteralTemplate(literal) {\n var cooked = literal.cooked,\n expressions = literal.expressions;\n\n var length = expressions.length;\n this.write('`');\n this.write(cooked[0]);\n for (var i = 0; i < length; i++) {\n expressions[i].accept(this);\n this.write(cooked[i + 1]);\n }\n this.write('`');\n };\n\n return Unparser;\n }();\n}\n\nvar ExpressionCloner = function () {\n function ExpressionCloner() {\n \n }\n\n ExpressionCloner.prototype.cloneExpressionArray = function cloneExpressionArray(array) {\n var clonedArray = [];\n var i = array.length;\n while (i--) {\n clonedArray[i] = array[i].accept(this);\n }\n return clonedArray;\n };\n\n ExpressionCloner.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n return new BindingBehavior(behavior.expression.accept(this), behavior.name, this.cloneExpressionArray(behavior.args));\n };\n\n ExpressionCloner.prototype.visitValueConverter = function visitValueConverter(converter) {\n return new ValueConverter(converter.expression.accept(this), converter.name, this.cloneExpressionArray(converter.args));\n };\n\n ExpressionCloner.prototype.visitAssign = function visitAssign(assign) {\n return new Assign(assign.target.accept(this), assign.value.accept(this));\n };\n\n ExpressionCloner.prototype.visitConditional = function visitConditional(conditional) {\n return new Conditional(conditional.condition.accept(this), conditional.yes.accept(this), conditional.no.accept(this));\n };\n\n ExpressionCloner.prototype.visitAccessThis = function visitAccessThis(access) {\n return new AccessThis(access.ancestor);\n };\n\n ExpressionCloner.prototype.visitAccessScope = function visitAccessScope(access) {\n return new AccessScope(access.name, access.ancestor);\n };\n\n ExpressionCloner.prototype.visitAccessMember = function visitAccessMember(access) {\n return new AccessMember(access.object.accept(this), access.name);\n };\n\n ExpressionCloner.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n return new AccessKeyed(access.object.accept(this), access.key.accept(this));\n };\n\n ExpressionCloner.prototype.visitCallScope = function visitCallScope(call) {\n return new CallScope(call.name, this.cloneExpressionArray(call.args), call.ancestor);\n };\n\n ExpressionCloner.prototype.visitCallFunction = function visitCallFunction(call) {\n return new CallFunction(call.func.accept(this), this.cloneExpressionArray(call.args));\n };\n\n ExpressionCloner.prototype.visitCallMember = function visitCallMember(call) {\n return new CallMember(call.object.accept(this), call.name, this.cloneExpressionArray(call.args));\n };\n\n ExpressionCloner.prototype.visitUnary = function visitUnary(unary) {\n return new Unary(prefix.operation, prefix.expression.accept(this));\n };\n\n ExpressionCloner.prototype.visitBinary = function visitBinary(binary) {\n return new Binary(binary.operation, binary.left.accept(this), binary.right.accept(this));\n };\n\n ExpressionCloner.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n return new LiteralPrimitive(literal);\n };\n\n ExpressionCloner.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n return new LiteralArray(this.cloneExpressionArray(literal.elements));\n };\n\n ExpressionCloner.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n return new LiteralObject(literal.keys, this.cloneExpressionArray(literal.values));\n };\n\n ExpressionCloner.prototype.visitLiteralString = function visitLiteralString(literal) {\n return new LiteralString(literal.value);\n };\n\n ExpressionCloner.prototype.visitLiteralTemplate = function visitLiteralTemplate(literal) {\n return new LiteralTemplate(literal.cooked, this.cloneExpressionArray(literal.expressions), literal.raw, literal.tag && literal.tag.accept(this));\n };\n\n return ExpressionCloner;\n}();\n\nfunction cloneExpression(expression) {\n var visitor = new ExpressionCloner();\n return expression.accept(visitor);\n}\n\nvar bindingMode = {\n oneTime: 0,\n toView: 1,\n oneWay: 1,\n twoWay: 2,\n fromView: 3\n};\n\nvar Parser = function () {\n function Parser() {\n \n\n this.cache = Object.create(null);\n }\n\n Parser.prototype.parse = function parse(src) {\n src = src || '';\n\n return this.cache[src] || (this.cache[src] = new ParserImplementation(src).parseBindingBehavior());\n };\n\n return Parser;\n}();\n\nvar fromCharCode = String.fromCharCode;\n\nvar ParserImplementation = function () {\n _createClass(ParserImplementation, [{\n key: 'raw',\n get: function get() {\n return this.src.slice(this.start, this.idx);\n }\n }]);\n\n function ParserImplementation(src) {\n \n\n this.idx = 0;\n\n this.start = 0;\n\n this.src = src;\n this.len = src.length;\n\n this.tkn = T$EOF;\n\n this.val = undefined;\n\n this.ch = src.charCodeAt(0);\n }\n\n ParserImplementation.prototype.parseBindingBehavior = function parseBindingBehavior() {\n this.nextToken();\n if (this.tkn & T$ExpressionTerminal) {\n this.err('Invalid start of expression');\n }\n var result = this.parseValueConverter();\n while (this.opt(T$Ampersand)) {\n result = new BindingBehavior(result, this.val, this.parseVariadicArgs());\n }\n if (this.tkn !== T$EOF) {\n this.err('Unconsumed token ' + this.raw);\n }\n return result;\n };\n\n ParserImplementation.prototype.parseValueConverter = function parseValueConverter() {\n var result = this.parseExpression();\n while (this.opt(T$Bar)) {\n result = new ValueConverter(result, this.val, this.parseVariadicArgs());\n }\n return result;\n };\n\n ParserImplementation.prototype.parseVariadicArgs = function parseVariadicArgs() {\n this.nextToken();\n var result = [];\n while (this.opt(T$Colon)) {\n result.push(this.parseExpression());\n }\n return result;\n };\n\n ParserImplementation.prototype.parseExpression = function parseExpression() {\n var exprStart = this.idx;\n var result = this.parseConditional();\n\n while (this.tkn === T$Eq) {\n if (!result.isAssignable) {\n this.err('Expression ' + this.src.slice(exprStart, this.start) + ' is not assignable');\n }\n this.nextToken();\n exprStart = this.idx;\n result = new Assign(result, this.parseConditional());\n }\n return result;\n };\n\n ParserImplementation.prototype.parseConditional = function parseConditional() {\n var result = this.parseBinary(0);\n\n if (this.opt(T$Question)) {\n var yes = this.parseExpression();\n this.expect(T$Colon);\n result = new Conditional(result, yes, this.parseExpression());\n }\n return result;\n };\n\n ParserImplementation.prototype.parseBinary = function parseBinary(minPrecedence) {\n var left = this.parseLeftHandSide(0);\n\n while (this.tkn & T$BinaryOp) {\n var opToken = this.tkn;\n if ((opToken & T$Precedence) <= minPrecedence) {\n break;\n }\n this.nextToken();\n left = new Binary(TokenValues[opToken & T$TokenMask], left, this.parseBinary(opToken & T$Precedence));\n }\n return left;\n };\n\n ParserImplementation.prototype.parseLeftHandSide = function parseLeftHandSide(context) {\n var result = void 0;\n\n primary: switch (this.tkn) {\n case T$Plus:\n this.nextToken();\n return this.parseLeftHandSide(0);\n case T$Minus:\n this.nextToken();\n return new Binary('-', new LiteralPrimitive(0), this.parseLeftHandSide(0));\n case T$Bang:\n case T$TypeofKeyword:\n case T$VoidKeyword:\n var op = TokenValues[this.tkn & T$TokenMask];\n this.nextToken();\n return new Unary(op, this.parseLeftHandSide(0));\n case T$ParentScope:\n {\n do {\n this.nextToken();\n context++;\n if (this.opt(T$Period)) {\n if (this.tkn === T$Period) {\n this.err();\n }\n continue;\n } else if (this.tkn & T$AccessScopeTerminal) {\n result = new AccessThis(context & C$Ancestor);\n\n context = context & C$ShorthandProp | C$This;\n break primary;\n } else {\n this.err();\n }\n } while (this.tkn === T$ParentScope);\n }\n\n case T$Identifier:\n {\n result = new AccessScope(this.val, context & C$Ancestor);\n this.nextToken();\n context = context & C$ShorthandProp | C$Scope;\n break;\n }\n case T$ThisScope:\n this.nextToken();\n result = new AccessThis(0);\n context = context & C$ShorthandProp | C$This;\n break;\n case T$LParen:\n this.nextToken();\n result = this.parseExpression();\n this.expect(T$RParen);\n context = C$Primary;\n break;\n case T$LBracket:\n {\n this.nextToken();\n var _elements = [];\n if (this.tkn !== T$RBracket) {\n do {\n _elements.push(this.parseExpression());\n } while (this.opt(T$Comma));\n }\n this.expect(T$RBracket);\n result = new LiteralArray(_elements);\n context = C$Primary;\n break;\n }\n case T$LBrace:\n {\n var keys = [];\n var values = [];\n this.nextToken();\n while (this.tkn !== T$RBrace) {\n if (this.tkn & T$IdentifierOrKeyword) {\n var ch = this.ch,\n tkn = this.tkn,\n idx = this.idx;\n\n keys.push(this.val);\n this.nextToken();\n if (this.opt(T$Colon)) {\n values.push(this.parseExpression());\n } else {\n this.ch = ch;\n this.tkn = tkn;\n this.idx = idx;\n values.push(this.parseLeftHandSide(C$ShorthandProp));\n }\n } else if (this.tkn & T$Literal) {\n keys.push(this.val);\n this.nextToken();\n this.expect(T$Colon);\n values.push(this.parseExpression());\n } else {\n this.err();\n }\n if (this.tkn !== T$RBrace) {\n this.expect(T$Comma);\n }\n }\n this.expect(T$RBrace);\n result = new LiteralObject(keys, values);\n context = C$Primary;\n break;\n }\n case T$StringLiteral:\n result = new LiteralString(this.val);\n this.nextToken();\n context = C$Primary;\n break;\n case T$TemplateTail:\n result = new LiteralTemplate([this.val]);\n this.nextToken();\n context = C$Primary;\n break;\n case T$TemplateContinuation:\n result = this.parseTemplate(0);\n context = C$Primary;\n break;\n case T$NumericLiteral:\n {\n result = new LiteralPrimitive(this.val);\n this.nextToken();\n\n break;\n }\n case T$NullKeyword:\n case T$UndefinedKeyword:\n case T$TrueKeyword:\n case T$FalseKeyword:\n result = new LiteralPrimitive(TokenValues[this.tkn & T$TokenMask]);\n this.nextToken();\n context = C$Primary;\n break;\n default:\n if (this.idx >= this.len) {\n this.err('Unexpected end of expression');\n } else {\n this.err();\n }\n }\n\n if (context & C$ShorthandProp) {\n return result;\n }\n\n var name = this.val;\n while (this.tkn & T$MemberOrCallExpression) {\n switch (this.tkn) {\n case T$Period:\n this.nextToken();\n if (!(this.tkn & T$IdentifierOrKeyword)) {\n this.err();\n }\n name = this.val;\n this.nextToken();\n\n context = context & C$Primary | (context & (C$This | C$Scope)) << 1 | context & C$Member | (context & C$Keyed) >> 1 | (context & C$Call) >> 2;\n if (this.tkn === T$LParen) {\n continue;\n }\n if (context & C$Scope) {\n result = new AccessScope(name, result.ancestor);\n } else {\n result = new AccessMember(result, name);\n }\n continue;\n case T$LBracket:\n this.nextToken();\n context = C$Keyed;\n result = new AccessKeyed(result, this.parseExpression());\n this.expect(T$RBracket);\n break;\n case T$LParen:\n this.nextToken();\n var args = [];\n while (this.tkn !== T$RParen) {\n args.push(this.parseExpression());\n if (!this.opt(T$Comma)) {\n break;\n }\n }\n this.expect(T$RParen);\n if (context & C$Scope) {\n result = new CallScope(name, args, result.ancestor);\n } else if (context & (C$Member | C$Primary)) {\n result = new CallMember(result, name, args);\n } else {\n result = new CallFunction(result, args);\n }\n context = C$Call;\n break;\n case T$TemplateTail:\n result = new LiteralTemplate([this.val], [], [this.raw], result);\n this.nextToken();\n break;\n case T$TemplateContinuation:\n result = this.parseTemplate(context | C$Tagged, result);\n }\n }\n\n return result;\n };\n\n ParserImplementation.prototype.parseTemplate = function parseTemplate(context, func) {\n var cooked = [this.val];\n var raw = context & C$Tagged ? [this.raw] : undefined;\n this.expect(T$TemplateContinuation);\n var expressions = [this.parseExpression()];\n\n while ((this.tkn = this.scanTemplateTail()) !== T$TemplateTail) {\n cooked.push(this.val);\n if (context & C$Tagged) {\n raw.push(this.raw);\n }\n this.expect(T$TemplateContinuation);\n expressions.push(this.parseExpression());\n }\n\n cooked.push(this.val);\n if (context & C$Tagged) {\n raw.push(this.raw);\n }\n this.nextToken();\n return new LiteralTemplate(cooked, expressions, raw, func);\n };\n\n ParserImplementation.prototype.nextToken = function nextToken() {\n while (this.idx < this.len) {\n if (this.ch <= 0x20) {\n this.next();\n continue;\n }\n this.start = this.idx;\n if (this.ch === 0x24 || this.ch >= 0x61 && this.ch <= 0x7A) {\n this.tkn = this.scanIdentifier();\n return;\n }\n\n if ((this.tkn = CharScanners[this.ch](this)) !== null) {\n return;\n }\n }\n this.tkn = T$EOF;\n };\n\n ParserImplementation.prototype.next = function next() {\n return this.ch = this.src.charCodeAt(++this.idx);\n };\n\n ParserImplementation.prototype.scanIdentifier = function scanIdentifier() {\n while (AsciiIdParts.has(this.next()) || this.ch > 0x7F && IdParts[this.ch]) {}\n\n return KeywordLookup[this.val = this.raw] || T$Identifier;\n };\n\n ParserImplementation.prototype.scanNumber = function scanNumber(isFloat) {\n if (isFloat) {\n this.val = 0;\n } else {\n this.val = this.ch - 0x30;\n while (this.next() <= 0x39 && this.ch >= 0x30) {\n this.val = this.val * 10 + this.ch - 0x30;\n }\n }\n\n if (isFloat || this.ch === 0x2E) {\n if (!isFloat) {\n this.next();\n }\n var start = this.idx;\n var value = this.ch - 0x30;\n while (this.next() <= 0x39 && this.ch >= 0x30) {\n value = value * 10 + this.ch - 0x30;\n }\n this.val = this.val + value / Math.pow(10, this.idx - start);\n }\n\n if (this.ch === 0x65 || this.ch === 0x45) {\n var _start = this.idx;\n\n this.next();\n if (this.ch === 0x2D || this.ch === 0x2B) {\n this.next();\n }\n\n if (!(this.ch >= 0x30 && this.ch <= 0x39)) {\n this.idx = _start;\n this.err('Invalid exponent');\n }\n while (this.next() <= 0x39 && this.ch >= 0x30) {}\n this.val = parseFloat(this.src.slice(this.start, this.idx));\n }\n\n return T$NumericLiteral;\n };\n\n ParserImplementation.prototype.scanString = function scanString() {\n var quote = this.ch;\n this.next();\n\n var buffer = void 0;\n var marker = this.idx;\n\n while (this.ch !== quote) {\n if (this.ch === 0x5C) {\n if (!buffer) {\n buffer = [];\n }\n\n buffer.push(this.src.slice(marker, this.idx));\n\n this.next();\n\n var _unescaped = void 0;\n\n if (this.ch === 0x75) {\n this.next();\n\n if (this.idx + 4 < this.len) {\n var hex = this.src.slice(this.idx, this.idx + 4);\n\n if (!/[A-Z0-9]{4}/i.test(hex)) {\n this.err('Invalid unicode escape [\\\\u' + hex + ']');\n }\n\n _unescaped = parseInt(hex, 16);\n this.idx += 4;\n this.ch = this.src.charCodeAt(this.idx);\n } else {\n this.err();\n }\n } else {\n _unescaped = unescape(this.ch);\n this.next();\n }\n\n buffer.push(fromCharCode(_unescaped));\n marker = this.idx;\n } else if (this.ch === 0 || this.idx >= this.len) {\n this.err('Unterminated quote');\n } else {\n this.next();\n }\n }\n\n var last = this.src.slice(marker, this.idx);\n this.next();\n var unescaped = last;\n\n if (buffer !== null && buffer !== undefined) {\n buffer.push(last);\n unescaped = buffer.join('');\n }\n\n this.val = unescaped;\n return T$StringLiteral;\n };\n\n ParserImplementation.prototype.scanTemplate = function scanTemplate() {\n var tail = true;\n var result = '';\n\n while (this.next() !== 0x60) {\n if (this.ch === 0x24) {\n if (this.idx + 1 < this.len && this.src.charCodeAt(this.idx + 1) === 0x7B) {\n this.idx++;\n tail = false;\n break;\n } else {\n result += '$';\n }\n } else if (this.ch === 0x5C) {\n result += fromCharCode(unescape(this.next()));\n } else if (this.ch === 0 || this.idx >= this.len) {\n this.err('Unterminated template literal');\n } else {\n result += fromCharCode(this.ch);\n }\n }\n\n this.next();\n this.val = result;\n if (tail) {\n return T$TemplateTail;\n }\n return T$TemplateContinuation;\n };\n\n ParserImplementation.prototype.scanTemplateTail = function scanTemplateTail() {\n if (this.idx >= this.len) {\n this.err('Unterminated template');\n }\n this.idx--;\n return this.scanTemplate();\n };\n\n ParserImplementation.prototype.err = function err() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Unexpected token ' + this.raw;\n var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.start;\n\n throw new Error('Parser Error: ' + message + ' at column ' + column + ' in expression [' + this.src + ']');\n };\n\n ParserImplementation.prototype.opt = function opt(token) {\n if (this.tkn === token) {\n this.nextToken();\n return true;\n }\n\n return false;\n };\n\n ParserImplementation.prototype.expect = function expect(token) {\n if (this.tkn === token) {\n this.nextToken();\n } else {\n this.err('Missing expected token ' + TokenValues[token & T$TokenMask], this.idx);\n }\n };\n\n return ParserImplementation;\n}();\n\nfunction unescape(code) {\n switch (code) {\n case 0x66:\n return 0xC;\n case 0x6E:\n return 0xA;\n case 0x72:\n return 0xD;\n case 0x74:\n return 0x9;\n case 0x76:\n return 0xB;\n default:\n return code;\n }\n}\n\nvar C$This = 1 << 10;\nvar C$Scope = 1 << 11;\nvar C$Member = 1 << 12;\nvar C$Keyed = 1 << 13;\nvar C$Call = 1 << 14;\nvar C$Primary = 1 << 15;\nvar C$ShorthandProp = 1 << 16;\nvar C$Tagged = 1 << 17;\n\nvar C$Ancestor = (1 << 9) - 1;\n\nvar T$TokenMask = (1 << 6) - 1;\n\nvar T$PrecShift = 6;\n\nvar T$Precedence = 7 << T$PrecShift;\n\nvar T$ExpressionTerminal = 1 << 11;\n\nvar T$ClosingToken = 1 << 12;\n\nvar T$OpeningToken = 1 << 13;\n\nvar T$AccessScopeTerminal = 1 << 14;\nvar T$Keyword = 1 << 15;\nvar T$EOF = 1 << 16 | T$AccessScopeTerminal | T$ExpressionTerminal;\nvar T$Identifier = 1 << 17;\nvar T$IdentifierOrKeyword = T$Identifier | T$Keyword;\nvar T$Literal = 1 << 18;\nvar T$NumericLiteral = 1 << 19 | T$Literal;\nvar T$StringLiteral = 1 << 20 | T$Literal;\nvar T$BinaryOp = 1 << 21;\n\nvar T$UnaryOp = 1 << 22;\n\nvar T$MemberExpression = 1 << 23;\n\nvar T$MemberOrCallExpression = 1 << 24;\nvar T$TemplateTail = 1 << 25 | T$MemberOrCallExpression;\nvar T$TemplateContinuation = 1 << 26 | T$MemberOrCallExpression;\n\nvar T$FalseKeyword = 0 | T$Keyword | T$Literal;\nvar T$TrueKeyword = 1 | T$Keyword | T$Literal;\nvar T$NullKeyword = 2 | T$Keyword | T$Literal;\nvar T$UndefinedKeyword = 3 | T$Keyword | T$Literal;\nvar T$ThisScope = 4 | T$IdentifierOrKeyword;\nvar T$ParentScope = 5 | T$IdentifierOrKeyword;\n\nvar T$LParen = 6 | T$OpeningToken | T$AccessScopeTerminal | T$MemberOrCallExpression;\nvar T$LBrace = 7 | T$OpeningToken;\nvar T$Period = 8 | T$MemberExpression | T$MemberOrCallExpression;\nvar T$RBrace = 9 | T$AccessScopeTerminal | T$ClosingToken | T$ExpressionTerminal;\nvar T$RParen = 10 | T$AccessScopeTerminal | T$ClosingToken | T$ExpressionTerminal;\nvar T$Comma = 11 | T$AccessScopeTerminal;\nvar T$LBracket = 12 | T$OpeningToken | T$AccessScopeTerminal | T$MemberExpression | T$MemberOrCallExpression;\nvar T$RBracket = 13 | T$ClosingToken | T$ExpressionTerminal;\nvar T$Colon = 14 | T$AccessScopeTerminal;\nvar T$Question = 15;\n\nvar T$Ampersand = 18 | T$AccessScopeTerminal;\nvar T$Bar = 19 | T$AccessScopeTerminal;\nvar T$BarBar = 20 | 1 << T$PrecShift | T$BinaryOp;\nvar T$AmpersandAmpersand = 21 | 2 << T$PrecShift | T$BinaryOp;\nvar T$Caret = 22 | 3 << T$PrecShift | T$BinaryOp;\nvar T$EqEq = 23 | 4 << T$PrecShift | T$BinaryOp;\nvar T$BangEq = 24 | 4 << T$PrecShift | T$BinaryOp;\nvar T$EqEqEq = 25 | 4 << T$PrecShift | T$BinaryOp;\nvar T$BangEqEq = 26 | 4 << T$PrecShift | T$BinaryOp;\nvar T$Lt = 27 | 5 << T$PrecShift | T$BinaryOp;\nvar T$Gt = 28 | 5 << T$PrecShift | T$BinaryOp;\nvar T$LtEq = 29 | 5 << T$PrecShift | T$BinaryOp;\nvar T$GtEq = 30 | 5 << T$PrecShift | T$BinaryOp;\nvar T$InKeyword = 31 | 5 << T$PrecShift | T$BinaryOp | T$Keyword;\nvar T$InstanceOfKeyword = 32 | 5 << T$PrecShift | T$BinaryOp | T$Keyword;\nvar T$Plus = 33 | 6 << T$PrecShift | T$BinaryOp | T$UnaryOp;\nvar T$Minus = 34 | 6 << T$PrecShift | T$BinaryOp | T$UnaryOp;\nvar T$TypeofKeyword = 35 | T$UnaryOp | T$Keyword;\nvar T$VoidKeyword = 36 | T$UnaryOp | T$Keyword;\nvar T$Star = 37 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Percent = 38 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Slash = 39 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Eq = 40;\nvar T$Bang = 41 | T$UnaryOp;\n\nvar KeywordLookup = Object.create(null);\nKeywordLookup.true = T$TrueKeyword;\nKeywordLookup.null = T$NullKeyword;\nKeywordLookup.false = T$FalseKeyword;\nKeywordLookup.undefined = T$UndefinedKeyword;\nKeywordLookup.$this = T$ThisScope;\nKeywordLookup.$parent = T$ParentScope;\nKeywordLookup.in = T$InKeyword;\nKeywordLookup.instanceof = T$InstanceOfKeyword;\nKeywordLookup.typeof = T$TypeofKeyword;\nKeywordLookup.void = T$VoidKeyword;\n\nvar TokenValues = [false, true, null, undefined, '$this', '$parent', '(', '{', '.', '}', ')', ',', '[', ']', ':', '?', '\\'', '\"', '&', '|', '||', '&&', '^', '==', '!=', '===', '!==', '<', '>', '<=', '>=', 'in', 'instanceof', '+', '-', 'typeof', 'void', '*', '%', '/', '=', '!'];\n\nvar codes = {\n AsciiIdPart: [0x24, 0, 0x30, 0x3A, 0x41, 0x5B, 0x5F, 0, 0x61, 0x7B],\n IdStart: [0x24, 0, 0x41, 0x5B, 0x5F, 0, 0x61, 0x7B, 0xAA, 0, 0xBA, 0, 0xC0, 0xD7, 0xD8, 0xF7, 0xF8, 0x2B9, 0x2E0, 0x2E5, 0x1D00, 0x1D26, 0x1D2C, 0x1D5D, 0x1D62, 0x1D66, 0x1D6B, 0x1D78, 0x1D79, 0x1DBF, 0x1E00, 0x1F00, 0x2071, 0, 0x207F, 0, 0x2090, 0x209D, 0x212A, 0x212C, 0x2132, 0, 0x214E, 0, 0x2160, 0x2189, 0x2C60, 0x2C80, 0xA722, 0xA788, 0xA78B, 0xA7AF, 0xA7B0, 0xA7B8, 0xA7F7, 0xA800, 0xAB30, 0xAB5B, 0xAB5C, 0xAB65, 0xFB00, 0xFB07, 0xFF21, 0xFF3B, 0xFF41, 0xFF5B],\n Digit: [0x30, 0x3A],\n Skip: [0, 0x21, 0x7F, 0xA1]\n};\n\nfunction decompress(lookup, set, compressed, value) {\n var rangeCount = compressed.length;\n for (var i = 0; i < rangeCount; i += 2) {\n var start = compressed[i];\n var end = compressed[i + 1];\n end = end > 0 ? end : start + 1;\n if (lookup) {\n var j = start;\n while (j < end) {\n lookup[j] = value;\n j++;\n }\n }\n if (set) {\n for (var ch = start; ch < end; ch++) {\n set.add(ch);\n }\n }\n }\n}\n\nfunction returnToken(token) {\n return function (p) {\n p.next();\n return token;\n };\n}\nfunction unexpectedCharacter(p) {\n p.err('Unexpected character [' + fromCharCode(p.ch) + ']');\n return null;\n}\n\nvar AsciiIdParts = new Set();\ndecompress(null, AsciiIdParts, codes.AsciiIdPart, true);\n\nvar IdParts = new Uint8Array(0xFFFF);\ndecompress(IdParts, null, codes.IdStart, 1);\ndecompress(IdParts, null, codes.Digit, 1);\n\nvar CharScanners = new Array(0xFFFF);\nvar ci = 0;\nwhile (ci < 0xFFFF) {\n CharScanners[ci] = unexpectedCharacter;\n ci++;\n}\n\ndecompress(CharScanners, null, codes.Skip, function (p) {\n p.next();\n return null;\n});\ndecompress(CharScanners, null, codes.IdStart, function (p) {\n return p.scanIdentifier();\n});\ndecompress(CharScanners, null, codes.Digit, function (p) {\n return p.scanNumber(false);\n});\n\nCharScanners[0x22] = CharScanners[0x27] = function (p) {\n return p.scanString();\n};\nCharScanners[0x60] = function (p) {\n return p.scanTemplate();\n};\n\nCharScanners[0x21] = function (p) {\n if (p.next() !== 0x3D) {\n return T$Bang;\n }\n if (p.next() !== 0x3D) {\n return T$BangEq;\n }\n p.next();\n return T$BangEqEq;\n};\n\nCharScanners[0x3D] = function (p) {\n if (p.next() !== 0x3D) {\n return T$Eq;\n }\n if (p.next() !== 0x3D) {\n return T$EqEq;\n }\n p.next();\n return T$EqEqEq;\n};\n\nCharScanners[0x26] = function (p) {\n if (p.next() !== 0x26) {\n return T$Ampersand;\n }\n p.next();\n return T$AmpersandAmpersand;\n};\n\nCharScanners[0x7C] = function (p) {\n if (p.next() !== 0x7C) {\n return T$Bar;\n }\n p.next();\n return T$BarBar;\n};\n\nCharScanners[0x2E] = function (p) {\n if (p.next() <= 0x39 && p.ch >= 0x30) {\n return p.scanNumber(true);\n }\n return T$Period;\n};\n\nCharScanners[0x3C] = function (p) {\n if (p.next() !== 0x3D) {\n return T$Lt;\n }\n p.next();\n return T$LtEq;\n};\n\nCharScanners[0x3E] = function (p) {\n if (p.next() !== 0x3D) {\n return T$Gt;\n }\n p.next();\n return T$GtEq;\n};\n\nCharScanners[0x25] = returnToken(T$Percent);\nCharScanners[0x28] = returnToken(T$LParen);\nCharScanners[0x29] = returnToken(T$RParen);\nCharScanners[0x2A] = returnToken(T$Star);\nCharScanners[0x2B] = returnToken(T$Plus);\nCharScanners[0x2C] = returnToken(T$Comma);\nCharScanners[0x2D] = returnToken(T$Minus);\nCharScanners[0x2F] = returnToken(T$Slash);\nCharScanners[0x3A] = returnToken(T$Colon);\nCharScanners[0x3F] = returnToken(T$Question);\nCharScanners[0x5B] = returnToken(T$LBracket);\nCharScanners[0x5D] = returnToken(T$RBracket);\nCharScanners[0x5E] = returnToken(T$Caret);\nCharScanners[0x7B] = returnToken(T$LBrace);\nCharScanners[0x7D] = returnToken(T$RBrace);\n\nvar mapProto = Map.prototype;\n\nfunction _getMapObserver(taskQueue, map) {\n return ModifyMapObserver.for(taskQueue, map);\n}\n\nvar ModifyMapObserver = function (_ModifyCollectionObse2) {\n _inherits(ModifyMapObserver, _ModifyCollectionObse2);\n\n function ModifyMapObserver(taskQueue, map) {\n \n\n return _possibleConstructorReturn(this, _ModifyCollectionObse2.call(this, taskQueue, map));\n }\n\n ModifyMapObserver.for = function _for(taskQueue, map) {\n if (!('__map_observer__' in map)) {\n Reflect.defineProperty(map, '__map_observer__', {\n value: ModifyMapObserver.create(taskQueue, map),\n enumerable: false, configurable: false\n });\n }\n return map.__map_observer__;\n };\n\n ModifyMapObserver.create = function create(taskQueue, map) {\n var observer = new ModifyMapObserver(taskQueue, map);\n\n var proto = mapProto;\n if (proto.set !== map.set || proto.delete !== map.delete || proto.clear !== map.clear) {\n proto = {\n set: map.set,\n delete: map.delete,\n clear: map.clear\n };\n }\n\n map.set = function () {\n var hasValue = map.has(arguments[0]);\n var type = hasValue ? 'update' : 'add';\n var oldValue = map.get(arguments[0]);\n var methodCallResult = proto.set.apply(map, arguments);\n if (!hasValue || oldValue !== map.get(arguments[0])) {\n observer.addChangeRecord({\n type: type,\n object: map,\n key: arguments[0],\n oldValue: oldValue\n });\n }\n return methodCallResult;\n };\n\n map.delete = function () {\n var hasValue = map.has(arguments[0]);\n var oldValue = map.get(arguments[0]);\n var methodCallResult = proto.delete.apply(map, arguments);\n if (hasValue) {\n observer.addChangeRecord({\n type: 'delete',\n object: map,\n key: arguments[0],\n oldValue: oldValue\n });\n }\n return methodCallResult;\n };\n\n map.clear = function () {\n var methodCallResult = proto.clear.apply(map, arguments);\n observer.addChangeRecord({\n type: 'clear',\n object: map\n });\n return methodCallResult;\n };\n\n return observer;\n };\n\n return ModifyMapObserver;\n}(ModifyCollectionObserver);\n\nvar emLogger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('event-manager');\n\nfunction findOriginalEventTarget(event) {\n return event.composedPath && event.composedPath()[0] || event.deepPath && event.deepPath()[0] || event.path && event.path[0] || event.target;\n}\n\nfunction stopPropagation() {\n this.standardStopPropagation();\n this.propagationStopped = true;\n}\n\nfunction handleCapturedEvent(event) {\n event.propagationStopped = false;\n var target = findOriginalEventTarget(event);\n\n var orderedCallbacks = [];\n\n while (target) {\n if (target.capturedCallbacks) {\n var callback = target.capturedCallbacks[event.type];\n if (callback) {\n if (event.stopPropagation !== stopPropagation) {\n event.standardStopPropagation = event.stopPropagation;\n event.stopPropagation = stopPropagation;\n }\n orderedCallbacks.push(callback);\n }\n }\n target = target.parentNode;\n }\n for (var i = orderedCallbacks.length - 1; i >= 0 && !event.propagationStopped; i--) {\n var orderedCallback = orderedCallbacks[i];\n if ('handleEvent' in orderedCallback) {\n orderedCallback.handleEvent(event);\n } else {\n orderedCallback(event);\n }\n }\n}\n\nvar CapturedHandlerEntry = function () {\n function CapturedHandlerEntry(eventName) {\n \n\n this.eventName = eventName;\n this.count = 0;\n }\n\n CapturedHandlerEntry.prototype.increment = function increment() {\n this.count++;\n\n if (this.count === 1) {\n aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].addEventListener(this.eventName, handleCapturedEvent, true);\n }\n };\n\n CapturedHandlerEntry.prototype.decrement = function decrement() {\n if (this.count === 0) {\n emLogger.warn('The same EventListener was disposed multiple times.');\n } else if (--this.count === 0) {\n aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].removeEventListener(this.eventName, handleCapturedEvent, true);\n }\n };\n\n return CapturedHandlerEntry;\n}();\n\nvar DelegateHandlerEntry = function () {\n function DelegateHandlerEntry(eventName, eventManager) {\n \n\n this.eventName = eventName;\n this.count = 0;\n this.eventManager = eventManager;\n }\n\n DelegateHandlerEntry.prototype.handleEvent = function handleEvent(event) {\n event.propagationStopped = false;\n var target = findOriginalEventTarget(event);\n\n while (target && !event.propagationStopped) {\n if (target.delegatedCallbacks) {\n var callback = target.delegatedCallbacks[event.type];\n if (callback) {\n if (event.stopPropagation !== stopPropagation) {\n event.standardStopPropagation = event.stopPropagation;\n event.stopPropagation = stopPropagation;\n }\n if ('handleEvent' in callback) {\n callback.handleEvent(event);\n } else {\n callback(event);\n }\n }\n }\n\n var parent = target.parentNode;\n var shouldEscapeShadowRoot = this.eventManager.escapeShadowRoot && parent instanceof ShadowRoot;\n\n target = shouldEscapeShadowRoot ? parent.host : parent;\n }\n };\n\n DelegateHandlerEntry.prototype.increment = function increment() {\n this.count++;\n\n if (this.count === 1) {\n aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].addEventListener(this.eventName, this, false);\n }\n };\n\n DelegateHandlerEntry.prototype.decrement = function decrement() {\n if (this.count === 0) {\n emLogger.warn('The same EventListener was disposed multiple times.');\n } else if (--this.count === 0) {\n aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].removeEventListener(this.eventName, this, false);\n }\n };\n\n return DelegateHandlerEntry;\n}();\n\nvar DelegationEntryHandler = function () {\n function DelegationEntryHandler(entry, lookup, targetEvent) {\n \n\n this.entry = entry;\n this.lookup = lookup;\n this.targetEvent = targetEvent;\n }\n\n DelegationEntryHandler.prototype.dispose = function dispose() {\n if (this.lookup[this.targetEvent]) {\n this.entry.decrement();\n this.lookup[this.targetEvent] = null;\n } else {\n emLogger.warn('Calling .dispose() on already disposed eventListener');\n }\n };\n\n return DelegationEntryHandler;\n}();\n\nvar EventHandler = function () {\n function EventHandler(target, targetEvent, callback) {\n \n\n this.target = target;\n this.targetEvent = targetEvent;\n this.callback = callback;\n }\n\n EventHandler.prototype.dispose = function dispose() {\n this.target.removeEventListener(this.targetEvent, this.callback);\n };\n\n return EventHandler;\n}();\n\nvar DefaultEventStrategy = function () {\n function DefaultEventStrategy(eventManager) {\n \n\n this.delegatedHandlers = {};\n this.capturedHandlers = {};\n\n this.eventManager = eventManager;\n }\n\n DefaultEventStrategy.prototype.subscribe = function subscribe(target, targetEvent, callback, strategy, disposable) {\n var delegatedHandlers = void 0;\n var capturedHandlers = void 0;\n var handlerEntry = void 0;\n\n if (strategy === delegationStrategy.bubbling) {\n delegatedHandlers = this.delegatedHandlers;\n handlerEntry = delegatedHandlers[targetEvent] || (delegatedHandlers[targetEvent] = new DelegateHandlerEntry(targetEvent, this.eventManager));\n var delegatedCallbacks = target.delegatedCallbacks || (target.delegatedCallbacks = {});\n if (!delegatedCallbacks[targetEvent]) {\n handlerEntry.increment();\n } else {\n emLogger.warn('Overriding previous callback for event listener', { event: targetEvent, callback: callback, previousCallback: delegatedCallbacks[targetEvent] });\n }\n delegatedCallbacks[targetEvent] = callback;\n\n if (disposable === true) {\n return new DelegationEntryHandler(handlerEntry, delegatedCallbacks, targetEvent);\n }\n\n return function () {\n handlerEntry.decrement();\n delegatedCallbacks[targetEvent] = null;\n };\n }\n if (strategy === delegationStrategy.capturing) {\n capturedHandlers = this.capturedHandlers;\n handlerEntry = capturedHandlers[targetEvent] || (capturedHandlers[targetEvent] = new CapturedHandlerEntry(targetEvent));\n var capturedCallbacks = target.capturedCallbacks || (target.capturedCallbacks = {});\n if (!capturedCallbacks[targetEvent]) {\n handlerEntry.increment();\n } else {\n emLogger.error('already have a callback for event', { event: targetEvent, callback: callback });\n }\n capturedCallbacks[targetEvent] = callback;\n\n if (disposable === true) {\n return new DelegationEntryHandler(handlerEntry, capturedCallbacks, targetEvent);\n }\n\n return function () {\n handlerEntry.decrement();\n capturedCallbacks[targetEvent] = null;\n };\n }\n\n target.addEventListener(targetEvent, callback);\n\n if (disposable === true) {\n return new EventHandler(target, targetEvent, callback);\n }\n\n return function () {\n target.removeEventListener(targetEvent, callback);\n };\n };\n\n return DefaultEventStrategy;\n}();\n\nvar delegationStrategy = {\n none: 0,\n capturing: 1,\n bubbling: 2\n};\n\nvar EventManager = function () {\n function EventManager() {\n var escapeShadowRoot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n \n\n this.elementHandlerLookup = {};\n this.eventStrategyLookup = {};\n this.escapeShadowRoot = escapeShadowRoot;\n\n this.registerElementConfig({\n tagName: 'input',\n properties: {\n value: ['change', 'input'],\n checked: ['change', 'input'],\n files: ['change', 'input']\n }\n });\n\n this.registerElementConfig({\n tagName: 'textarea',\n properties: {\n value: ['change', 'input']\n }\n });\n\n this.registerElementConfig({\n tagName: 'select',\n properties: {\n value: ['change']\n }\n });\n\n this.registerElementConfig({\n tagName: 'content editable',\n properties: {\n value: ['change', 'input', 'blur', 'keyup', 'paste']\n }\n });\n\n this.registerElementConfig({\n tagName: 'scrollable element',\n properties: {\n scrollTop: ['scroll'],\n scrollLeft: ['scroll']\n }\n });\n\n this.defaultEventStrategy = new DefaultEventStrategy(this);\n }\n\n EventManager.prototype.registerElementConfig = function registerElementConfig(config) {\n var tagName = config.tagName.toLowerCase();\n var properties = config.properties;\n var propertyName = void 0;\n\n var lookup = this.elementHandlerLookup[tagName] = {};\n\n for (propertyName in properties) {\n if (properties.hasOwnProperty(propertyName)) {\n lookup[propertyName] = properties[propertyName];\n }\n }\n };\n\n EventManager.prototype.registerEventStrategy = function registerEventStrategy(eventName, strategy) {\n this.eventStrategyLookup[eventName] = strategy;\n };\n\n EventManager.prototype.getElementHandler = function getElementHandler(target, propertyName) {\n var tagName = void 0;\n var lookup = this.elementHandlerLookup;\n\n if (target.tagName) {\n tagName = target.tagName.toLowerCase();\n\n if (lookup[tagName] && lookup[tagName][propertyName]) {\n return new EventSubscriber(lookup[tagName][propertyName]);\n }\n\n if (propertyName === 'textContent' || propertyName === 'innerHTML') {\n return new EventSubscriber(lookup['content editable'].value);\n }\n\n if (propertyName === 'scrollTop' || propertyName === 'scrollLeft') {\n return new EventSubscriber(lookup['scrollable element'][propertyName]);\n }\n }\n\n return null;\n };\n\n EventManager.prototype.addEventListener = function addEventListener(target, targetEvent, callbackOrListener, delegate, disposable) {\n return (this.eventStrategyLookup[targetEvent] || this.defaultEventStrategy).subscribe(target, targetEvent, callbackOrListener, delegate, disposable);\n };\n\n return EventManager;\n}();\n\nvar EventSubscriber = function () {\n function EventSubscriber(events) {\n \n\n this.events = events;\n this.element = null;\n this.handler = null;\n }\n\n EventSubscriber.prototype.subscribe = function subscribe(element, callbackOrListener) {\n this.element = element;\n this.handler = callbackOrListener;\n\n var events = this.events;\n for (var i = 0, ii = events.length; ii > i; ++i) {\n element.addEventListener(events[i], callbackOrListener);\n }\n };\n\n EventSubscriber.prototype.dispose = function dispose() {\n if (this.element === null) {\n return;\n }\n var element = this.element;\n var callbackOrListener = this.handler;\n var events = this.events;\n for (var i = 0, ii = events.length; ii > i; ++i) {\n element.removeEventListener(events[i], callbackOrListener);\n }\n this.element = this.handler = null;\n };\n\n return EventSubscriber;\n}();\n\nvar DirtyChecker = function () {\n function DirtyChecker() {\n \n\n this.tracked = [];\n this.checkDelay = 120;\n }\n\n DirtyChecker.prototype.addProperty = function addProperty(property) {\n var tracked = this.tracked;\n\n tracked.push(property);\n\n if (tracked.length === 1) {\n this.scheduleDirtyCheck();\n }\n };\n\n DirtyChecker.prototype.removeProperty = function removeProperty(property) {\n var tracked = this.tracked;\n tracked.splice(tracked.indexOf(property), 1);\n };\n\n DirtyChecker.prototype.scheduleDirtyCheck = function scheduleDirtyCheck() {\n var _this22 = this;\n\n setTimeout(function () {\n return _this22.check();\n }, this.checkDelay);\n };\n\n DirtyChecker.prototype.check = function check() {\n var tracked = this.tracked;\n var i = tracked.length;\n\n while (i--) {\n var current = tracked[i];\n\n if (current.isDirty()) {\n current.call();\n }\n }\n\n if (tracked.length) {\n this.scheduleDirtyCheck();\n }\n };\n\n return DirtyChecker;\n}();\n\nvar DirtyCheckProperty = (_dec5 = subscriberCollection(), _dec5(_class5 = function () {\n function DirtyCheckProperty(dirtyChecker, obj, propertyName) {\n \n\n this.dirtyChecker = dirtyChecker;\n this.obj = obj;\n this.propertyName = propertyName;\n }\n\n DirtyCheckProperty.prototype.getValue = function getValue() {\n return this.obj[this.propertyName];\n };\n\n DirtyCheckProperty.prototype.setValue = function setValue(newValue) {\n this.obj[this.propertyName] = newValue;\n };\n\n DirtyCheckProperty.prototype.call = function call() {\n var oldValue = this.oldValue;\n var newValue = this.getValue();\n\n this.callSubscribers(newValue, oldValue);\n\n this.oldValue = newValue;\n };\n\n DirtyCheckProperty.prototype.isDirty = function isDirty() {\n return this.oldValue !== this.obj[this.propertyName];\n };\n\n DirtyCheckProperty.prototype.subscribe = function subscribe(context, callable) {\n if (!this.hasSubscribers()) {\n this.oldValue = this.getValue();\n this.dirtyChecker.addProperty(this);\n }\n this.addSubscriber(context, callable);\n };\n\n DirtyCheckProperty.prototype.unsubscribe = function unsubscribe(context, callable) {\n if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n this.dirtyChecker.removeProperty(this);\n }\n };\n\n return DirtyCheckProperty;\n}()) || _class5);\n\nvar logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('property-observation');\n\nvar propertyAccessor = {\n getValue: function getValue(obj, propertyName) {\n return obj[propertyName];\n },\n setValue: function setValue(value, obj, propertyName) {\n obj[propertyName] = value;\n }\n};\n\nvar PrimitiveObserver = function () {\n function PrimitiveObserver(primitive, propertyName) {\n \n\n this.doNotCache = true;\n\n this.primitive = primitive;\n this.propertyName = propertyName;\n }\n\n PrimitiveObserver.prototype.getValue = function getValue() {\n return this.primitive[this.propertyName];\n };\n\n PrimitiveObserver.prototype.setValue = function setValue() {\n var type = _typeof(this.primitive);\n throw new Error('The ' + this.propertyName + ' property of a ' + type + ' (' + this.primitive + ') cannot be assigned.');\n };\n\n PrimitiveObserver.prototype.subscribe = function subscribe() {};\n\n PrimitiveObserver.prototype.unsubscribe = function unsubscribe() {};\n\n return PrimitiveObserver;\n}();\n\nvar SetterObserver = (_dec6 = subscriberCollection(), _dec6(_class7 = function () {\n function SetterObserver(taskQueue, obj, propertyName) {\n \n\n this.taskQueue = taskQueue;\n this.obj = obj;\n this.propertyName = propertyName;\n this.queued = false;\n this.observing = false;\n }\n\n SetterObserver.prototype.getValue = function getValue() {\n return this.obj[this.propertyName];\n };\n\n SetterObserver.prototype.setValue = function setValue(newValue) {\n this.obj[this.propertyName] = newValue;\n };\n\n SetterObserver.prototype.getterValue = function getterValue() {\n return this.currentValue;\n };\n\n SetterObserver.prototype.setterValue = function setterValue(newValue) {\n var oldValue = this.currentValue;\n\n if (oldValue !== newValue) {\n if (!this.queued) {\n this.oldValue = oldValue;\n this.queued = true;\n this.taskQueue.queueMicroTask(this);\n }\n\n this.currentValue = newValue;\n }\n };\n\n SetterObserver.prototype.call = function call() {\n var oldValue = this.oldValue;\n var newValue = this.oldValue = this.currentValue;\n\n this.queued = false;\n\n this.callSubscribers(newValue, oldValue);\n };\n\n SetterObserver.prototype.subscribe = function subscribe(context, callable) {\n if (!this.observing) {\n this.convertProperty();\n }\n this.addSubscriber(context, callable);\n };\n\n SetterObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n this.removeSubscriber(context, callable);\n };\n\n SetterObserver.prototype.convertProperty = function convertProperty() {\n this.observing = true;\n this.currentValue = this.obj[this.propertyName];\n this.setValue = this.setterValue;\n this.getValue = this.getterValue;\n\n if (!Reflect.defineProperty(this.obj, this.propertyName, {\n configurable: true,\n enumerable: this.propertyName in this.obj ? this.obj.propertyIsEnumerable(this.propertyName) : true,\n get: this.getValue.bind(this),\n set: this.setValue.bind(this)\n })) {\n logger.warn('Cannot observe property \\'' + this.propertyName + '\\' of object', this.obj);\n }\n };\n\n return SetterObserver;\n}()) || _class7);\n\nvar XLinkAttributeObserver = function () {\n function XLinkAttributeObserver(element, propertyName, attributeName) {\n \n\n this.element = element;\n this.propertyName = propertyName;\n this.attributeName = attributeName;\n }\n\n XLinkAttributeObserver.prototype.getValue = function getValue() {\n return this.element.getAttributeNS('http://www.w3.org/1999/xlink', this.attributeName);\n };\n\n XLinkAttributeObserver.prototype.setValue = function setValue(newValue) {\n return this.element.setAttributeNS('http://www.w3.org/1999/xlink', this.attributeName, newValue);\n };\n\n XLinkAttributeObserver.prototype.subscribe = function subscribe() {\n throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n };\n\n return XLinkAttributeObserver;\n}();\n\nvar dataAttributeAccessor = {\n getValue: function getValue(obj, propertyName) {\n return obj.getAttribute(propertyName);\n },\n setValue: function setValue(value, obj, propertyName) {\n if (value === null || value === undefined) {\n obj.removeAttribute(propertyName);\n } else {\n obj.setAttribute(propertyName, value);\n }\n }\n};\n\nvar DataAttributeObserver = function () {\n function DataAttributeObserver(element, propertyName) {\n \n\n this.element = element;\n this.propertyName = propertyName;\n }\n\n DataAttributeObserver.prototype.getValue = function getValue() {\n return this.element.getAttribute(this.propertyName);\n };\n\n DataAttributeObserver.prototype.setValue = function setValue(newValue) {\n if (newValue === null || newValue === undefined) {\n return this.element.removeAttribute(this.propertyName);\n }\n return this.element.setAttribute(this.propertyName, newValue);\n };\n\n DataAttributeObserver.prototype.subscribe = function subscribe() {\n throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n };\n\n return DataAttributeObserver;\n}();\n\nvar StyleObserver = function () {\n function StyleObserver(element, propertyName) {\n \n\n this.element = element;\n this.propertyName = propertyName;\n\n this.styles = null;\n this.version = 0;\n }\n\n StyleObserver.prototype.getValue = function getValue() {\n return this.element.style.cssText;\n };\n\n StyleObserver.prototype._setProperty = function _setProperty(style, value) {\n var priority = '';\n\n if (value !== null && value !== undefined && typeof value.indexOf === 'function' && value.indexOf('!important') !== -1) {\n priority = 'important';\n value = value.replace('!important', '');\n }\n this.element.style.setProperty(style, value, priority);\n };\n\n StyleObserver.prototype.setValue = function setValue(newValue) {\n var styles = this.styles || {};\n var style = void 0;\n var version = this.version;\n\n if (newValue !== null && newValue !== undefined) {\n if (newValue instanceof Object) {\n var value = void 0;\n for (style in newValue) {\n if (newValue.hasOwnProperty(style)) {\n value = newValue[style];\n style = style.replace(/([A-Z])/g, function (m) {\n return '-' + m.toLowerCase();\n });\n styles[style] = version;\n this._setProperty(style, value);\n }\n }\n } else if (newValue.length) {\n var rx = /\\s*([\\w\\-]+)\\s*:\\s*((?:(?:[\\w\\-]+\\(\\s*(?:\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[\\w\\-]+\\(\\s*(?:^\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^\\)]*)\\),?|[^\\)]*)\\),?|\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^;]*),?\\s*)+);?/g;\n var pair = void 0;\n while ((pair = rx.exec(newValue)) !== null) {\n style = pair[1];\n if (!style) {\n continue;\n }\n\n styles[style] = version;\n this._setProperty(style, pair[2]);\n }\n }\n }\n\n this.styles = styles;\n this.version += 1;\n\n if (version === 0) {\n return;\n }\n\n version -= 1;\n for (style in styles) {\n if (!styles.hasOwnProperty(style) || styles[style] !== version) {\n continue;\n }\n\n this.element.style.removeProperty(style);\n }\n };\n\n StyleObserver.prototype.subscribe = function subscribe() {\n throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n };\n\n return StyleObserver;\n}();\n\nvar ValueAttributeObserver = (_dec7 = subscriberCollection(), _dec7(_class8 = function () {\n function ValueAttributeObserver(element, propertyName, handler) {\n \n\n this.element = element;\n this.propertyName = propertyName;\n this.handler = handler;\n if (propertyName === 'files') {\n this.setValue = function () {};\n }\n }\n\n ValueAttributeObserver.prototype.getValue = function getValue() {\n return this.element[this.propertyName];\n };\n\n ValueAttributeObserver.prototype.setValue = function setValue(newValue) {\n newValue = newValue === undefined || newValue === null ? '' : newValue;\n if (this.element[this.propertyName] !== newValue) {\n this.element[this.propertyName] = newValue;\n this.notify();\n }\n };\n\n ValueAttributeObserver.prototype.notify = function notify() {\n var oldValue = this.oldValue;\n var newValue = this.getValue();\n\n this.callSubscribers(newValue, oldValue);\n\n this.oldValue = newValue;\n };\n\n ValueAttributeObserver.prototype.handleEvent = function handleEvent() {\n this.notify();\n };\n\n ValueAttributeObserver.prototype.subscribe = function subscribe(context, callable) {\n if (!this.hasSubscribers()) {\n this.oldValue = this.getValue();\n this.handler.subscribe(this.element, this);\n }\n\n this.addSubscriber(context, callable);\n };\n\n ValueAttributeObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n this.handler.dispose();\n }\n };\n\n return ValueAttributeObserver;\n}()) || _class8);\n\nvar checkedArrayContext = 'CheckedObserver:array';\nvar checkedValueContext = 'CheckedObserver:value';\n\nvar CheckedObserver = (_dec8 = subscriberCollection(), _dec8(_class9 = function () {\n function CheckedObserver(element, handler, observerLocator) {\n \n\n this.element = element;\n this.handler = handler;\n this.observerLocator = observerLocator;\n }\n\n CheckedObserver.prototype.getValue = function getValue() {\n return this.value;\n };\n\n CheckedObserver.prototype.setValue = function setValue(newValue) {\n if (this.initialSync && this.value === newValue) {\n return;\n }\n\n if (this.arrayObserver) {\n this.arrayObserver.unsubscribe(checkedArrayContext, this);\n this.arrayObserver = null;\n }\n\n if (this.element.type === 'checkbox' && Array.isArray(newValue)) {\n this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n this.arrayObserver.subscribe(checkedArrayContext, this);\n }\n\n this.oldValue = this.value;\n this.value = newValue;\n this.synchronizeElement();\n this.notify();\n\n if (!this.initialSync) {\n this.initialSync = true;\n this.observerLocator.taskQueue.queueMicroTask(this);\n }\n };\n\n CheckedObserver.prototype.call = function call(context, splices) {\n this.synchronizeElement();\n\n if (!this.valueObserver) {\n this.valueObserver = this.element.__observers__.model || this.element.__observers__.value;\n if (this.valueObserver) {\n this.valueObserver.subscribe(checkedValueContext, this);\n }\n }\n };\n\n CheckedObserver.prototype.synchronizeElement = function synchronizeElement() {\n var value = this.value;\n var element = this.element;\n var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n var isRadio = element.type === 'radio';\n var matcher = element.matcher || function (a, b) {\n return a === b;\n };\n\n element.checked = isRadio && !!matcher(value, elementValue) || !isRadio && value === true || !isRadio && Array.isArray(value) && value.findIndex(function (item) {\n return !!matcher(item, elementValue);\n }) !== -1;\n };\n\n CheckedObserver.prototype.synchronizeValue = function synchronizeValue() {\n var value = this.value;\n var element = this.element;\n var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n var index = void 0;\n var matcher = element.matcher || function (a, b) {\n return a === b;\n };\n\n if (element.type === 'checkbox') {\n if (Array.isArray(value)) {\n index = value.findIndex(function (item) {\n return !!matcher(item, elementValue);\n });\n if (element.checked && index === -1) {\n value.push(elementValue);\n } else if (!element.checked && index !== -1) {\n value.splice(index, 1);\n }\n\n return;\n }\n\n value = element.checked;\n } else if (element.checked) {\n value = elementValue;\n } else {\n return;\n }\n\n this.oldValue = this.value;\n this.value = value;\n this.notify();\n };\n\n CheckedObserver.prototype.notify = function notify() {\n var oldValue = this.oldValue;\n var newValue = this.value;\n\n if (newValue === oldValue) {\n return;\n }\n\n this.callSubscribers(newValue, oldValue);\n };\n\n CheckedObserver.prototype.handleEvent = function handleEvent() {\n this.synchronizeValue();\n };\n\n CheckedObserver.prototype.subscribe = function subscribe(context, callable) {\n if (!this.hasSubscribers()) {\n this.handler.subscribe(this.element, this);\n }\n this.addSubscriber(context, callable);\n };\n\n CheckedObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n this.handler.dispose();\n }\n };\n\n CheckedObserver.prototype.unbind = function unbind() {\n if (this.arrayObserver) {\n this.arrayObserver.unsubscribe(checkedArrayContext, this);\n this.arrayObserver = null;\n }\n if (this.valueObserver) {\n this.valueObserver.unsubscribe(checkedValueContext, this);\n }\n };\n\n return CheckedObserver;\n}()) || _class9);\n\nvar selectArrayContext = 'SelectValueObserver:array';\n\nvar SelectValueObserver = (_dec9 = subscriberCollection(), _dec9(_class10 = function () {\n function SelectValueObserver(element, handler, observerLocator) {\n \n\n this.element = element;\n this.handler = handler;\n this.observerLocator = observerLocator;\n }\n\n SelectValueObserver.prototype.getValue = function getValue() {\n return this.value;\n };\n\n SelectValueObserver.prototype.setValue = function setValue(newValue) {\n if (newValue !== null && newValue !== undefined && this.element.multiple && !Array.isArray(newValue)) {\n throw new Error('Only null or Array instances can be bound to a multi-select.');\n }\n if (this.value === newValue) {\n return;\n }\n\n if (this.arrayObserver) {\n this.arrayObserver.unsubscribe(selectArrayContext, this);\n this.arrayObserver = null;\n }\n\n if (Array.isArray(newValue)) {\n this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n this.arrayObserver.subscribe(selectArrayContext, this);\n }\n\n this.oldValue = this.value;\n this.value = newValue;\n this.synchronizeOptions();\n this.notify();\n\n if (!this.initialSync) {\n this.initialSync = true;\n this.observerLocator.taskQueue.queueMicroTask(this);\n }\n };\n\n SelectValueObserver.prototype.call = function call(context, splices) {\n this.synchronizeOptions();\n };\n\n SelectValueObserver.prototype.synchronizeOptions = function synchronizeOptions() {\n var value = this.value;\n var isArray = void 0;\n\n if (Array.isArray(value)) {\n isArray = true;\n }\n\n var options = this.element.options;\n var i = options.length;\n var matcher = this.element.matcher || function (a, b) {\n return a === b;\n };\n\n var _loop = function _loop() {\n var option = options.item(i);\n var optionValue = option.hasOwnProperty('model') ? option.model : option.value;\n if (isArray) {\n option.selected = value.findIndex(function (item) {\n return !!matcher(optionValue, item);\n }) !== -1;\n return 'continue';\n }\n option.selected = !!matcher(optionValue, value);\n };\n\n while (i--) {\n var _ret = _loop();\n\n if (_ret === 'continue') continue;\n }\n };\n\n SelectValueObserver.prototype.synchronizeValue = function synchronizeValue() {\n var _this23 = this;\n\n var options = this.element.options;\n var count = 0;\n var value = [];\n\n for (var i = 0, ii = options.length; i < ii; i++) {\n var _option = options.item(i);\n if (!_option.selected) {\n continue;\n }\n value.push(_option.hasOwnProperty('model') ? _option.model : _option.value);\n count++;\n }\n\n if (this.element.multiple) {\n if (Array.isArray(this.value)) {\n var _ret2 = function () {\n var matcher = _this23.element.matcher || function (a, b) {\n return a === b;\n };\n\n var i = 0;\n\n var _loop2 = function _loop2() {\n var a = _this23.value[i];\n if (value.findIndex(function (b) {\n return matcher(a, b);\n }) === -1) {\n _this23.value.splice(i, 1);\n } else {\n i++;\n }\n };\n\n while (i < _this23.value.length) {\n _loop2();\n }\n\n i = 0;\n\n var _loop3 = function _loop3() {\n var a = value[i];\n if (_this23.value.findIndex(function (b) {\n return matcher(a, b);\n }) === -1) {\n _this23.value.push(a);\n }\n i++;\n };\n\n while (i < value.length) {\n _loop3();\n }\n return {\n v: void 0\n };\n }();\n\n if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === \"object\") return _ret2.v;\n }\n } else {\n if (count === 0) {\n value = null;\n } else {\n value = value[0];\n }\n }\n\n if (value !== this.value) {\n this.oldValue = this.value;\n this.value = value;\n this.notify();\n }\n };\n\n SelectValueObserver.prototype.notify = function notify() {\n var oldValue = this.oldValue;\n var newValue = this.value;\n\n this.callSubscribers(newValue, oldValue);\n };\n\n SelectValueObserver.prototype.handleEvent = function handleEvent() {\n this.synchronizeValue();\n };\n\n SelectValueObserver.prototype.subscribe = function subscribe(context, callable) {\n if (!this.hasSubscribers()) {\n this.handler.subscribe(this.element, this);\n }\n this.addSubscriber(context, callable);\n };\n\n SelectValueObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n this.handler.dispose();\n }\n };\n\n SelectValueObserver.prototype.bind = function bind() {\n var _this24 = this;\n\n this.domObserver = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createMutationObserver(function () {\n _this24.synchronizeOptions();\n _this24.synchronizeValue();\n });\n this.domObserver.observe(this.element, { childList: true, subtree: true, characterData: true });\n };\n\n SelectValueObserver.prototype.unbind = function unbind() {\n this.domObserver.disconnect();\n this.domObserver = null;\n\n if (this.arrayObserver) {\n this.arrayObserver.unsubscribe(selectArrayContext, this);\n this.arrayObserver = null;\n }\n };\n\n return SelectValueObserver;\n}()) || _class10);\n\nvar ClassObserver = function () {\n function ClassObserver(element) {\n \n\n this.element = element;\n this.doNotCache = true;\n this.value = '';\n this.version = 0;\n }\n\n ClassObserver.prototype.getValue = function getValue() {\n return this.value;\n };\n\n ClassObserver.prototype.setValue = function setValue(newValue) {\n var nameIndex = this.nameIndex || {};\n var version = this.version;\n var names = void 0;\n var name = void 0;\n\n if (newValue !== null && newValue !== undefined && newValue.length) {\n names = newValue.split(/\\s+/);\n for (var i = 0, length = names.length; i < length; i++) {\n name = names[i];\n if (name === '') {\n continue;\n }\n nameIndex[name] = version;\n this.element.classList.add(name);\n }\n }\n\n this.value = newValue;\n this.nameIndex = nameIndex;\n this.version += 1;\n\n if (version === 0) {\n return;\n }\n\n version -= 1;\n for (name in nameIndex) {\n if (!nameIndex.hasOwnProperty(name) || nameIndex[name] !== version) {\n continue;\n }\n this.element.classList.remove(name);\n }\n };\n\n ClassObserver.prototype.subscribe = function subscribe() {\n throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"class\" property is not supported.');\n };\n\n return ClassObserver;\n}();\n\nfunction hasDeclaredDependencies(descriptor) {\n return !!(descriptor && descriptor.get && descriptor.get.dependencies);\n}\n\nfunction declarePropertyDependencies(ctor, propertyName, dependencies) {\n var descriptor = Object.getOwnPropertyDescriptor(ctor.prototype, propertyName);\n descriptor.get.dependencies = dependencies;\n}\n\nfunction computedFrom() {\n for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n rest[_key] = arguments[_key];\n }\n\n return function (target, key, descriptor) {\n descriptor.get.dependencies = rest;\n return descriptor;\n };\n}\n\nvar ComputedExpression = function (_Expression19) {\n _inherits(ComputedExpression, _Expression19);\n\n function ComputedExpression(name, dependencies) {\n \n\n var _this25 = _possibleConstructorReturn(this, _Expression19.call(this));\n\n _this25.name = name;\n _this25.dependencies = dependencies;\n _this25.isAssignable = true;\n return _this25;\n }\n\n ComputedExpression.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n return scope.bindingContext[this.name];\n };\n\n ComputedExpression.prototype.assign = function assign(scope, value) {\n scope.bindingContext[this.name] = value;\n };\n\n ComputedExpression.prototype.accept = function accept(visitor) {\n throw new Error('not implemented');\n };\n\n ComputedExpression.prototype.connect = function connect(binding, scope) {\n var dependencies = this.dependencies;\n var i = dependencies.length;\n while (i--) {\n dependencies[i].connect(binding, scope);\n }\n };\n\n return ComputedExpression;\n}(Expression);\n\nfunction createComputedObserver(obj, propertyName, descriptor, observerLocator) {\n var dependencies = descriptor.get.dependencies;\n if (!(dependencies instanceof ComputedExpression)) {\n var i = dependencies.length;\n while (i--) {\n dependencies[i] = observerLocator.parser.parse(dependencies[i]);\n }\n dependencies = descriptor.get.dependencies = new ComputedExpression(propertyName, dependencies);\n }\n\n var scope = { bindingContext: obj, overrideContext: createOverrideContext(obj) };\n return new ExpressionObserver(scope, dependencies, observerLocator);\n}\n\nvar svgElements = void 0;\nvar svgPresentationElements = void 0;\nvar svgPresentationAttributes = void 0;\nvar svgAnalyzer = void 0;\n\nif (typeof FEATURE_NO_SVG === 'undefined') {\n svgElements = {\n a: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'target', 'transform', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n altGlyph: ['class', 'dx', 'dy', 'externalResourcesRequired', 'format', 'glyphRef', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n altGlyphDef: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n altGlyphItem: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n animate: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n animateColor: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n animateMotion: ['accumulate', 'additive', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keyPoints', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'origin', 'path', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'rotate', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n animateTransform: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'type', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n circle: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'r', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n clipPath: ['class', 'clipPathUnits', 'externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n 'color-profile': ['id', 'local', 'name', 'rendering-intent', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n cursor: ['externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n defs: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n desc: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n ellipse: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n feBlend: ['class', 'height', 'id', 'in', 'in2', 'mode', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feColorMatrix: ['class', 'height', 'id', 'in', 'result', 'style', 'type', 'values', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feComponentTransfer: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feComposite: ['class', 'height', 'id', 'in', 'in2', 'k1', 'k2', 'k3', 'k4', 'operator', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feConvolveMatrix: ['bias', 'class', 'divisor', 'edgeMode', 'height', 'id', 'in', 'kernelMatrix', 'kernelUnitLength', 'order', 'preserveAlpha', 'result', 'style', 'targetX', 'targetY', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feDiffuseLighting: ['class', 'diffuseConstant', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feDisplacementMap: ['class', 'height', 'id', 'in', 'in2', 'result', 'scale', 'style', 'width', 'x', 'xChannelSelector', 'xml:base', 'xml:lang', 'xml:space', 'y', 'yChannelSelector'],\n feDistantLight: ['azimuth', 'elevation', 'id', 'xml:base', 'xml:lang', 'xml:space'],\n feFlood: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feFuncA: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n feFuncB: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n feFuncG: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n feFuncR: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n feGaussianBlur: ['class', 'height', 'id', 'in', 'result', 'stdDeviation', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feImage: ['class', 'externalResourcesRequired', 'height', 'id', 'preserveAspectRatio', 'result', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feMerge: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feMergeNode: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n feMorphology: ['class', 'height', 'id', 'in', 'operator', 'radius', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feOffset: ['class', 'dx', 'dy', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n fePointLight: ['id', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n feSpecularLighting: ['class', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'specularConstant', 'specularExponent', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feSpotLight: ['id', 'limitingConeAngle', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'specularExponent', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n feTile: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n feTurbulence: ['baseFrequency', 'class', 'height', 'id', 'numOctaves', 'result', 'seed', 'stitchTiles', 'style', 'type', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n filter: ['class', 'externalResourcesRequired', 'filterRes', 'filterUnits', 'height', 'id', 'primitiveUnits', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n font: ['class', 'externalResourcesRequired', 'horiz-adv-x', 'horiz-origin-x', 'horiz-origin-y', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n 'font-face': ['accent-height', 'alphabetic', 'ascent', 'bbox', 'cap-height', 'descent', 'font-family', 'font-size', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'hanging', 'id', 'ideographic', 'mathematical', 'overline-position', 'overline-thickness', 'panose-1', 'slope', 'stemh', 'stemv', 'strikethrough-position', 'strikethrough-thickness', 'underline-position', 'underline-thickness', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'widths', 'x-height', 'xml:base', 'xml:lang', 'xml:space'],\n 'font-face-format': ['id', 'string', 'xml:base', 'xml:lang', 'xml:space'],\n 'font-face-name': ['id', 'name', 'xml:base', 'xml:lang', 'xml:space'],\n 'font-face-src': ['id', 'xml:base', 'xml:lang', 'xml:space'],\n 'font-face-uri': ['id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n foreignObject: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n g: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n glyph: ['arabic-form', 'class', 'd', 'glyph-name', 'horiz-adv-x', 'id', 'lang', 'orientation', 'style', 'unicode', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n glyphRef: ['class', 'dx', 'dy', 'format', 'glyphRef', 'id', 'style', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n hkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space'],\n image: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n line: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'x1', 'x2', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n linearGradient: ['class', 'externalResourcesRequired', 'gradientTransform', 'gradientUnits', 'id', 'spreadMethod', 'style', 'x1', 'x2', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n marker: ['class', 'externalResourcesRequired', 'id', 'markerHeight', 'markerUnits', 'markerWidth', 'orient', 'preserveAspectRatio', 'refX', 'refY', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n mask: ['class', 'externalResourcesRequired', 'height', 'id', 'maskContentUnits', 'maskUnits', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n metadata: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n 'missing-glyph': ['class', 'd', 'horiz-adv-x', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n mpath: ['externalResourcesRequired', 'id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n path: ['class', 'd', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'pathLength', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n pattern: ['class', 'externalResourcesRequired', 'height', 'id', 'patternContentUnits', 'patternTransform', 'patternUnits', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'viewBox', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n polygon: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n polyline: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n radialGradient: ['class', 'cx', 'cy', 'externalResourcesRequired', 'fx', 'fy', 'gradientTransform', 'gradientUnits', 'id', 'r', 'spreadMethod', 'style', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n rect: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n script: ['externalResourcesRequired', 'id', 'type', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n set: ['attributeName', 'attributeType', 'begin', 'dur', 'end', 'externalResourcesRequired', 'fill', 'id', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n stop: ['class', 'id', 'offset', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n style: ['id', 'media', 'title', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n svg: ['baseProfile', 'class', 'contentScriptType', 'contentStyleType', 'externalResourcesRequired', 'height', 'id', 'onabort', 'onactivate', 'onclick', 'onerror', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onresize', 'onscroll', 'onunload', 'onzoom', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'version', 'viewBox', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'zoomAndPan'],\n switch: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n symbol: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n text: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'transform', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n textPath: ['class', 'externalResourcesRequired', 'id', 'lengthAdjust', 'method', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'spacing', 'startOffset', 'style', 'systemLanguage', 'textLength', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n title: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n tref: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n tspan: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n use: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n view: ['externalResourcesRequired', 'id', 'preserveAspectRatio', 'viewBox', 'viewTarget', 'xml:base', 'xml:lang', 'xml:space', 'zoomAndPan'],\n vkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space']\n };\n\n\n svgPresentationElements = {\n 'a': true,\n 'altGlyph': true,\n 'animate': true,\n 'animateColor': true,\n 'circle': true,\n 'clipPath': true,\n 'defs': true,\n 'ellipse': true,\n 'feBlend': true,\n 'feColorMatrix': true,\n 'feComponentTransfer': true,\n 'feComposite': true,\n 'feConvolveMatrix': true,\n 'feDiffuseLighting': true,\n 'feDisplacementMap': true,\n 'feFlood': true,\n 'feGaussianBlur': true,\n 'feImage': true,\n 'feMerge': true,\n 'feMorphology': true,\n 'feOffset': true,\n 'feSpecularLighting': true,\n 'feTile': true,\n 'feTurbulence': true,\n 'filter': true,\n 'font': true,\n 'foreignObject': true,\n 'g': true,\n 'glyph': true,\n 'glyphRef': true,\n 'image': true,\n 'line': true,\n 'linearGradient': true,\n 'marker': true,\n 'mask': true,\n 'missing-glyph': true,\n 'path': true,\n 'pattern': true,\n 'polygon': true,\n 'polyline': true,\n 'radialGradient': true,\n 'rect': true,\n 'stop': true,\n 'svg': true,\n 'switch': true,\n 'symbol': true,\n 'text': true,\n 'textPath': true,\n 'tref': true,\n 'tspan': true,\n 'use': true\n };\n\n svgPresentationAttributes = {\n 'alignment-baseline': true,\n 'baseline-shift': true,\n 'clip-path': true,\n 'clip-rule': true,\n 'clip': true,\n 'color-interpolation-filters': true,\n 'color-interpolation': true,\n 'color-profile': true,\n 'color-rendering': true,\n 'color': true,\n 'cursor': true,\n 'direction': true,\n 'display': true,\n 'dominant-baseline': true,\n 'enable-background': true,\n 'fill-opacity': true,\n 'fill-rule': true,\n 'fill': true,\n 'filter': true,\n 'flood-color': true,\n 'flood-opacity': true,\n 'font-family': true,\n 'font-size-adjust': true,\n 'font-size': true,\n 'font-stretch': true,\n 'font-style': true,\n 'font-variant': true,\n 'font-weight': true,\n 'glyph-orientation-horizontal': true,\n 'glyph-orientation-vertical': true,\n 'image-rendering': true,\n 'kerning': true,\n 'letter-spacing': true,\n 'lighting-color': true,\n 'marker-end': true,\n 'marker-mid': true,\n 'marker-start': true,\n 'mask': true,\n 'opacity': true,\n 'overflow': true,\n 'pointer-events': true,\n 'shape-rendering': true,\n 'stop-color': true,\n 'stop-opacity': true,\n 'stroke-dasharray': true,\n 'stroke-dashoffset': true,\n 'stroke-linecap': true,\n 'stroke-linejoin': true,\n 'stroke-miterlimit': true,\n 'stroke-opacity': true,\n 'stroke-width': true,\n 'stroke': true,\n 'text-anchor': true,\n 'text-decoration': true,\n 'text-rendering': true,\n 'unicode-bidi': true,\n 'visibility': true,\n 'word-spacing': true,\n 'writing-mode': true\n };\n\n var createElement = function createElement(html) {\n var div = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement('div');\n div.innerHTML = html;\n return div.firstChild;\n };\n\n svgAnalyzer = function () {\n function SVGAnalyzer() {\n \n\n if (createElement('').firstElementChild.nodeName === 'altglyph' && elements.altGlyph) {\n elements.altglyph = elements.altGlyph;\n delete elements.altGlyph;\n elements.altglyphdef = elements.altGlyphDef;\n delete elements.altGlyphDef;\n elements.altglyphitem = elements.altGlyphItem;\n delete elements.altGlyphItem;\n elements.glyphref = elements.glyphRef;\n delete elements.glyphRef;\n }\n }\n\n SVGAnalyzer.prototype.isStandardSvgAttribute = function isStandardSvgAttribute(nodeName, attributeName) {\n return presentationElements[nodeName] && presentationAttributes[attributeName] || elements[nodeName] && elements[nodeName].indexOf(attributeName) !== -1;\n };\n\n return SVGAnalyzer;\n }();\n}\n\nvar elements = svgElements;\nvar presentationElements = svgPresentationElements;\nvar presentationAttributes = svgPresentationAttributes;\nvar SVGAnalyzer = svgAnalyzer || function () {\n function _class11() {\n \n }\n\n _class11.prototype.isStandardSvgAttribute = function isStandardSvgAttribute() {\n return false;\n };\n\n return _class11;\n}();\n\nvar ObserverLocator = (_temp = _class12 = function () {\n function ObserverLocator(taskQueue, eventManager, dirtyChecker, svgAnalyzer, parser) {\n \n\n this.taskQueue = taskQueue;\n this.eventManager = eventManager;\n this.dirtyChecker = dirtyChecker;\n this.svgAnalyzer = svgAnalyzer;\n this.parser = parser;\n\n this.adapters = [];\n this.logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('observer-locator');\n }\n\n ObserverLocator.prototype.getObserver = function getObserver(obj, propertyName) {\n var observersLookup = obj.__observers__;\n var observer = void 0;\n\n if (observersLookup && propertyName in observersLookup) {\n return observersLookup[propertyName];\n }\n\n observer = this.createPropertyObserver(obj, propertyName);\n\n if (!observer.doNotCache) {\n if (observersLookup === undefined) {\n observersLookup = this.getOrCreateObserversLookup(obj);\n }\n\n observersLookup[propertyName] = observer;\n }\n\n return observer;\n };\n\n ObserverLocator.prototype.getOrCreateObserversLookup = function getOrCreateObserversLookup(obj) {\n return obj.__observers__ || this.createObserversLookup(obj);\n };\n\n ObserverLocator.prototype.createObserversLookup = function createObserversLookup(obj) {\n var value = {};\n\n if (!Reflect.defineProperty(obj, '__observers__', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: value\n })) {\n this.logger.warn('Cannot add observers to object', obj);\n }\n\n return value;\n };\n\n ObserverLocator.prototype.addAdapter = function addAdapter(adapter) {\n this.adapters.push(adapter);\n };\n\n ObserverLocator.prototype.getAdapterObserver = function getAdapterObserver(obj, propertyName, descriptor) {\n for (var i = 0, ii = this.adapters.length; i < ii; i++) {\n var adapter = this.adapters[i];\n var observer = adapter.getObserver(obj, propertyName, descriptor);\n if (observer) {\n return observer;\n }\n }\n return null;\n };\n\n ObserverLocator.prototype.createPropertyObserver = function createPropertyObserver(obj, propertyName) {\n var descriptor = void 0;\n var handler = void 0;\n var xlinkResult = void 0;\n\n if (!(obj instanceof Object)) {\n return new PrimitiveObserver(obj, propertyName);\n }\n\n if (obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].Element) {\n if (propertyName === 'class') {\n return new ClassObserver(obj);\n }\n if (propertyName === 'style' || propertyName === 'css') {\n return new StyleObserver(obj, propertyName);\n }\n handler = this.eventManager.getElementHandler(obj, propertyName);\n if (propertyName === 'value' && obj.tagName.toLowerCase() === 'select') {\n return new SelectValueObserver(obj, handler, this);\n }\n if (propertyName === 'checked' && obj.tagName.toLowerCase() === 'input') {\n return new CheckedObserver(obj, handler, this);\n }\n if (handler) {\n return new ValueAttributeObserver(obj, propertyName, handler);\n }\n xlinkResult = /^xlink:(.+)$/.exec(propertyName);\n if (xlinkResult) {\n return new XLinkAttributeObserver(obj, propertyName, xlinkResult[1]);\n }\n if (propertyName === 'role' && (obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].Element || obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].SVGElement) || /^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName)) {\n return new DataAttributeObserver(obj, propertyName);\n }\n }\n\n descriptor = Object.getPropertyDescriptor(obj, propertyName);\n\n if (hasDeclaredDependencies(descriptor)) {\n return createComputedObserver(obj, propertyName, descriptor, this);\n }\n\n if (descriptor) {\n var existingGetterOrSetter = descriptor.get || descriptor.set;\n if (existingGetterOrSetter) {\n if (existingGetterOrSetter.getObserver) {\n return existingGetterOrSetter.getObserver(obj);\n }\n\n var adapterObserver = this.getAdapterObserver(obj, propertyName, descriptor);\n if (adapterObserver) {\n return adapterObserver;\n }\n return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n }\n }\n\n if (obj instanceof Array) {\n if (propertyName === 'length') {\n return this.getArrayObserver(obj).getLengthObserver();\n }\n\n return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n } else if (obj instanceof Map) {\n if (propertyName === 'size') {\n return this.getMapObserver(obj).getLengthObserver();\n }\n\n return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n } else if (obj instanceof Set) {\n if (propertyName === 'size') {\n return this.getSetObserver(obj).getLengthObserver();\n }\n\n return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n }\n\n return new SetterObserver(this.taskQueue, obj, propertyName);\n };\n\n ObserverLocator.prototype.getAccessor = function getAccessor(obj, propertyName) {\n if (obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].Element) {\n if (propertyName === 'class' || propertyName === 'style' || propertyName === 'css' || propertyName === 'value' && (obj.tagName.toLowerCase() === 'input' || obj.tagName.toLowerCase() === 'select') || propertyName === 'checked' && obj.tagName.toLowerCase() === 'input' || propertyName === 'model' && obj.tagName.toLowerCase() === 'input' || /^xlink:.+$/.exec(propertyName)) {\n return this.getObserver(obj, propertyName);\n }\n if (/^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName) || obj.tagName.toLowerCase() === 'img' && propertyName === 'src' || obj.tagName.toLowerCase() === 'a' && propertyName === 'href') {\n return dataAttributeAccessor;\n }\n }\n return propertyAccessor;\n };\n\n ObserverLocator.prototype.getArrayObserver = function getArrayObserver(array) {\n return _getArrayObserver(this.taskQueue, array);\n };\n\n ObserverLocator.prototype.getMapObserver = function getMapObserver(map) {\n return _getMapObserver(this.taskQueue, map);\n };\n\n ObserverLocator.prototype.getSetObserver = function getSetObserver(set) {\n return _getSetObserver(this.taskQueue, set);\n };\n\n return ObserverLocator;\n}(), _class12.inject = [aurelia_task_queue__WEBPACK_IMPORTED_MODULE_2__[\"TaskQueue\"], EventManager, DirtyChecker, SVGAnalyzer, Parser], _temp);\n\nvar ObjectObservationAdapter = function () {\n function ObjectObservationAdapter() {\n \n }\n\n ObjectObservationAdapter.prototype.getObserver = function getObserver(object, propertyName, descriptor) {\n throw new Error('BindingAdapters must implement getObserver(object, propertyName).');\n };\n\n return ObjectObservationAdapter;\n}();\n\nvar BindingExpression = function () {\n function BindingExpression(observerLocator, targetProperty, sourceExpression, mode, lookupFunctions, attribute) {\n \n\n this.observerLocator = observerLocator;\n this.targetProperty = targetProperty;\n this.sourceExpression = sourceExpression;\n this.mode = mode;\n this.lookupFunctions = lookupFunctions;\n this.attribute = attribute;\n this.discrete = false;\n }\n\n BindingExpression.prototype.createBinding = function createBinding(target) {\n return new Binding(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.mode, this.lookupFunctions);\n };\n\n return BindingExpression;\n}();\n\nvar Binding = (_dec10 = connectable(), _dec10(_class13 = function () {\n function Binding(observerLocator, sourceExpression, target, targetProperty, mode, lookupFunctions) {\n \n\n this.observerLocator = observerLocator;\n this.sourceExpression = sourceExpression;\n this.target = target;\n this.targetProperty = targetProperty;\n this.mode = mode;\n this.lookupFunctions = lookupFunctions;\n }\n\n Binding.prototype.updateTarget = function updateTarget(value) {\n this.targetObserver.setValue(value, this.target, this.targetProperty);\n };\n\n Binding.prototype.updateSource = function updateSource(value) {\n this.sourceExpression.assign(this.source, value, this.lookupFunctions);\n };\n\n Binding.prototype.call = function call(context, newValue, oldValue) {\n if (!this.isBound) {\n return;\n }\n if (context === sourceContext) {\n oldValue = this.targetObserver.getValue(this.target, this.targetProperty);\n newValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n if (newValue !== oldValue) {\n this.updateTarget(newValue);\n }\n if (this.mode !== bindingMode.oneTime) {\n this._version++;\n this.sourceExpression.connect(this, this.source);\n this.unobserve(false);\n }\n return;\n }\n if (context === targetContext) {\n if (newValue !== this.sourceExpression.evaluate(this.source, this.lookupFunctions)) {\n this.updateSource(newValue);\n }\n return;\n }\n throw new Error('Unexpected call context ' + context);\n };\n\n Binding.prototype.bind = function bind(source) {\n if (this.isBound) {\n if (this.source === source) {\n return;\n }\n this.unbind();\n }\n this.isBound = true;\n this.source = source;\n\n if (this.sourceExpression.bind) {\n this.sourceExpression.bind(this, source, this.lookupFunctions);\n }\n\n var mode = this.mode;\n if (!this.targetObserver) {\n var method = mode === bindingMode.twoWay || mode === bindingMode.fromView ? 'getObserver' : 'getAccessor';\n this.targetObserver = this.observerLocator[method](this.target, this.targetProperty);\n }\n\n if ('bind' in this.targetObserver) {\n this.targetObserver.bind();\n }\n if (this.mode !== bindingMode.fromView) {\n var value = this.sourceExpression.evaluate(source, this.lookupFunctions);\n this.updateTarget(value);\n }\n\n if (mode === bindingMode.oneTime) {\n return;\n } else if (mode === bindingMode.toView) {\n enqueueBindingConnect(this);\n } else if (mode === bindingMode.twoWay) {\n this.sourceExpression.connect(this, source);\n this.targetObserver.subscribe(targetContext, this);\n } else if (mode === bindingMode.fromView) {\n this.targetObserver.subscribe(targetContext, this);\n }\n };\n\n Binding.prototype.unbind = function unbind() {\n if (!this.isBound) {\n return;\n }\n this.isBound = false;\n if (this.sourceExpression.unbind) {\n this.sourceExpression.unbind(this, this.source);\n }\n this.source = null;\n if ('unbind' in this.targetObserver) {\n this.targetObserver.unbind();\n }\n if (this.targetObserver.unsubscribe) {\n this.targetObserver.unsubscribe(targetContext, this);\n }\n this.unobserve(true);\n };\n\n Binding.prototype.connect = function connect(evaluate) {\n if (!this.isBound) {\n return;\n }\n if (evaluate) {\n var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n this.updateTarget(value);\n }\n this.sourceExpression.connect(this, this.source);\n };\n\n return Binding;\n}()) || _class13);\n\nvar CallExpression = function () {\n function CallExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions) {\n \n\n this.observerLocator = observerLocator;\n this.targetProperty = targetProperty;\n this.sourceExpression = sourceExpression;\n this.lookupFunctions = lookupFunctions;\n }\n\n CallExpression.prototype.createBinding = function createBinding(target) {\n return new Call(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.lookupFunctions);\n };\n\n return CallExpression;\n}();\n\nvar Call = function () {\n function Call(observerLocator, sourceExpression, target, targetProperty, lookupFunctions) {\n \n\n this.sourceExpression = sourceExpression;\n this.target = target;\n this.targetProperty = observerLocator.getObserver(target, targetProperty);\n this.lookupFunctions = lookupFunctions;\n }\n\n Call.prototype.callSource = function callSource($event) {\n var overrideContext = this.source.overrideContext;\n Object.assign(overrideContext, $event);\n overrideContext.$event = $event;\n var mustEvaluate = true;\n var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n delete overrideContext.$event;\n for (var prop in $event) {\n delete overrideContext[prop];\n }\n return result;\n };\n\n Call.prototype.bind = function bind(source) {\n var _this26 = this;\n\n if (this.isBound) {\n if (this.source === source) {\n return;\n }\n this.unbind();\n }\n this.isBound = true;\n this.source = source;\n\n if (this.sourceExpression.bind) {\n this.sourceExpression.bind(this, source, this.lookupFunctions);\n }\n this.targetProperty.setValue(function ($event) {\n return _this26.callSource($event);\n });\n };\n\n Call.prototype.unbind = function unbind() {\n if (!this.isBound) {\n return;\n }\n this.isBound = false;\n if (this.sourceExpression.unbind) {\n this.sourceExpression.unbind(this, this.source);\n }\n this.source = null;\n this.targetProperty.setValue(null);\n };\n\n return Call;\n}();\n\nvar ValueConverterResource = function () {\n function ValueConverterResource(name) {\n \n\n this.name = name;\n }\n\n ValueConverterResource.convention = function convention(name) {\n if (name.endsWith('ValueConverter')) {\n return new ValueConverterResource(camelCase(name.substring(0, name.length - 14)));\n }\n };\n\n ValueConverterResource.prototype.initialize = function initialize(container, target) {\n this.instance = container.get(target);\n };\n\n ValueConverterResource.prototype.register = function register(registry, name) {\n registry.registerValueConverter(name || this.name, this.instance);\n };\n\n ValueConverterResource.prototype.load = function load(container, target) {};\n\n return ValueConverterResource;\n}();\n\nfunction valueConverter(nameOrTarget) {\n if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n return function (target) {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[\"metadata\"].resource, new ValueConverterResource(nameOrTarget), target);\n };\n }\n\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[\"metadata\"].resource, new ValueConverterResource(), nameOrTarget);\n}\n\nvar BindingBehaviorResource = function () {\n function BindingBehaviorResource(name) {\n \n\n this.name = name;\n }\n\n BindingBehaviorResource.convention = function convention(name) {\n if (name.endsWith('BindingBehavior')) {\n return new BindingBehaviorResource(camelCase(name.substring(0, name.length - 15)));\n }\n };\n\n BindingBehaviorResource.prototype.initialize = function initialize(container, target) {\n this.instance = container.get(target);\n };\n\n BindingBehaviorResource.prototype.register = function register(registry, name) {\n registry.registerBindingBehavior(name || this.name, this.instance);\n };\n\n BindingBehaviorResource.prototype.load = function load(container, target) {};\n\n return BindingBehaviorResource;\n}();\n\nfunction bindingBehavior(nameOrTarget) {\n if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n return function (target) {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[\"metadata\"].resource, new BindingBehaviorResource(nameOrTarget), target);\n };\n }\n\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_3__[\"metadata\"].resource, new BindingBehaviorResource(), nameOrTarget);\n}\n\nvar ListenerExpression = function () {\n function ListenerExpression(eventManager, targetEvent, sourceExpression, delegationStrategy, preventDefault, lookupFunctions) {\n \n\n this.eventManager = eventManager;\n this.targetEvent = targetEvent;\n this.sourceExpression = sourceExpression;\n this.delegationStrategy = delegationStrategy;\n this.discrete = true;\n this.preventDefault = preventDefault;\n this.lookupFunctions = lookupFunctions;\n }\n\n ListenerExpression.prototype.createBinding = function createBinding(target) {\n return new Listener(this.eventManager, this.targetEvent, this.delegationStrategy, this.sourceExpression, target, this.preventDefault, this.lookupFunctions);\n };\n\n return ListenerExpression;\n}();\n\nvar Listener = function () {\n function Listener(eventManager, targetEvent, delegationStrategy, sourceExpression, target, preventDefault, lookupFunctions) {\n \n\n this.eventManager = eventManager;\n this.targetEvent = targetEvent;\n this.delegationStrategy = delegationStrategy;\n this.sourceExpression = sourceExpression;\n this.target = target;\n this.preventDefault = preventDefault;\n this.lookupFunctions = lookupFunctions;\n }\n\n Listener.prototype.callSource = function callSource(event) {\n var overrideContext = this.source.overrideContext;\n overrideContext.$event = event;\n var mustEvaluate = true;\n var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n delete overrideContext.$event;\n if (result !== true && this.preventDefault) {\n event.preventDefault();\n }\n return result;\n };\n\n Listener.prototype.handleEvent = function handleEvent(event) {\n this.callSource(event);\n };\n\n Listener.prototype.bind = function bind(source) {\n if (this.isBound) {\n if (this.source === source) {\n return;\n }\n this.unbind();\n }\n this.isBound = true;\n this.source = source;\n\n if (this.sourceExpression.bind) {\n this.sourceExpression.bind(this, source, this.lookupFunctions);\n }\n this._handler = this.eventManager.addEventListener(this.target, this.targetEvent, this, this.delegationStrategy, true);\n };\n\n Listener.prototype.unbind = function unbind() {\n if (!this.isBound) {\n return;\n }\n this.isBound = false;\n if (this.sourceExpression.unbind) {\n this.sourceExpression.unbind(this, this.source);\n }\n this.source = null;\n this._handler.dispose();\n this._handler = null;\n };\n\n return Listener;\n}();\n\nfunction getAU(element) {\n var au = element.au;\n\n if (au === undefined) {\n throw new Error('No Aurelia APIs are defined for the element: \"' + element.tagName + '\".');\n }\n\n return au;\n}\n\nvar NameExpression = function () {\n function NameExpression(sourceExpression, apiName, lookupFunctions) {\n \n\n this.sourceExpression = sourceExpression;\n this.apiName = apiName;\n this.lookupFunctions = lookupFunctions;\n this.discrete = true;\n }\n\n NameExpression.prototype.createBinding = function createBinding(target) {\n return new NameBinder(this.sourceExpression, NameExpression.locateAPI(target, this.apiName), this.lookupFunctions);\n };\n\n NameExpression.locateAPI = function locateAPI(element, apiName) {\n switch (apiName) {\n case 'element':\n return element;\n case 'controller':\n return getAU(element).controller;\n case 'view-model':\n return getAU(element).controller.viewModel;\n case 'view':\n return getAU(element).controller.view;\n default:\n var target = getAU(element)[apiName];\n\n if (target === undefined) {\n throw new Error('Attempted to reference \"' + apiName + '\", but it was not found amongst the target\\'s API.');\n }\n\n return target.viewModel;\n }\n };\n\n return NameExpression;\n}();\n\nvar NameBinder = function () {\n function NameBinder(sourceExpression, target, lookupFunctions) {\n \n\n this.sourceExpression = sourceExpression;\n this.target = target;\n this.lookupFunctions = lookupFunctions;\n }\n\n NameBinder.prototype.bind = function bind(source) {\n if (this.isBound) {\n if (this.source === source) {\n return;\n }\n this.unbind();\n }\n this.isBound = true;\n this.source = source;\n if (this.sourceExpression.bind) {\n this.sourceExpression.bind(this, source, this.lookupFunctions);\n }\n this.sourceExpression.assign(this.source, this.target, this.lookupFunctions);\n };\n\n NameBinder.prototype.unbind = function unbind() {\n if (!this.isBound) {\n return;\n }\n this.isBound = false;\n if (this.sourceExpression.evaluate(this.source, this.lookupFunctions) === this.target) {\n this.sourceExpression.assign(this.source, null, this.lookupFunctions);\n }\n if (this.sourceExpression.unbind) {\n this.sourceExpression.unbind(this, this.source);\n }\n this.source = null;\n };\n\n return NameBinder;\n}();\n\nvar LookupFunctions = {\n bindingBehaviors: function bindingBehaviors(name) {\n return null;\n },\n valueConverters: function valueConverters(name) {\n return null;\n }\n};\n\nvar BindingEngine = (_temp2 = _class14 = function () {\n function BindingEngine(observerLocator, parser) {\n \n\n this.observerLocator = observerLocator;\n this.parser = parser;\n }\n\n BindingEngine.prototype.createBindingExpression = function createBindingExpression(targetProperty, sourceExpression) {\n var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : bindingMode.toView;\n var lookupFunctions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : LookupFunctions;\n\n return new BindingExpression(this.observerLocator, targetProperty, this.parser.parse(sourceExpression), mode, lookupFunctions);\n };\n\n BindingEngine.prototype.propertyObserver = function propertyObserver(obj, propertyName) {\n var _this27 = this;\n\n return {\n subscribe: function subscribe(callback) {\n var observer = _this27.observerLocator.getObserver(obj, propertyName);\n observer.subscribe(callback);\n return {\n dispose: function dispose() {\n return observer.unsubscribe(callback);\n }\n };\n }\n };\n };\n\n BindingEngine.prototype.collectionObserver = function collectionObserver(collection) {\n var _this28 = this;\n\n return {\n subscribe: function subscribe(callback) {\n var observer = void 0;\n if (collection instanceof Array) {\n observer = _this28.observerLocator.getArrayObserver(collection);\n } else if (collection instanceof Map) {\n observer = _this28.observerLocator.getMapObserver(collection);\n } else if (collection instanceof Set) {\n observer = _this28.observerLocator.getSetObserver(collection);\n } else {\n throw new Error('collection must be an instance of Array, Map or Set.');\n }\n observer.subscribe(callback);\n return {\n dispose: function dispose() {\n return observer.unsubscribe(callback);\n }\n };\n }\n };\n };\n\n BindingEngine.prototype.expressionObserver = function expressionObserver(bindingContext, expression) {\n var scope = { bindingContext: bindingContext, overrideContext: createOverrideContext(bindingContext) };\n return new ExpressionObserver(scope, this.parser.parse(expression), this.observerLocator, LookupFunctions);\n };\n\n BindingEngine.prototype.parseExpression = function parseExpression(expression) {\n return this.parser.parse(expression);\n };\n\n BindingEngine.prototype.registerAdapter = function registerAdapter(adapter) {\n this.observerLocator.addAdapter(adapter);\n };\n\n return BindingEngine;\n}(), _class14.inject = [ObserverLocator, Parser], _temp2);\n\nvar setProto = Set.prototype;\n\nfunction _getSetObserver(taskQueue, set) {\n return ModifySetObserver.for(taskQueue, set);\n}\n\nvar ModifySetObserver = function (_ModifyCollectionObse3) {\n _inherits(ModifySetObserver, _ModifyCollectionObse3);\n\n function ModifySetObserver(taskQueue, set) {\n \n\n return _possibleConstructorReturn(this, _ModifyCollectionObse3.call(this, taskQueue, set));\n }\n\n ModifySetObserver.for = function _for(taskQueue, set) {\n if (!('__set_observer__' in set)) {\n Reflect.defineProperty(set, '__set_observer__', {\n value: ModifySetObserver.create(taskQueue, set),\n enumerable: false, configurable: false\n });\n }\n return set.__set_observer__;\n };\n\n ModifySetObserver.create = function create(taskQueue, set) {\n var observer = new ModifySetObserver(taskQueue, set);\n\n var proto = setProto;\n if (proto.add !== set.add || proto.delete !== set.delete || proto.clear !== set.clear) {\n proto = {\n add: set.add,\n delete: set.delete,\n clear: set.clear\n };\n }\n\n set.add = function () {\n var type = 'add';\n var oldSize = set.size;\n var methodCallResult = proto.add.apply(set, arguments);\n var hasValue = set.size === oldSize;\n if (!hasValue) {\n observer.addChangeRecord({\n type: type,\n object: set,\n value: Array.from(set).pop()\n });\n }\n return methodCallResult;\n };\n\n set.delete = function () {\n var hasValue = set.has(arguments[0]);\n var methodCallResult = proto.delete.apply(set, arguments);\n if (hasValue) {\n observer.addChangeRecord({\n type: 'delete',\n object: set,\n value: arguments[0]\n });\n }\n return methodCallResult;\n };\n\n set.clear = function () {\n var methodCallResult = proto.clear.apply(set, arguments);\n observer.addChangeRecord({\n type: 'clear',\n object: set\n });\n return methodCallResult;\n };\n\n return observer;\n };\n\n return ModifySetObserver;\n}(ModifyCollectionObserver);\n\nfunction observable(targetOrConfig, key, descriptor) {\n function deco(target, key, descriptor, config) {\n var isClassDecorator = key === undefined;\n if (isClassDecorator) {\n target = target.prototype;\n key = typeof config === 'string' ? config : config.name;\n }\n\n var innerPropertyName = '_' + key;\n var innerPropertyDescriptor = {\n configurable: true,\n enumerable: false,\n writable: true\n };\n\n var callbackName = config && config.changeHandler || key + 'Changed';\n\n if (descriptor) {\n if (typeof descriptor.initializer === 'function') {\n innerPropertyDescriptor.value = descriptor.initializer();\n }\n } else {\n descriptor = {};\n }\n\n if (!('enumerable' in descriptor)) {\n descriptor.enumerable = true;\n }\n\n delete descriptor.value;\n delete descriptor.writable;\n delete descriptor.initializer;\n\n Reflect.defineProperty(target, innerPropertyName, innerPropertyDescriptor);\n\n descriptor.get = function () {\n return this[innerPropertyName];\n };\n descriptor.set = function (newValue) {\n var oldValue = this[innerPropertyName];\n if (newValue === oldValue) {\n return;\n }\n\n this[innerPropertyName] = newValue;\n Reflect.defineProperty(this, innerPropertyName, { enumerable: false });\n\n if (this[callbackName]) {\n this[callbackName](newValue, oldValue, key);\n }\n };\n\n descriptor.get.dependencies = [innerPropertyName];\n\n if (isClassDecorator) {\n Reflect.defineProperty(target, key, descriptor);\n } else {\n return descriptor;\n }\n }\n\n if (key === undefined) {\n return function (t, k, d) {\n return deco(t, k, d, targetOrConfig);\n };\n }\n return deco(targetOrConfig, key, descriptor);\n}\n\nvar signals = {};\n\nfunction connectBindingToSignal(binding, name) {\n if (!signals.hasOwnProperty(name)) {\n signals[name] = 0;\n }\n binding.observeProperty(signals, name);\n}\n\nfunction signalBindings(name) {\n if (signals.hasOwnProperty(name)) {\n signals[name]++;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1iaW5kaW5nL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1iaW5kaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtYmluZGluZy9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtYmluZGluZy5qcz81Zjk4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IF9nZXRBcnJheU9ic2VydmVyIGFzIGdldEFycmF5T2JzZXJ2ZXIgfTtcbmV4cG9ydCB7IF9nZXRNYXBPYnNlcnZlciBhcyBnZXRNYXBPYnNlcnZlciB9O1xuZXhwb3J0IHsgX2dldFNldE9ic2VydmVyIGFzIGdldFNldE9ic2VydmVyIH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9kZWMsIF9kZWMyLCBfY2xhc3MsIF9kZWMzLCBfY2xhc3MyLCBfZGVjNCwgX2NsYXNzMywgX2RlYzUsIF9jbGFzczUsIF9kZWM2LCBfY2xhc3M3LCBfZGVjNywgX2NsYXNzOCwgX2RlYzgsIF9jbGFzczksIF9kZWM5LCBfY2xhc3MxMCwgX2NsYXNzMTIsIF90ZW1wLCBfZGVjMTAsIF9jbGFzczEzLCBfY2xhc3MxNCwgX3RlbXAyO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cblxuXG5pbXBvcnQgKiBhcyBMb2dNYW5hZ2VyIGZyb20gJ2F1cmVsaWEtbG9nZ2luZyc7XG5pbXBvcnQgeyBQTEFURk9STSwgRE9NIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuaW1wb3J0IHsgVGFza1F1ZXVlIH0gZnJvbSAnYXVyZWxpYS10YXNrLXF1ZXVlJztcbmltcG9ydCB7IG1ldGFkYXRhIH0gZnJvbSAnYXVyZWxpYS1tZXRhZGF0YSc7XG5cbmV4cG9ydCB2YXIgdGFyZ2V0Q29udGV4dCA9ICdCaW5kaW5nOnRhcmdldCc7XG5leHBvcnQgdmFyIHNvdXJjZUNvbnRleHQgPSAnQmluZGluZzpzb3VyY2UnO1xuXG52YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZShuYW1lKSB7XG4gIGlmIChuYW1lIGluIG1hcCkge1xuICAgIHJldHVybiBtYXBbbmFtZV07XG4gIH1cbiAgdmFyIHJlc3VsdCA9IG5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLnJlcGxhY2UoL1tfLi1dKFxcd3wkKS9nLCBmdW5jdGlvbiAoXywgeCkge1xuICAgIHJldHVybiB4LnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xuICBtYXBbbmFtZV0gPSByZXN1bHQ7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdmVycmlkZUNvbnRleHQoYmluZGluZ0NvbnRleHQsIHBhcmVudE92ZXJyaWRlQ29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIGJpbmRpbmdDb250ZXh0OiBiaW5kaW5nQ29udGV4dCxcbiAgICBwYXJlbnRPdmVycmlkZUNvbnRleHQ6IHBhcmVudE92ZXJyaWRlQ29udGV4dCB8fCBudWxsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZXh0Rm9yKG5hbWUsIHNjb3BlLCBhbmNlc3Rvcikge1xuICB2YXIgb2MgPSBzY29wZS5vdmVycmlkZUNvbnRleHQ7XG5cbiAgaWYgKGFuY2VzdG9yKSB7XG4gICAgd2hpbGUgKGFuY2VzdG9yICYmIG9jKSB7XG4gICAgICBhbmNlc3Rvci0tO1xuICAgICAgb2MgPSBvYy5wYXJlbnRPdmVycmlkZUNvbnRleHQ7XG4gICAgfVxuICAgIGlmIChhbmNlc3RvciB8fCAhb2MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBuYW1lIGluIG9jID8gb2MgOiBvYy5iaW5kaW5nQ29udGV4dDtcbiAgfVxuXG4gIHdoaWxlIChvYyAmJiAhKG5hbWUgaW4gb2MpICYmICEob2MuYmluZGluZ0NvbnRleHQgJiYgbmFtZSBpbiBvYy5iaW5kaW5nQ29udGV4dCkpIHtcbiAgICBvYyA9IG9jLnBhcmVudE92ZXJyaWRlQ29udGV4dDtcbiAgfVxuICBpZiAob2MpIHtcbiAgICByZXR1cm4gbmFtZSBpbiBvYyA/IG9jIDogb2MuYmluZGluZ0NvbnRleHQ7XG4gIH1cblxuICByZXR1cm4gc2NvcGUuYmluZGluZ0NvbnRleHQgfHwgc2NvcGUub3ZlcnJpZGVDb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2NvcGVGb3JUZXN0KGJpbmRpbmdDb250ZXh0LCBwYXJlbnRCaW5kaW5nQ29udGV4dCkge1xuICBpZiAocGFyZW50QmluZGluZ0NvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmluZGluZ0NvbnRleHQ6IGJpbmRpbmdDb250ZXh0LFxuICAgICAgb3ZlcnJpZGVDb250ZXh0OiBjcmVhdGVPdmVycmlkZUNvbnRleHQoYmluZGluZ0NvbnRleHQsIGNyZWF0ZU92ZXJyaWRlQ29udGV4dChwYXJlbnRCaW5kaW5nQ29udGV4dCkpXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGJpbmRpbmdDb250ZXh0OiBiaW5kaW5nQ29udGV4dCxcbiAgICBvdmVycmlkZUNvbnRleHQ6IGNyZWF0ZU92ZXJyaWRlQ29udGV4dChiaW5kaW5nQ29udGV4dClcbiAgfTtcbn1cblxudmFyIHNsb3ROYW1lcyA9IFtdO1xudmFyIHZlcnNpb25TbG90TmFtZXMgPSBbXTtcbnZhciBsYXN0U2xvdCA9IC0xO1xuZnVuY3Rpb24gZW5zdXJlRW5vdWdoU2xvdE5hbWVzKGN1cnJlbnRTbG90KSB7XG4gIGlmIChjdXJyZW50U2xvdCA9PT0gbGFzdFNsb3QpIHtcbiAgICBsYXN0U2xvdCArPSA1O1xuICAgIHZhciBpaSA9IHNsb3ROYW1lcy5sZW5ndGggPSB2ZXJzaW9uU2xvdE5hbWVzLmxlbmd0aCA9IGxhc3RTbG90ICsgMTtcbiAgICBmb3IgKHZhciBpID0gY3VycmVudFNsb3QgKyAxOyBpIDwgaWk7ICsraSkge1xuICAgICAgc2xvdE5hbWVzW2ldID0gJ19vYnNlcnZlcicgKyBpO1xuICAgICAgdmVyc2lvblNsb3ROYW1lc1tpXSA9ICdfb2JzZXJ2ZXJWZXJzaW9uJyArIGk7XG4gICAgfVxuICB9XG59XG5lbnN1cmVFbm91Z2hTbG90TmFtZXMoLTEpO1xuXG5mdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICB2YXIgb2JzZXJ2ZXJTbG90cyA9IHRoaXMuX29ic2VydmVyU2xvdHMgPT09IHVuZGVmaW5lZCA/IDAgOiB0aGlzLl9vYnNlcnZlclNsb3RzO1xuICB2YXIgaSA9IG9ic2VydmVyU2xvdHM7XG4gIHdoaWxlIChpLS0gJiYgdGhpc1tzbG90TmFtZXNbaV1dICE9PSBvYnNlcnZlcikge31cblxuICBpZiAoaSA9PT0gLTEpIHtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAodGhpc1tzbG90TmFtZXNbaV1dKSB7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHRoaXNbc2xvdE5hbWVzW2ldXSA9IG9ic2VydmVyO1xuICAgIG9ic2VydmVyLnN1YnNjcmliZShzb3VyY2VDb250ZXh0LCB0aGlzKTtcblxuICAgIGlmIChpID09PSBvYnNlcnZlclNsb3RzKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlclNsb3RzID0gaSArIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX3ZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZlcnNpb24gPSAwO1xuICB9XG4gIHRoaXNbdmVyc2lvblNsb3ROYW1lc1tpXV0gPSB0aGlzLl92ZXJzaW9uO1xuICBlbnN1cmVFbm91Z2hTbG90TmFtZXMoaSk7XG59XG5cbmZ1bmN0aW9uIG9ic2VydmVQcm9wZXJ0eShvYmosIHByb3BlcnR5TmFtZSkge1xuICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVyTG9jYXRvci5nZXRPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSk7XG4gIGFkZE9ic2VydmVyLmNhbGwodGhpcywgb2JzZXJ2ZXIpO1xufVxuXG5mdW5jdGlvbiBvYnNlcnZlQXJyYXkoYXJyYXkpIHtcbiAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlckxvY2F0b3IuZ2V0QXJyYXlPYnNlcnZlcihhcnJheSk7XG4gIGFkZE9ic2VydmVyLmNhbGwodGhpcywgb2JzZXJ2ZXIpO1xufVxuXG5mdW5jdGlvbiB1bm9ic2VydmUoYWxsKSB7XG4gIHZhciBpID0gdGhpcy5fb2JzZXJ2ZXJTbG90cztcbiAgd2hpbGUgKGktLSkge1xuICAgIGlmIChhbGwgfHwgdGhpc1t2ZXJzaW9uU2xvdE5hbWVzW2ldXSAhPT0gdGhpcy5fdmVyc2lvbikge1xuICAgICAgdmFyIG9ic2VydmVyID0gdGhpc1tzbG90TmFtZXNbaV1dO1xuICAgICAgdGhpc1tzbG90TmFtZXNbaV1dID0gbnVsbDtcbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci51bnN1YnNjcmliZShzb3VyY2VDb250ZXh0LCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RhYmxlKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHRhcmdldC5wcm90b3R5cGUub2JzZXJ2ZVByb3BlcnR5ID0gb2JzZXJ2ZVByb3BlcnR5O1xuICAgIHRhcmdldC5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gb2JzZXJ2ZUFycmF5O1xuICAgIHRhcmdldC5wcm90b3R5cGUudW5vYnNlcnZlID0gdW5vYnNlcnZlO1xuICAgIHRhcmdldC5wcm90b3R5cGUuYWRkT2JzZXJ2ZXIgPSBhZGRPYnNlcnZlcjtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gW107XG52YXIgcXVldWVkID0ge307XG52YXIgbmV4dElkID0gMDtcbnZhciBtaW5pbXVtSW1tZWRpYXRlID0gMTAwO1xudmFyIGZyYW1lQnVkZ2V0ID0gMTU7XG5cbnZhciBpc0ZsdXNoUmVxdWVzdGVkID0gZmFsc2U7XG52YXIgaW1tZWRpYXRlID0gMDtcblxuZnVuY3Rpb24gZmx1c2goYW5pbWF0aW9uRnJhbWVTdGFydCkge1xuICB2YXIgbGVuZ3RoID0gcXVldWUubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgdmFyIGJpbmRpbmcgPSBxdWV1ZVtpXTtcbiAgICBxdWV1ZWRbYmluZGluZy5fX2Nvbm5lY3RRdWV1ZUlkXSA9IGZhbHNlO1xuICAgIGJpbmRpbmcuY29ubmVjdCh0cnVlKTtcbiAgICBpKys7XG5cbiAgICBpZiAoaSAlIDEwMCA9PT0gMCAmJiBQTEFURk9STS5wZXJmb3JtYW5jZS5ub3coKSAtIGFuaW1hdGlvbkZyYW1lU3RhcnQgPiBmcmFtZUJ1ZGdldCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHF1ZXVlLnNwbGljZSgwLCBpKTtcblxuICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgUExBVEZPUk0ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZsdXNoKTtcbiAgfSBlbHNlIHtcbiAgICBpc0ZsdXNoUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgaW1tZWRpYXRlID0gMDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZUJpbmRpbmdDb25uZWN0KGJpbmRpbmcpIHtcbiAgaWYgKGltbWVkaWF0ZSA8IG1pbmltdW1JbW1lZGlhdGUpIHtcbiAgICBpbW1lZGlhdGUrKztcbiAgICBiaW5kaW5nLmNvbm5lY3QoZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHZhciBpZCA9IGJpbmRpbmcuX19jb25uZWN0UXVldWVJZDtcbiAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWQgPSBuZXh0SWQ7XG4gICAgICBuZXh0SWQrKztcbiAgICAgIGJpbmRpbmcuX19jb25uZWN0UXVldWVJZCA9IGlkO1xuICAgIH1cblxuICAgIGlmICghcXVldWVkW2lkXSkge1xuICAgICAgcXVldWUucHVzaChiaW5kaW5nKTtcbiAgICAgIHF1ZXVlZFtpZF0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzRmx1c2hSZXF1ZXN0ZWQpIHtcbiAgICBpc0ZsdXNoUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICBQTEFURk9STS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZmx1c2gpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb25uZWN0UXVldWVUaHJlc2hvbGQodmFsdWUpIHtcbiAgbWluaW11bUltbWVkaWF0ZSA9IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlQ29ubmVjdFF1ZXVlKCkge1xuICBzZXRDb25uZWN0UXVldWVUaHJlc2hvbGQoMTAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVDb25uZWN0UXVldWUoKSB7XG4gIHNldENvbm5lY3RRdWV1ZVRocmVzaG9sZChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0UXVldWVTaXplKCkge1xuICByZXR1cm4gcXVldWUubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBhZGRTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gIGlmICh0aGlzLmhhc1N1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghdGhpcy5fY29udGV4dDApIHtcbiAgICB0aGlzLl9jb250ZXh0MCA9IGNvbnRleHQ7XG4gICAgdGhpcy5fY2FsbGFibGUwID0gY2FsbGFibGU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCF0aGlzLl9jb250ZXh0MSkge1xuICAgIHRoaXMuX2NvbnRleHQxID0gY29udGV4dDtcbiAgICB0aGlzLl9jYWxsYWJsZTEgPSBjYWxsYWJsZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIXRoaXMuX2NvbnRleHQyKSB7XG4gICAgdGhpcy5fY29udGV4dDIgPSBjb250ZXh0O1xuICAgIHRoaXMuX2NhbGxhYmxlMiA9IGNhbGxhYmxlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICghdGhpcy5fY29udGV4dHNSZXN0KSB7XG4gICAgdGhpcy5fY29udGV4dHNSZXN0ID0gW2NvbnRleHRdO1xuICAgIHRoaXMuX2NhbGxhYmxlc1Jlc3QgPSBbY2FsbGFibGVdO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRoaXMuX2NvbnRleHRzUmVzdC5wdXNoKGNvbnRleHQpO1xuICB0aGlzLl9jYWxsYWJsZXNSZXN0LnB1c2goY2FsbGFibGUpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSkge1xuICBpZiAodGhpcy5fY29udGV4dDAgPT09IGNvbnRleHQgJiYgdGhpcy5fY2FsbGFibGUwID09PSBjYWxsYWJsZSkge1xuICAgIHRoaXMuX2NvbnRleHQwID0gbnVsbDtcbiAgICB0aGlzLl9jYWxsYWJsZTAgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0aGlzLl9jb250ZXh0MSA9PT0gY29udGV4dCAmJiB0aGlzLl9jYWxsYWJsZTEgPT09IGNhbGxhYmxlKSB7XG4gICAgdGhpcy5fY29udGV4dDEgPSBudWxsO1xuICAgIHRoaXMuX2NhbGxhYmxlMSA9IG51bGw7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHRoaXMuX2NvbnRleHQyID09PSBjb250ZXh0ICYmIHRoaXMuX2NhbGxhYmxlMiA9PT0gY2FsbGFibGUpIHtcbiAgICB0aGlzLl9jb250ZXh0MiA9IG51bGw7XG4gICAgdGhpcy5fY2FsbGFibGUyID0gbnVsbDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgY2FsbGFibGVzID0gdGhpcy5fY2FsbGFibGVzUmVzdDtcbiAgaWYgKGNhbGxhYmxlcyA9PT0gdW5kZWZpbmVkIHx8IGNhbGxhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGNvbnRleHRzID0gdGhpcy5fY29udGV4dHNSZXN0O1xuICB2YXIgaSA9IDA7XG4gIHdoaWxlICghKGNhbGxhYmxlc1tpXSA9PT0gY2FsbGFibGUgJiYgY29udGV4dHNbaV0gPT09IGNvbnRleHQpICYmIGNhbGxhYmxlcy5sZW5ndGggPiBpKSB7XG4gICAgaSsrO1xuICB9XG4gIGlmIChpID49IGNhbGxhYmxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29udGV4dHMuc3BsaWNlKGksIDEpO1xuICBjYWxsYWJsZXMuc3BsaWNlKGksIDEpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxudmFyIGFycmF5UG9vbDEgPSBbXTtcbnZhciBhcnJheVBvb2wyID0gW107XG52YXIgcG9vbFV0aWxpemF0aW9uID0gW107XG5cbmZ1bmN0aW9uIGNhbGxTdWJzY3JpYmVycyhuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgdmFyIGNvbnRleHQwID0gdGhpcy5fY29udGV4dDA7XG4gIHZhciBjYWxsYWJsZTAgPSB0aGlzLl9jYWxsYWJsZTA7XG4gIHZhciBjb250ZXh0MSA9IHRoaXMuX2NvbnRleHQxO1xuICB2YXIgY2FsbGFibGUxID0gdGhpcy5fY2FsbGFibGUxO1xuICB2YXIgY29udGV4dDIgPSB0aGlzLl9jb250ZXh0MjtcbiAgdmFyIGNhbGxhYmxlMiA9IHRoaXMuX2NhbGxhYmxlMjtcbiAgdmFyIGxlbmd0aCA9IHRoaXMuX2NvbnRleHRzUmVzdCA/IHRoaXMuX2NvbnRleHRzUmVzdC5sZW5ndGggOiAwO1xuICB2YXIgY29udGV4dHNSZXN0ID0gdm9pZCAwO1xuICB2YXIgY2FsbGFibGVzUmVzdCA9IHZvaWQgMDtcbiAgdmFyIHBvb2xJbmRleCA9IHZvaWQgMDtcbiAgdmFyIGkgPSB2b2lkIDA7XG4gIGlmIChsZW5ndGgpIHtcbiAgICBwb29sSW5kZXggPSBwb29sVXRpbGl6YXRpb24ubGVuZ3RoO1xuICAgIHdoaWxlIChwb29sSW5kZXgtLSAmJiBwb29sVXRpbGl6YXRpb25bcG9vbEluZGV4XSkge31cbiAgICBpZiAocG9vbEluZGV4IDwgMCkge1xuICAgICAgcG9vbEluZGV4ID0gcG9vbFV0aWxpemF0aW9uLmxlbmd0aDtcbiAgICAgIGNvbnRleHRzUmVzdCA9IFtdO1xuICAgICAgY2FsbGFibGVzUmVzdCA9IFtdO1xuICAgICAgcG9vbFV0aWxpemF0aW9uLnB1c2godHJ1ZSk7XG4gICAgICBhcnJheVBvb2wxLnB1c2goY29udGV4dHNSZXN0KTtcbiAgICAgIGFycmF5UG9vbDIucHVzaChjYWxsYWJsZXNSZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9vbFV0aWxpemF0aW9uW3Bvb2xJbmRleF0gPSB0cnVlO1xuICAgICAgY29udGV4dHNSZXN0ID0gYXJyYXlQb29sMVtwb29sSW5kZXhdO1xuICAgICAgY2FsbGFibGVzUmVzdCA9IGFycmF5UG9vbDJbcG9vbEluZGV4XTtcbiAgICB9XG5cbiAgICBpID0gbGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnRleHRzUmVzdFtpXSA9IHRoaXMuX2NvbnRleHRzUmVzdFtpXTtcbiAgICAgIGNhbGxhYmxlc1Jlc3RbaV0gPSB0aGlzLl9jYWxsYWJsZXNSZXN0W2ldO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250ZXh0MCkge1xuICAgIGlmIChjYWxsYWJsZTApIHtcbiAgICAgIGNhbGxhYmxlMC5jYWxsKGNvbnRleHQwLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0MChuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH1cbiAgfVxuICBpZiAoY29udGV4dDEpIHtcbiAgICBpZiAoY2FsbGFibGUxKSB7XG4gICAgICBjYWxsYWJsZTEuY2FsbChjb250ZXh0MSwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dDEobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRleHQyKSB7XG4gICAgaWYgKGNhbGxhYmxlMikge1xuICAgICAgY2FsbGFibGUyLmNhbGwoY29udGV4dDIsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQyKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIGlmIChsZW5ndGgpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjYWxsYWJsZSA9IGNhbGxhYmxlc1Jlc3RbaV07XG4gICAgICB2YXIgY29udGV4dCA9IGNvbnRleHRzUmVzdFtpXTtcbiAgICAgIGlmIChjYWxsYWJsZSkge1xuICAgICAgICBjYWxsYWJsZS5jYWxsKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0KG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBjb250ZXh0c1Jlc3RbaV0gPSBudWxsO1xuICAgICAgY2FsbGFibGVzUmVzdFtpXSA9IG51bGw7XG4gICAgfVxuICAgIHBvb2xVdGlsaXphdGlvbltwb29sSW5kZXhdID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzU3Vic2NyaWJlcnMoKSB7XG4gIHJldHVybiAhISh0aGlzLl9jb250ZXh0MCB8fCB0aGlzLl9jb250ZXh0MSB8fCB0aGlzLl9jb250ZXh0MiB8fCB0aGlzLl9jb250ZXh0c1Jlc3QgJiYgdGhpcy5fY29udGV4dHNSZXN0Lmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGhhc1N1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgdmFyIGhhcyA9IHRoaXMuX2NvbnRleHQwID09PSBjb250ZXh0ICYmIHRoaXMuX2NhbGxhYmxlMCA9PT0gY2FsbGFibGUgfHwgdGhpcy5fY29udGV4dDEgPT09IGNvbnRleHQgJiYgdGhpcy5fY2FsbGFibGUxID09PSBjYWxsYWJsZSB8fCB0aGlzLl9jb250ZXh0MiA9PT0gY29udGV4dCAmJiB0aGlzLl9jYWxsYWJsZTIgPT09IGNhbGxhYmxlO1xuICBpZiAoaGFzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGluZGV4ID0gdm9pZCAwO1xuICB2YXIgY29udGV4dHMgPSB0aGlzLl9jb250ZXh0c1Jlc3Q7XG4gIGlmICghY29udGV4dHMgfHwgKGluZGV4ID0gY29udGV4dHMubGVuZ3RoKSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgY2FsbGFibGVzID0gdGhpcy5fY2FsbGFibGVzUmVzdDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAoY29udGV4dHNbaW5kZXhdID09PSBjb250ZXh0ICYmIGNhbGxhYmxlc1tpbmRleF0gPT09IGNhbGxhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlckNvbGxlY3Rpb24oKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnByb3RvdHlwZS5hZGRTdWJzY3JpYmVyID0gYWRkU3Vic2NyaWJlcjtcbiAgICB0YXJnZXQucHJvdG90eXBlLnJlbW92ZVN1YnNjcmliZXIgPSByZW1vdmVTdWJzY3JpYmVyO1xuICAgIHRhcmdldC5wcm90b3R5cGUuY2FsbFN1YnNjcmliZXJzID0gY2FsbFN1YnNjcmliZXJzO1xuICAgIHRhcmdldC5wcm90b3R5cGUuaGFzU3Vic2NyaWJlcnMgPSBoYXNTdWJzY3JpYmVycztcbiAgICB0YXJnZXQucHJvdG90eXBlLmhhc1N1YnNjcmliZXIgPSBoYXNTdWJzY3JpYmVyO1xuICB9O1xufVxuXG5leHBvcnQgdmFyIEV4cHJlc3Npb25PYnNlcnZlciA9IChfZGVjID0gY29ubmVjdGFibGUoKSwgX2RlYzIgPSBzdWJzY3JpYmVyQ29sbGVjdGlvbigpLCBfZGVjKF9jbGFzcyA9IF9kZWMyKF9jbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXhwcmVzc2lvbk9ic2VydmVyKHNjb3BlLCBleHByZXNzaW9uLCBvYnNlcnZlckxvY2F0b3IsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIFxuXG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XG4gICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSBsb29rdXBGdW5jdGlvbnM7XG4gIH1cblxuICBFeHByZXNzaW9uT2JzZXJ2ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLnNjb3BlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbk9ic2VydmVyLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5leHByZXNzaW9uLmFzc2lnbih0aGlzLnNjb3BlLCBuZXdWYWx1ZSk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbk9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGlzLmhhc1N1YnNjcmliZXJzKCkpIHtcbiAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5zY29wZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICAgICAgdGhpcy5leHByZXNzaW9uLmNvbm5lY3QodGhpcywgdGhpcy5zY29wZSk7XG4gICAgfVxuICAgIHRoaXMuYWRkU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgY29udGV4dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAgIF90aGlzLnVuc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgRXhwcmVzc2lvbk9ic2VydmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgaWYgKHRoaXMucmVtb3ZlU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSkgJiYgIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy51bm9ic2VydmUodHJ1ZSk7XG4gICAgICB0aGlzLm9sZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBFeHByZXNzaW9uT2JzZXJ2ZXIucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiBjYWxsKCkge1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLnNjb3BlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5vbGRWYWx1ZTtcbiAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLm9sZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLmNhbGxTdWJzY3JpYmVycyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgdGhpcy5leHByZXNzaW9uLmNvbm5lY3QodGhpcywgdGhpcy5zY29wZSk7XG4gICAgdGhpcy51bm9ic2VydmUoZmFsc2UpO1xuICB9O1xuXG4gIHJldHVybiBFeHByZXNzaW9uT2JzZXJ2ZXI7XG59KCkpIHx8IF9jbGFzcykgfHwgX2NsYXNzKTtcblxuZnVuY3Rpb24gaXNJbmRleChzKSB7XG4gIHJldHVybiArcyA9PT0gcyA+Pj4gMDtcbn1cblxuZnVuY3Rpb24gdG9OdW1iZXIocykge1xuICByZXR1cm4gK3M7XG59XG5cbmZ1bmN0aW9uIG5ld1NwbGljZShpbmRleCwgcmVtb3ZlZCwgYWRkZWRDb3VudCkge1xuICByZXR1cm4ge1xuICAgIGluZGV4OiBpbmRleCxcbiAgICByZW1vdmVkOiByZW1vdmVkLFxuICAgIGFkZGVkQ291bnQ6IGFkZGVkQ291bnRcbiAgfTtcbn1cblxudmFyIEVESVRfTEVBVkUgPSAwO1xudmFyIEVESVRfVVBEQVRFID0gMTtcbnZhciBFRElUX0FERCA9IDI7XG52YXIgRURJVF9ERUxFVEUgPSAzO1xuXG5mdW5jdGlvbiBBcnJheVNwbGljZSgpIHt9XG5cbkFycmF5U3BsaWNlLnByb3RvdHlwZSA9IHtcbiAgY2FsY0VkaXREaXN0YW5jZXM6IGZ1bmN0aW9uIGNhbGNFZGl0RGlzdGFuY2VzKGN1cnJlbnQsIGN1cnJlbnRTdGFydCwgY3VycmVudEVuZCwgb2xkLCBvbGRTdGFydCwgb2xkRW5kKSB7XG4gICAgdmFyIHJvd0NvdW50ID0gb2xkRW5kIC0gb2xkU3RhcnQgKyAxO1xuICAgIHZhciBjb2x1bW5Db3VudCA9IGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQgKyAxO1xuICAgIHZhciBkaXN0YW5jZXMgPSBuZXcgQXJyYXkocm93Q291bnQpO1xuICAgIHZhciBub3J0aCA9IHZvaWQgMDtcbiAgICB2YXIgd2VzdCA9IHZvaWQgMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93Q291bnQ7ICsraSkge1xuICAgICAgZGlzdGFuY2VzW2ldID0gbmV3IEFycmF5KGNvbHVtbkNvdW50KTtcbiAgICAgIGRpc3RhbmNlc1tpXVswXSA9IGk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5Db3VudDsgKytqKSB7XG4gICAgICBkaXN0YW5jZXNbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCByb3dDb3VudDsgKytfaSkge1xuICAgICAgZm9yICh2YXIgX2ogPSAxOyBfaiA8IGNvbHVtbkNvdW50OyArK19qKSB7XG4gICAgICAgIGlmICh0aGlzLmVxdWFscyhjdXJyZW50W2N1cnJlbnRTdGFydCArIF9qIC0gMV0sIG9sZFtvbGRTdGFydCArIF9pIC0gMV0pKSB7XG4gICAgICAgICAgZGlzdGFuY2VzW19pXVtfal0gPSBkaXN0YW5jZXNbX2kgLSAxXVtfaiAtIDFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vcnRoID0gZGlzdGFuY2VzW19pIC0gMV1bX2pdICsgMTtcbiAgICAgICAgICB3ZXN0ID0gZGlzdGFuY2VzW19pXVtfaiAtIDFdICsgMTtcbiAgICAgICAgICBkaXN0YW5jZXNbX2ldW19qXSA9IG5vcnRoIDwgd2VzdCA/IG5vcnRoIDogd2VzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaXN0YW5jZXM7XG4gIH0sXG5cbiAgc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzOiBmdW5jdGlvbiBzcGxpY2VPcGVyYXRpb25zRnJvbUVkaXREaXN0YW5jZXMoZGlzdGFuY2VzKSB7XG4gICAgdmFyIGkgPSBkaXN0YW5jZXMubGVuZ3RoIC0gMTtcbiAgICB2YXIgaiA9IGRpc3RhbmNlc1swXS5sZW5ndGggLSAxO1xuICAgIHZhciBjdXJyZW50ID0gZGlzdGFuY2VzW2ldW2pdO1xuICAgIHZhciBlZGl0cyA9IFtdO1xuICAgIHdoaWxlIChpID4gMCB8fCBqID4gMCkge1xuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgZWRpdHMucHVzaChFRElUX0FERCk7XG4gICAgICAgIGotLTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICBlZGl0cy5wdXNoKEVESVRfREVMRVRFKTtcbiAgICAgICAgaS0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBub3J0aFdlc3QgPSBkaXN0YW5jZXNbaSAtIDFdW2ogLSAxXTtcbiAgICAgIHZhciB3ZXN0ID0gZGlzdGFuY2VzW2kgLSAxXVtqXTtcbiAgICAgIHZhciBub3J0aCA9IGRpc3RhbmNlc1tpXVtqIC0gMV07XG5cbiAgICAgIHZhciBtaW4gPSB2b2lkIDA7XG4gICAgICBpZiAod2VzdCA8IG5vcnRoKSB7XG4gICAgICAgIG1pbiA9IHdlc3QgPCBub3J0aFdlc3QgPyB3ZXN0IDogbm9ydGhXZXN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWluID0gbm9ydGggPCBub3J0aFdlc3QgPyBub3J0aCA6IG5vcnRoV2VzdDtcbiAgICAgIH1cblxuICAgICAgaWYgKG1pbiA9PT0gbm9ydGhXZXN0KSB7XG4gICAgICAgIGlmIChub3J0aFdlc3QgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBlZGl0cy5wdXNoKEVESVRfTEVBVkUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRzLnB1c2goRURJVF9VUERBVEUpO1xuICAgICAgICAgIGN1cnJlbnQgPSBub3J0aFdlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaS0tO1xuICAgICAgICBqLS07XG4gICAgICB9IGVsc2UgaWYgKG1pbiA9PT0gd2VzdCkge1xuICAgICAgICBlZGl0cy5wdXNoKEVESVRfREVMRVRFKTtcbiAgICAgICAgaS0tO1xuICAgICAgICBjdXJyZW50ID0gd2VzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRzLnB1c2goRURJVF9BREQpO1xuICAgICAgICBqLS07XG4gICAgICAgIGN1cnJlbnQgPSBub3J0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlZGl0cy5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIGVkaXRzO1xuICB9LFxuXG4gIGNhbGNTcGxpY2VzOiBmdW5jdGlvbiBjYWxjU3BsaWNlcyhjdXJyZW50LCBjdXJyZW50U3RhcnQsIGN1cnJlbnRFbmQsIG9sZCwgb2xkU3RhcnQsIG9sZEVuZCkge1xuICAgIHZhciBwcmVmaXhDb3VudCA9IDA7XG4gICAgdmFyIHN1ZmZpeENvdW50ID0gMDtcblxuICAgIHZhciBtaW5MZW5ndGggPSBNYXRoLm1pbihjdXJyZW50RW5kIC0gY3VycmVudFN0YXJ0LCBvbGRFbmQgLSBvbGRTdGFydCk7XG4gICAgaWYgKGN1cnJlbnRTdGFydCA9PT0gMCAmJiBvbGRTdGFydCA9PT0gMCkge1xuICAgICAgcHJlZml4Q291bnQgPSB0aGlzLnNoYXJlZFByZWZpeChjdXJyZW50LCBvbGQsIG1pbkxlbmd0aCk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRFbmQgPT09IGN1cnJlbnQubGVuZ3RoICYmIG9sZEVuZCA9PT0gb2xkLmxlbmd0aCkge1xuICAgICAgc3VmZml4Q291bnQgPSB0aGlzLnNoYXJlZFN1ZmZpeChjdXJyZW50LCBvbGQsIG1pbkxlbmd0aCAtIHByZWZpeENvdW50KTtcbiAgICB9XG5cbiAgICBjdXJyZW50U3RhcnQgKz0gcHJlZml4Q291bnQ7XG4gICAgb2xkU3RhcnQgKz0gcHJlZml4Q291bnQ7XG4gICAgY3VycmVudEVuZCAtPSBzdWZmaXhDb3VudDtcbiAgICBvbGRFbmQgLT0gc3VmZml4Q291bnQ7XG5cbiAgICBpZiAoY3VycmVudEVuZCAtIGN1cnJlbnRTdGFydCA9PT0gMCAmJiBvbGRFbmQgLSBvbGRTdGFydCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50U3RhcnQgPT09IGN1cnJlbnRFbmQpIHtcbiAgICAgIHZhciBfc3BsaWNlID0gbmV3U3BsaWNlKGN1cnJlbnRTdGFydCwgW10sIDApO1xuICAgICAgd2hpbGUgKG9sZFN0YXJ0IDwgb2xkRW5kKSB7XG4gICAgICAgIF9zcGxpY2UucmVtb3ZlZC5wdXNoKG9sZFtvbGRTdGFydCsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbX3NwbGljZV07XG4gICAgfSBlbHNlIGlmIChvbGRTdGFydCA9PT0gb2xkRW5kKSB7XG4gICAgICByZXR1cm4gW25ld1NwbGljZShjdXJyZW50U3RhcnQsIFtdLCBjdXJyZW50RW5kIC0gY3VycmVudFN0YXJ0KV07XG4gICAgfVxuXG4gICAgdmFyIG9wcyA9IHRoaXMuc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzKHRoaXMuY2FsY0VkaXREaXN0YW5jZXMoY3VycmVudCwgY3VycmVudFN0YXJ0LCBjdXJyZW50RW5kLCBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpKTtcblxuICAgIHZhciBzcGxpY2UgPSB1bmRlZmluZWQ7XG4gICAgdmFyIHNwbGljZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBjdXJyZW50U3RhcnQ7XG4gICAgdmFyIG9sZEluZGV4ID0gb2xkU3RhcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHN3aXRjaCAob3BzW2ldKSB7XG4gICAgICAgIGNhc2UgRURJVF9MRUFWRTpcbiAgICAgICAgICBpZiAoc3BsaWNlKSB7XG4gICAgICAgICAgICBzcGxpY2VzLnB1c2goc3BsaWNlKTtcbiAgICAgICAgICAgIHNwbGljZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIG9sZEluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRURJVF9VUERBVEU6XG4gICAgICAgICAgaWYgKCFzcGxpY2UpIHtcbiAgICAgICAgICAgIHNwbGljZSA9IG5ld1NwbGljZShpbmRleCwgW10sIDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNwbGljZS5hZGRlZENvdW50Kys7XG4gICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgIHNwbGljZS5yZW1vdmVkLnB1c2gob2xkW29sZEluZGV4XSk7XG4gICAgICAgICAgb2xkSW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRElUX0FERDpcbiAgICAgICAgICBpZiAoIXNwbGljZSkge1xuICAgICAgICAgICAgc3BsaWNlID0gbmV3U3BsaWNlKGluZGV4LCBbXSwgMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3BsaWNlLmFkZGVkQ291bnQrKztcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVESVRfREVMRVRFOlxuICAgICAgICAgIGlmICghc3BsaWNlKSB7XG4gICAgICAgICAgICBzcGxpY2UgPSBuZXdTcGxpY2UoaW5kZXgsIFtdLCAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzcGxpY2UucmVtb3ZlZC5wdXNoKG9sZFtvbGRJbmRleF0pO1xuICAgICAgICAgIG9sZEluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNwbGljZSkge1xuICAgICAgc3BsaWNlcy5wdXNoKHNwbGljZSk7XG4gICAgfVxuICAgIHJldHVybiBzcGxpY2VzO1xuICB9LFxuXG4gIHNoYXJlZFByZWZpeDogZnVuY3Rpb24gc2hhcmVkUHJlZml4KGN1cnJlbnQsIG9sZCwgc2VhcmNoTGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWFyY2hMZW5ndGg7ICsraSkge1xuICAgICAgaWYgKCF0aGlzLmVxdWFscyhjdXJyZW50W2ldLCBvbGRbaV0pKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hMZW5ndGg7XG4gIH0sXG5cbiAgc2hhcmVkU3VmZml4OiBmdW5jdGlvbiBzaGFyZWRTdWZmaXgoY3VycmVudCwgb2xkLCBzZWFyY2hMZW5ndGgpIHtcbiAgICB2YXIgaW5kZXgxID0gY3VycmVudC5sZW5ndGg7XG4gICAgdmFyIGluZGV4MiA9IG9sZC5sZW5ndGg7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB3aGlsZSAoY291bnQgPCBzZWFyY2hMZW5ndGggJiYgdGhpcy5lcXVhbHMoY3VycmVudFstLWluZGV4MV0sIG9sZFstLWluZGV4Ml0pKSB7XG4gICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudDtcbiAgfSxcblxuICBjYWxjdWxhdGVTcGxpY2VzOiBmdW5jdGlvbiBjYWxjdWxhdGVTcGxpY2VzKGN1cnJlbnQsIHByZXZpb3VzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FsY1NwbGljZXMoY3VycmVudCwgMCwgY3VycmVudC5sZW5ndGgsIHByZXZpb3VzLCAwLCBwcmV2aW91cy5sZW5ndGgpO1xuICB9LFxuXG4gIGVxdWFsczogZnVuY3Rpb24gZXF1YWxzKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkge1xuICAgIHJldHVybiBjdXJyZW50VmFsdWUgPT09IHByZXZpb3VzVmFsdWU7XG4gIH1cbn07XG5cbnZhciBhcnJheVNwbGljZSA9IG5ldyBBcnJheVNwbGljZSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsY1NwbGljZXMoY3VycmVudCwgY3VycmVudFN0YXJ0LCBjdXJyZW50RW5kLCBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpIHtcbiAgcmV0dXJuIGFycmF5U3BsaWNlLmNhbGNTcGxpY2VzKGN1cnJlbnQsIGN1cnJlbnRTdGFydCwgY3VycmVudEVuZCwgb2xkLCBvbGRTdGFydCwgb2xkRW5kKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0KHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKSB7XG4gIGlmIChlbmQxIDwgc3RhcnQyIHx8IGVuZDIgPCBzdGFydDEpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBpZiAoZW5kMSA9PT0gc3RhcnQyIHx8IGVuZDIgPT09IHN0YXJ0MSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKHN0YXJ0MSA8IHN0YXJ0Mikge1xuICAgIGlmIChlbmQxIDwgZW5kMikge1xuICAgICAgcmV0dXJuIGVuZDEgLSBzdGFydDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZDIgLSBzdGFydDI7XG4gIH1cblxuICBpZiAoZW5kMiA8IGVuZDEpIHtcbiAgICByZXR1cm4gZW5kMiAtIHN0YXJ0MTtcbiAgfVxuXG4gIHJldHVybiBlbmQxIC0gc3RhcnQxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpY2Uoc3BsaWNlcywgaW5kZXgsIHJlbW92ZWQsIGFkZGVkQ291bnQpIHtcbiAgdmFyIHNwbGljZSA9IG5ld1NwbGljZShpbmRleCwgcmVtb3ZlZCwgYWRkZWRDb3VudCk7XG5cbiAgdmFyIGluc2VydGVkID0gZmFsc2U7XG4gIHZhciBpbnNlcnRpb25PZmZzZXQgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3BsaWNlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjdXJyZW50ID0gc3BsaWNlc1tpXTtcbiAgICBjdXJyZW50LmluZGV4ICs9IGluc2VydGlvbk9mZnNldDtcblxuICAgIGlmIChpbnNlcnRlZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGludGVyc2VjdENvdW50ID0gaW50ZXJzZWN0KHNwbGljZS5pbmRleCwgc3BsaWNlLmluZGV4ICsgc3BsaWNlLnJlbW92ZWQubGVuZ3RoLCBjdXJyZW50LmluZGV4LCBjdXJyZW50LmluZGV4ICsgY3VycmVudC5hZGRlZENvdW50KTtcblxuICAgIGlmIChpbnRlcnNlY3RDb3VudCA+PSAwKSB7XG5cbiAgICAgIHNwbGljZXMuc3BsaWNlKGksIDEpO1xuICAgICAgaS0tO1xuXG4gICAgICBpbnNlcnRpb25PZmZzZXQgLT0gY3VycmVudC5hZGRlZENvdW50IC0gY3VycmVudC5yZW1vdmVkLmxlbmd0aDtcblxuICAgICAgc3BsaWNlLmFkZGVkQ291bnQgKz0gY3VycmVudC5hZGRlZENvdW50IC0gaW50ZXJzZWN0Q291bnQ7XG4gICAgICB2YXIgZGVsZXRlQ291bnQgPSBzcGxpY2UucmVtb3ZlZC5sZW5ndGggKyBjdXJyZW50LnJlbW92ZWQubGVuZ3RoIC0gaW50ZXJzZWN0Q291bnQ7XG5cbiAgICAgIGlmICghc3BsaWNlLmFkZGVkQ291bnQgJiYgIWRlbGV0ZUNvdW50KSB7XG4gICAgICAgIGluc2VydGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjdXJyZW50UmVtb3ZlZCA9IGN1cnJlbnQucmVtb3ZlZDtcblxuICAgICAgICBpZiAoc3BsaWNlLmluZGV4IDwgY3VycmVudC5pbmRleCkge1xuICAgICAgICAgIHZhciBwcmVwZW5kID0gc3BsaWNlLnJlbW92ZWQuc2xpY2UoMCwgY3VycmVudC5pbmRleCAtIHNwbGljZS5pbmRleCk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocHJlcGVuZCwgY3VycmVudFJlbW92ZWQpO1xuICAgICAgICAgIGN1cnJlbnRSZW1vdmVkID0gcHJlcGVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzcGxpY2UuaW5kZXggKyBzcGxpY2UucmVtb3ZlZC5sZW5ndGggPiBjdXJyZW50LmluZGV4ICsgY3VycmVudC5hZGRlZENvdW50KSB7XG4gICAgICAgICAgdmFyIGFwcGVuZCA9IHNwbGljZS5yZW1vdmVkLnNsaWNlKGN1cnJlbnQuaW5kZXggKyBjdXJyZW50LmFkZGVkQ291bnQgLSBzcGxpY2UuaW5kZXgpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGN1cnJlbnRSZW1vdmVkLCBhcHBlbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3BsaWNlLnJlbW92ZWQgPSBjdXJyZW50UmVtb3ZlZDtcbiAgICAgICAgaWYgKGN1cnJlbnQuaW5kZXggPCBzcGxpY2UuaW5kZXgpIHtcbiAgICAgICAgICBzcGxpY2UuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzcGxpY2UuaW5kZXggPCBjdXJyZW50LmluZGV4KSB7XG5cbiAgICAgIGluc2VydGVkID0gdHJ1ZTtcblxuICAgICAgc3BsaWNlcy5zcGxpY2UoaSwgMCwgc3BsaWNlKTtcbiAgICAgIGkrKztcblxuICAgICAgdmFyIG9mZnNldCA9IHNwbGljZS5hZGRlZENvdW50IC0gc3BsaWNlLnJlbW92ZWQubGVuZ3RoO1xuICAgICAgY3VycmVudC5pbmRleCArPSBvZmZzZXQ7XG4gICAgICBpbnNlcnRpb25PZmZzZXQgKz0gb2Zmc2V0O1xuICAgIH1cbiAgfVxuXG4gIGlmICghaW5zZXJ0ZWQpIHtcbiAgICBzcGxpY2VzLnB1c2goc3BsaWNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsU3BsaWNlcyhhcnJheSwgY2hhbmdlUmVjb3Jkcykge1xuICB2YXIgc3BsaWNlcyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlUmVjb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByZWNvcmQgPSBjaGFuZ2VSZWNvcmRzW2ldO1xuICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NwbGljZSc6XG4gICAgICAgIG1lcmdlU3BsaWNlKHNwbGljZXMsIHJlY29yZC5pbmRleCwgcmVjb3JkLnJlbW92ZWQuc2xpY2UoKSwgcmVjb3JkLmFkZGVkQ291bnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICBjYXNlICd1cGRhdGUnOlxuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgaWYgKCFpc0luZGV4KHJlY29yZC5uYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGV4ID0gdG9OdW1iZXIocmVjb3JkLm5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBtZXJnZVNwbGljZShzcGxpY2VzLCBpbmRleCwgW3JlY29yZC5vbGRWYWx1ZV0sIHJlY29yZC50eXBlID09PSAnZGVsZXRlJyA/IDAgOiAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIHJlY29yZCB0eXBlOiAnICsgSlNPTi5zdHJpbmdpZnkocmVjb3JkKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzcGxpY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdEFycmF5U3BsaWNlcyhhcnJheSwgY2hhbmdlUmVjb3Jkcykge1xuICB2YXIgc3BsaWNlcyA9IFtdO1xuXG4gIGNyZWF0ZUluaXRpYWxTcGxpY2VzKGFycmF5LCBjaGFuZ2VSZWNvcmRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzcGxpY2UpIHtcbiAgICBpZiAoc3BsaWNlLmFkZGVkQ291bnQgPT09IDEgJiYgc3BsaWNlLnJlbW92ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAoc3BsaWNlLnJlbW92ZWRbMF0gIT09IGFycmF5W3NwbGljZS5pbmRleF0pIHtcbiAgICAgICAgc3BsaWNlcy5wdXNoKHNwbGljZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzcGxpY2VzID0gc3BsaWNlcy5jb25jYXQoY2FsY1NwbGljZXMoYXJyYXksIHNwbGljZS5pbmRleCwgc3BsaWNlLmluZGV4ICsgc3BsaWNlLmFkZGVkQ291bnQsIHNwbGljZS5yZW1vdmVkLCAwLCBzcGxpY2UucmVtb3ZlZC5sZW5ndGgpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNwbGljZXM7XG59XG5cbmZ1bmN0aW9uIG5ld1JlY29yZCh0eXBlLCBvYmplY3QsIGtleSwgb2xkVmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIG9iamVjdDogb2JqZWN0LFxuICAgIGtleToga2V5LFxuICAgIG9sZFZhbHVlOiBvbGRWYWx1ZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlUmVjb3JkcyhtYXApIHtcbiAgdmFyIGVudHJpZXMgPSBuZXcgQXJyYXkobWFwLnNpemUpO1xuICB2YXIga2V5cyA9IG1hcC5rZXlzKCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGl0ZW0gPSB2b2lkIDA7XG5cbiAgd2hpbGUgKGl0ZW0gPSBrZXlzLm5leHQoKSkge1xuICAgIGlmIChpdGVtLmRvbmUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGVudHJpZXNbaV0gPSBuZXdSZWNvcmQoJ2FkZGVkJywgbWFwLCBpdGVtLnZhbHVlKTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gZW50cmllcztcbn1cblxuZXhwb3J0IHZhciBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIgPSAoX2RlYzMgPSBzdWJzY3JpYmVyQ29sbGVjdGlvbigpLCBfZGVjMyhfY2xhc3MyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIodGFza1F1ZXVlLCBjb2xsZWN0aW9uKSB7XG4gICAgXG5cbiAgICB0aGlzLnRhc2tRdWV1ZSA9IHRhc2tRdWV1ZTtcbiAgICB0aGlzLnF1ZXVlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlUmVjb3JkcyA9IG51bGw7XG4gICAgdGhpcy5vbGRDb2xsZWN0aW9uID0gbnVsbDtcbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xuICAgIHRoaXMubGVuZ3RoUHJvcGVydHlOYW1lID0gY29sbGVjdGlvbiBpbnN0YW5jZW9mIE1hcCB8fCBjb2xsZWN0aW9uIGluc3RhbmNlb2YgU2V0ID8gJ3NpemUnIDogJ2xlbmd0aCc7XG4gIH1cblxuICBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIHRoaXMuYWRkU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSk7XG4gIH07XG5cbiAgTW9kaWZ5Q29sbGVjdGlvbk9ic2VydmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgdGhpcy5yZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgfTtcblxuICBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLmFkZENoYW5nZVJlY29yZCA9IGZ1bmN0aW9uIGFkZENoYW5nZVJlY29yZChjaGFuZ2VSZWNvcmQpIHtcbiAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSAmJiAhdGhpcy5sZW5ndGhPYnNlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VSZWNvcmQudHlwZSA9PT0gJ3NwbGljZScpIHtcbiAgICAgIHZhciBpbmRleCA9IGNoYW5nZVJlY29yZC5pbmRleDtcbiAgICAgIHZhciBhcnJheUxlbmd0aCA9IGNoYW5nZVJlY29yZC5vYmplY3QubGVuZ3RoO1xuICAgICAgaWYgKGluZGV4ID4gYXJyYXlMZW5ndGgpIHtcbiAgICAgICAgaW5kZXggPSBhcnJheUxlbmd0aCAtIGNoYW5nZVJlY29yZC5hZGRlZENvdW50O1xuICAgICAgfSBlbHNlIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgaW5kZXggPSBhcnJheUxlbmd0aCArIGNoYW5nZVJlY29yZC5yZW1vdmVkLmxlbmd0aCArIGluZGV4IC0gY2hhbmdlUmVjb3JkLmFkZGVkQ291bnQ7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIGNoYW5nZVJlY29yZC5pbmRleCA9IGluZGV4O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoYW5nZVJlY29yZHMgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2hhbmdlUmVjb3JkcyA9IFtjaGFuZ2VSZWNvcmRdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoYW5nZVJlY29yZHMucHVzaChjaGFuZ2VSZWNvcmQpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5xdWV1ZWQpIHtcbiAgICAgIHRoaXMucXVldWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudGFza1F1ZXVlLnF1ZXVlTWljcm9UYXNrKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLmZsdXNoQ2hhbmdlUmVjb3JkcyA9IGZ1bmN0aW9uIGZsdXNoQ2hhbmdlUmVjb3JkcygpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VSZWNvcmRzICYmIHRoaXMuY2hhbmdlUmVjb3Jkcy5sZW5ndGggfHwgdGhpcy5vbGRDb2xsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNhbGwoKTtcbiAgICB9XG4gIH07XG5cbiAgTW9kaWZ5Q29sbGVjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KG9sZENvbGxlY3Rpb24pIHtcbiAgICB0aGlzLm9sZENvbGxlY3Rpb24gPSBvbGRDb2xsZWN0aW9uO1xuXG4gICAgaWYgKHRoaXMuaGFzU3Vic2NyaWJlcnMoKSAmJiAhdGhpcy5xdWV1ZWQpIHtcbiAgICAgIHRoaXMucXVldWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudGFza1F1ZXVlLnF1ZXVlTWljcm9UYXNrKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLmdldExlbmd0aE9ic2VydmVyID0gZnVuY3Rpb24gZ2V0TGVuZ3RoT2JzZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoT2JzZXJ2ZXIgfHwgKHRoaXMubGVuZ3RoT2JzZXJ2ZXIgPSBuZXcgQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyKHRoaXMuY29sbGVjdGlvbikpO1xuICB9O1xuXG4gIE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIGNhbGwoKSB7XG4gICAgdmFyIGNoYW5nZVJlY29yZHMgPSB0aGlzLmNoYW5nZVJlY29yZHM7XG4gICAgdmFyIG9sZENvbGxlY3Rpb24gPSB0aGlzLm9sZENvbGxlY3Rpb247XG4gICAgdmFyIHJlY29yZHMgPSB2b2lkIDA7XG5cbiAgICB0aGlzLnF1ZXVlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlUmVjb3JkcyA9IFtdO1xuICAgIHRoaXMub2xkQ29sbGVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5oYXNTdWJzY3JpYmVycygpKSB7XG4gICAgICBpZiAob2xkQ29sbGVjdGlvbikge1xuICAgICAgICBpZiAodGhpcy5jb2xsZWN0aW9uIGluc3RhbmNlb2YgTWFwIHx8IHRoaXMuY29sbGVjdGlvbiBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgIHJlY29yZHMgPSBnZXRDaGFuZ2VSZWNvcmRzKG9sZENvbGxlY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlY29yZHMgPSBjYWxjU3BsaWNlcyh0aGlzLmNvbGxlY3Rpb24sIDAsIHRoaXMuY29sbGVjdGlvbi5sZW5ndGgsIG9sZENvbGxlY3Rpb24sIDAsIG9sZENvbGxlY3Rpb24ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvbiBpbnN0YW5jZW9mIE1hcCB8fCB0aGlzLmNvbGxlY3Rpb24gaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICByZWNvcmRzID0gY2hhbmdlUmVjb3JkcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWNvcmRzID0gcHJvamVjdEFycmF5U3BsaWNlcyh0aGlzLmNvbGxlY3Rpb24sIGNoYW5nZVJlY29yZHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FsbFN1YnNjcmliZXJzKHJlY29yZHMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aE9ic2VydmVyKSB7XG4gICAgICB0aGlzLmxlbmd0aE9ic2VydmVyLmNhbGwodGhpcy5jb2xsZWN0aW9uW3RoaXMubGVuZ3RoUHJvcGVydHlOYW1lXSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXI7XG59KCkpIHx8IF9jbGFzczIpO1xuXG5leHBvcnQgdmFyIENvbGxlY3Rpb25MZW5ndGhPYnNlcnZlciA9IChfZGVjNCA9IHN1YnNjcmliZXJDb2xsZWN0aW9uKCksIF9kZWM0KF9jbGFzczMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbGxlY3Rpb25MZW5ndGhPYnNlcnZlcihjb2xsZWN0aW9uKSB7XG4gICAgXG5cbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xuICAgIHRoaXMubGVuZ3RoUHJvcGVydHlOYW1lID0gY29sbGVjdGlvbiBpbnN0YW5jZW9mIE1hcCB8fCBjb2xsZWN0aW9uIGluc3RhbmNlb2YgU2V0ID8gJ3NpemUnIDogJ2xlbmd0aCc7XG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb2xsZWN0aW9uW3RoaXMubGVuZ3RoUHJvcGVydHlOYW1lXTtcbiAgfVxuXG4gIENvbGxlY3Rpb25MZW5ndGhPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uW3RoaXMubGVuZ3RoUHJvcGVydHlOYW1lXTtcbiAgfTtcblxuICBDb2xsZWN0aW9uTGVuZ3RoT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICB0aGlzLmNvbGxlY3Rpb25bdGhpcy5sZW5ndGhQcm9wZXJ0eU5hbWVdID0gbmV3VmFsdWU7XG4gIH07XG5cbiAgQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICB0aGlzLmFkZFN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpO1xuICB9O1xuXG4gIENvbGxlY3Rpb25MZW5ndGhPYnNlcnZlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIHRoaXMucmVtb3ZlU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSk7XG4gIH07XG5cbiAgQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gY2FsbChuZXdWYWx1ZSkge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlO1xuICAgIHRoaXMuY2FsbFN1YnNjcmliZXJzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWx1ZTtcbiAgfTtcblxuICByZXR1cm4gQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyO1xufSgpKSB8fCBfY2xhc3MzKTtcblxudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG52YXIgcG9wID0gYXJyYXlQcm90by5wb3A7XG52YXIgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcbnZhciByZXZlcnNlID0gYXJyYXlQcm90by5yZXZlcnNlO1xudmFyIHNoaWZ0ID0gYXJyYXlQcm90by5zaGlmdDtcbnZhciBzb3J0ID0gYXJyYXlQcm90by5zb3J0O1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xudmFyIHVuc2hpZnQgPSBhcnJheVByb3RvLnVuc2hpZnQ7XG5cbmlmIChhcnJheVByb3RvLl9fYXVfcGF0Y2hlZF9fKSB7XG4gIExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCdhcnJheS1vYnNlcnZhdGlvbicpLndhcm4oJ0RldGVjdGVkIDJuZCBhdHRlbXB0IG9mIHBhdGNoaW5nIGFycmF5IGZyb20gQXVyZWxpYSBiaW5kaW5nLicgKyAnIFRoaXMgaXMgcHJvYmFibHkgY2F1c2VkIGJ5IGRlcGVuZGVuY3kgbWlzbWF0Y2ggYmV0d2VlbiBjb3JlIG1vZHVsZXMgYW5kIGEgM3JkIHBhcnR5IHBsdWdpbi4nICsgJyBQbGVhc2Ugc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hdXJlbGlhL2NsaS9wdWxsLzkwNiBpZiB5b3UgYXJlIHVzaW5nIHdlYnBhY2suJyk7XG59IGVsc2Uge1xuICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGFycmF5UHJvdG8sICdfX2F1X3BhdGNoZWRfXycsIHsgdmFsdWU6IDEgfSk7XG4gIGFycmF5UHJvdG8ucG9wID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBub3RFbXB0eSA9IHRoaXMubGVuZ3RoID4gMDtcbiAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHBvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChub3RFbXB0eSAmJiB0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXy5hZGRDaGFuZ2VSZWNvcmQoe1xuICAgICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgb2JqZWN0OiB0aGlzLFxuICAgICAgICBuYW1lOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgb2xkVmFsdWU6IG1ldGhvZENhbGxSZXN1bHRcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kQ2FsbFJlc3VsdDtcbiAgfTtcblxuICBhcnJheVByb3RvLnB1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSBwdXNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHRoaXMuX19hcnJheV9vYnNlcnZlcl9fICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fLmFkZENoYW5nZVJlY29yZCh7XG4gICAgICAgIHR5cGU6ICdzcGxpY2UnLFxuICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgIGluZGV4OiB0aGlzLmxlbmd0aCAtIGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICBhZGRlZENvdW50OiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gIH07XG5cbiAgYXJyYXlQcm90by5yZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvbGRBcnJheSA9IHZvaWQgMDtcbiAgICBpZiAodGhpcy5fX2FycmF5X29ic2VydmVyX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fX2FycmF5X29ic2VydmVyX18uZmx1c2hDaGFuZ2VSZWNvcmRzKCk7XG4gICAgICBvbGRBcnJheSA9IHRoaXMuc2xpY2UoKTtcbiAgICB9XG4gICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSByZXZlcnNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHRoaXMuX19hcnJheV9vYnNlcnZlcl9fICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fLnJlc2V0KG9sZEFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gIH07XG5cbiAgYXJyYXlQcm90by5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbm90RW1wdHkgPSB0aGlzLmxlbmd0aCA+IDA7XG4gICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSBzaGlmdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChub3RFbXB0eSAmJiB0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXy5hZGRDaGFuZ2VSZWNvcmQoe1xuICAgICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgb2JqZWN0OiB0aGlzLFxuICAgICAgICBuYW1lOiAwLFxuICAgICAgICBvbGRWYWx1ZTogbWV0aG9kQ2FsbFJlc3VsdFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXRob2RDYWxsUmVzdWx0O1xuICB9O1xuXG4gIGFycmF5UHJvdG8uc29ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2xkQXJyYXkgPSB2b2lkIDA7XG4gICAgaWYgKHRoaXMuX19hcnJheV9vYnNlcnZlcl9fICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fLmZsdXNoQ2hhbmdlUmVjb3JkcygpO1xuICAgICAgb2xkQXJyYXkgPSB0aGlzLnNsaWNlKCk7XG4gICAgfVxuICAgIHZhciBtZXRob2RDYWxsUmVzdWx0ID0gc29ydC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9fYXJyYXlfb2JzZXJ2ZXJfXy5yZXNldChvbGRBcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBtZXRob2RDYWxsUmVzdWx0O1xuICB9O1xuXG4gIGFycmF5UHJvdG8uc3BsaWNlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtZXRob2RDYWxsUmVzdWx0ID0gc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHRoaXMuX19hcnJheV9vYnNlcnZlcl9fICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX19hcnJheV9vYnNlcnZlcl9fLmFkZENoYW5nZVJlY29yZCh7XG4gICAgICAgIHR5cGU6ICdzcGxpY2UnLFxuICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgIGluZGV4OiArYXJndW1lbnRzWzBdLFxuICAgICAgICByZW1vdmVkOiBtZXRob2RDYWxsUmVzdWx0LFxuICAgICAgICBhZGRlZENvdW50OiBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50cy5sZW5ndGggLSAyIDogMFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXRob2RDYWxsUmVzdWx0O1xuICB9O1xuXG4gIGFycmF5UHJvdG8udW5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHVuc2hpZnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodGhpcy5fX2FycmF5X29ic2VydmVyX18gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fX2FycmF5X29ic2VydmVyX18uYWRkQ2hhbmdlUmVjb3JkKHtcbiAgICAgICAgdHlwZTogJ3NwbGljZScsXG4gICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICBhZGRlZENvdW50OiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9nZXRBcnJheU9ic2VydmVyKHRhc2tRdWV1ZSwgYXJyYXkpIHtcbiAgcmV0dXJuIE1vZGlmeUFycmF5T2JzZXJ2ZXIuZm9yKHRhc2tRdWV1ZSwgYXJyYXkpO1xufVxuXG52YXIgTW9kaWZ5QXJyYXlPYnNlcnZlciA9IGZ1bmN0aW9uIChfTW9kaWZ5Q29sbGVjdGlvbk9ic2UpIHtcbiAgX2luaGVyaXRzKE1vZGlmeUFycmF5T2JzZXJ2ZXIsIF9Nb2RpZnlDb2xsZWN0aW9uT2JzZSk7XG5cbiAgZnVuY3Rpb24gTW9kaWZ5QXJyYXlPYnNlcnZlcih0YXNrUXVldWUsIGFycmF5KSB7XG4gICAgXG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX01vZGlmeUNvbGxlY3Rpb25PYnNlLmNhbGwodGhpcywgdGFza1F1ZXVlLCBhcnJheSkpO1xuICB9XG5cbiAgTW9kaWZ5QXJyYXlPYnNlcnZlci5mb3IgPSBmdW5jdGlvbiBfZm9yKHRhc2tRdWV1ZSwgYXJyYXkpIHtcbiAgICBpZiAoISgnX19hcnJheV9vYnNlcnZlcl9fJyBpbiBhcnJheSkpIHtcbiAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoYXJyYXksICdfX2FycmF5X29ic2VydmVyX18nLCB7XG4gICAgICAgIHZhbHVlOiBNb2RpZnlBcnJheU9ic2VydmVyLmNyZWF0ZSh0YXNrUXVldWUsIGFycmF5KSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXkuX19hcnJheV9vYnNlcnZlcl9fO1xuICB9O1xuXG4gIE1vZGlmeUFycmF5T2JzZXJ2ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRhc2tRdWV1ZSwgYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE1vZGlmeUFycmF5T2JzZXJ2ZXIodGFza1F1ZXVlLCBhcnJheSk7XG4gIH07XG5cbiAgcmV0dXJuIE1vZGlmeUFycmF5T2JzZXJ2ZXI7XG59KE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlcik7XG5cbmV4cG9ydCB2YXIgRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXhwcmVzc2lvbigpIHtcbiAgICBcblxuICAgIHRoaXMuaXNBc3NpZ25hYmxlID0gZmFsc2U7XG4gIH1cblxuICBFeHByZXNzaW9uLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMsIGFyZ3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpbmRpbmcgZXhwcmVzc2lvbiBcIicgKyB0aGlzICsgJ1wiIGNhbm5vdCBiZSBldmFsdWF0ZWQuJyk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbi5wcm90b3R5cGUuYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHNjb3BlLCB2YWx1ZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCaW5kaW5nIGV4cHJlc3Npb24gXCInICsgdGhpcyArICdcIiBjYW5ub3QgYmUgYXNzaWduZWQgdG8uJyk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdHlwZW9mIEZFQVRVUkVfTk9fVU5QQVJTRVIgPT09ICd1bmRlZmluZWQnID8gX1VucGFyc2VyLnVucGFyc2UodGhpcykgOiBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfTtcblxuICByZXR1cm4gRXhwcmVzc2lvbjtcbn0oKTtcblxuZXhwb3J0IHZhciBCaW5kaW5nQmVoYXZpb3IgPSBmdW5jdGlvbiAoX0V4cHJlc3Npb24pIHtcbiAgX2luaGVyaXRzKEJpbmRpbmdCZWhhdmlvciwgX0V4cHJlc3Npb24pO1xuXG4gIGZ1bmN0aW9uIEJpbmRpbmdCZWhhdmlvcihleHByZXNzaW9uLCBuYW1lLCBhcmdzKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24uY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgX3RoaXMzLm5hbWUgPSBuYW1lO1xuICAgIF90aGlzMy5hcmdzID0gYXJncztcbiAgICByZXR1cm4gX3RoaXMzO1xuICB9XG5cbiAgQmluZGluZ0JlaGF2aW9yLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIEJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHNjb3BlLCB2YWx1ZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5hc3NpZ24oc2NvcGUsIHZhbHVlLCBsb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIEJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdEJpbmRpbmdCZWhhdmlvcih0aGlzKTtcbiAgfTtcblxuICBCaW5kaW5nQmVoYXZpb3IucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdGhpcy5leHByZXNzaW9uLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICB9O1xuXG4gIEJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQoYmluZGluZywgc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIGlmICh0aGlzLmV4cHJlc3Npb24uZXhwcmVzc2lvbiAmJiB0aGlzLmV4cHJlc3Npb24uYmluZCkge1xuICAgICAgdGhpcy5leHByZXNzaW9uLmJpbmQoYmluZGluZywgc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgfVxuICAgIHZhciBiZWhhdmlvciA9IGxvb2t1cEZ1bmN0aW9ucy5iaW5kaW5nQmVoYXZpb3JzKHRoaXMubmFtZSk7XG4gICAgaWYgKCFiZWhhdmlvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBCaW5kaW5nQmVoYXZpb3IgbmFtZWQgXCInICsgdGhpcy5uYW1lICsgJ1wiIHdhcyBmb3VuZCEnKTtcbiAgICB9XG4gICAgdmFyIGJlaGF2aW9yS2V5ID0gJ2JlaGF2aW9yLScgKyB0aGlzLm5hbWU7XG4gICAgaWYgKGJpbmRpbmdbYmVoYXZpb3JLZXldKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgYmluZGluZyBiZWhhdmlvciBuYW1lZCBcIicgKyB0aGlzLm5hbWUgKyAnXCIgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIHRvIFwiJyArIHRoaXMuZXhwcmVzc2lvbiArICdcIicpO1xuICAgIH1cbiAgICBiaW5kaW5nW2JlaGF2aW9yS2V5XSA9IGJlaGF2aW9yO1xuICAgIGJlaGF2aW9yLmJpbmQuYXBwbHkoYmVoYXZpb3IsIFtiaW5kaW5nLCBzY29wZV0uY29uY2F0KGV2YWxMaXN0KHNjb3BlLCB0aGlzLmFyZ3MsIGJpbmRpbmcubG9va3VwRnVuY3Rpb25zKSkpO1xuICB9O1xuXG4gIEJpbmRpbmdCZWhhdmlvci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdmFyIGJlaGF2aW9yS2V5ID0gJ2JlaGF2aW9yLScgKyB0aGlzLm5hbWU7XG4gICAgYmluZGluZ1tiZWhhdmlvcktleV0udW5iaW5kKGJpbmRpbmcsIHNjb3BlKTtcbiAgICBiaW5kaW5nW2JlaGF2aW9yS2V5XSA9IG51bGw7XG4gICAgaWYgKHRoaXMuZXhwcmVzc2lvbi5leHByZXNzaW9uICYmIHRoaXMuZXhwcmVzc2lvbi51bmJpbmQpIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbi51bmJpbmQoYmluZGluZywgc2NvcGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQmluZGluZ0JlaGF2aW9yO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBWYWx1ZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjIpIHtcbiAgX2luaGVyaXRzKFZhbHVlQ29udmVydGVyLCBfRXhwcmVzc2lvbjIpO1xuXG4gIGZ1bmN0aW9uIFZhbHVlQ29udmVydGVyKGV4cHJlc3Npb24sIG5hbWUsIGFyZ3MpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczQgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjIuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczQuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgX3RoaXM0Lm5hbWUgPSBuYW1lO1xuICAgIF90aGlzNC5hcmdzID0gYXJncztcbiAgICBfdGhpczQuYWxsQXJncyA9IFtleHByZXNzaW9uXS5jb25jYXQoYXJncyk7XG4gICAgcmV0dXJuIF90aGlzNDtcbiAgfVxuXG4gIFZhbHVlQ29udmVydGVyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICB2YXIgY29udmVydGVyID0gbG9va3VwRnVuY3Rpb25zLnZhbHVlQ29udmVydGVycyh0aGlzLm5hbWUpO1xuICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFZhbHVlQ29udmVydGVyIG5hbWVkIFwiJyArIHRoaXMubmFtZSArICdcIiB3YXMgZm91bmQhJyk7XG4gICAgfVxuXG4gICAgaWYgKCd0b1ZpZXcnIGluIGNvbnZlcnRlcikge1xuICAgICAgcmV0dXJuIGNvbnZlcnRlci50b1ZpZXcuYXBwbHkoY29udmVydGVyLCBldmFsTGlzdChzY29wZSwgdGhpcy5hbGxBcmdzLCBsb29rdXBGdW5jdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hbGxBcmdzWzBdLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIFZhbHVlQ29udmVydGVyLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24oc2NvcGUsIHZhbHVlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICB2YXIgY29udmVydGVyID0gbG9va3VwRnVuY3Rpb25zLnZhbHVlQ29udmVydGVycyh0aGlzLm5hbWUpO1xuICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFZhbHVlQ29udmVydGVyIG5hbWVkIFwiJyArIHRoaXMubmFtZSArICdcIiB3YXMgZm91bmQhJyk7XG4gICAgfVxuXG4gICAgaWYgKCdmcm9tVmlldycgaW4gY29udmVydGVyKSB7XG4gICAgICB2YWx1ZSA9IGNvbnZlcnRlci5mcm9tVmlldy5hcHBseShjb252ZXJ0ZXIsIFt2YWx1ZV0uY29uY2F0KGV2YWxMaXN0KHNjb3BlLCB0aGlzLmFyZ3MsIGxvb2t1cEZ1bmN0aW9ucykpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hbGxBcmdzWzBdLmFzc2lnbihzY29wZSwgdmFsdWUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgVmFsdWVDb252ZXJ0ZXIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRWYWx1ZUNvbnZlcnRlcih0aGlzKTtcbiAgfTtcblxuICBWYWx1ZUNvbnZlcnRlci5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB2YXIgZXhwcmVzc2lvbnMgPSB0aGlzLmFsbEFyZ3M7XG4gICAgdmFyIGkgPSBleHByZXNzaW9ucy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgZXhwcmVzc2lvbnNbaV0uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgfVxuICAgIHZhciBjb252ZXJ0ZXIgPSBiaW5kaW5nLmxvb2t1cEZ1bmN0aW9ucy52YWx1ZUNvbnZlcnRlcnModGhpcy5uYW1lKTtcbiAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBWYWx1ZUNvbnZlcnRlciBuYW1lZCBcIicgKyB0aGlzLm5hbWUgKyAnXCIgd2FzIGZvdW5kIScpO1xuICAgIH1cbiAgICB2YXIgc2lnbmFscyA9IGNvbnZlcnRlci5zaWduYWxzO1xuICAgIGlmIChzaWduYWxzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaSA9IHNpZ25hbHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbm5lY3RCaW5kaW5nVG9TaWduYWwoYmluZGluZywgc2lnbmFsc1tpXSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBWYWx1ZUNvbnZlcnRlcjtcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgQXNzaWduID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMykge1xuICBfaW5oZXJpdHMoQXNzaWduLCBfRXhwcmVzc2lvbjMpO1xuXG4gIGZ1bmN0aW9uIEFzc2lnbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXM1ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24zLmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXM1LnRhcmdldCA9IHRhcmdldDtcbiAgICBfdGhpczUudmFsdWUgPSB2YWx1ZTtcbiAgICBfdGhpczUuaXNBc3NpZ25hYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gX3RoaXM1O1xuICB9XG5cbiAgQXNzaWduLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXQuYXNzaWduKHNjb3BlLCB0aGlzLnZhbHVlLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpKTtcbiAgfTtcblxuICBBc3NpZ24ucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXN0b3IpIHtcbiAgICB2aXN0b3IudmlzaXRBc3NpZ24odGhpcyk7XG4gIH07XG5cbiAgQXNzaWduLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge307XG5cbiAgQXNzaWduLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24oc2NvcGUsIHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZS5hc3NpZ24oc2NvcGUsIHZhbHVlKTtcbiAgICB0aGlzLnRhcmdldC5hc3NpZ24oc2NvcGUsIHZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4gQXNzaWduO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBDb25kaXRpb25hbCA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjQpIHtcbiAgX2luaGVyaXRzKENvbmRpdGlvbmFsLCBfRXhwcmVzc2lvbjQpO1xuXG4gIGZ1bmN0aW9uIENvbmRpdGlvbmFsKGNvbmRpdGlvbiwgeWVzLCBubykge1xuICAgIFxuXG4gICAgdmFyIF90aGlzNiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uNC5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzNi5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgX3RoaXM2LnllcyA9IHllcztcbiAgICBfdGhpczYubm8gPSBubztcbiAgICByZXR1cm4gX3RoaXM2O1xuICB9XG5cbiAgQ29uZGl0aW9uYWwucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHJldHVybiAhIXRoaXMuY29uZGl0aW9uLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpID8gdGhpcy55ZXMuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykgOiB0aGlzLm5vLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIENvbmRpdGlvbmFsLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uZGl0aW9uYWwodGhpcyk7XG4gIH07XG5cbiAgQ29uZGl0aW9uYWwucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdGhpcy5jb25kaXRpb24uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgaWYgKHRoaXMuY29uZGl0aW9uLmV2YWx1YXRlKHNjb3BlKSkge1xuICAgICAgdGhpcy55ZXMuY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm8uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDb25kaXRpb25hbDtcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgQWNjZXNzVGhpcyA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjUpIHtcbiAgX2luaGVyaXRzKEFjY2Vzc1RoaXMsIF9FeHByZXNzaW9uNSk7XG5cbiAgZnVuY3Rpb24gQWNjZXNzVGhpcyhhbmNlc3Rvcikge1xuICAgIFxuXG4gICAgdmFyIF90aGlzNyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uNS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzNy5hbmNlc3RvciA9IGFuY2VzdG9yO1xuICAgIHJldHVybiBfdGhpczc7XG4gIH1cblxuICBBY2Nlc3NUaGlzLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICB2YXIgb2MgPSBzY29wZS5vdmVycmlkZUNvbnRleHQ7XG4gICAgdmFyIGkgPSB0aGlzLmFuY2VzdG9yO1xuICAgIHdoaWxlIChpLS0gJiYgb2MpIHtcbiAgICAgIG9jID0gb2MucGFyZW50T3ZlcnJpZGVDb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gaSA8IDEgJiYgb2MgPyBvYy5iaW5kaW5nQ29udGV4dCA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBBY2Nlc3NUaGlzLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QWNjZXNzVGhpcyh0aGlzKTtcbiAgfTtcblxuICBBY2Nlc3NUaGlzLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge307XG5cbiAgcmV0dXJuIEFjY2Vzc1RoaXM7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIEFjY2Vzc1Njb3BlID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uNikge1xuICBfaW5oZXJpdHMoQWNjZXNzU2NvcGUsIF9FeHByZXNzaW9uNik7XG5cbiAgZnVuY3Rpb24gQWNjZXNzU2NvcGUobmFtZSwgYW5jZXN0b3IpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczggPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjYuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczgubmFtZSA9IG5hbWU7XG4gICAgX3RoaXM4LmFuY2VzdG9yID0gYW5jZXN0b3I7XG4gICAgX3RoaXM4LmlzQXNzaWduYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIF90aGlzODtcbiAgfVxuXG4gIEFjY2Vzc1Njb3BlLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3IodGhpcy5uYW1lLCBzY29wZSwgdGhpcy5hbmNlc3Rvcik7XG4gICAgcmV0dXJuIGNvbnRleHRbdGhpcy5uYW1lXTtcbiAgfTtcblxuICBBY2Nlc3NTY29wZS5wcm90b3R5cGUuYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHNjb3BlLCB2YWx1ZSkge1xuICAgIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvcih0aGlzLm5hbWUsIHNjb3BlLCB0aGlzLmFuY2VzdG9yKTtcbiAgICByZXR1cm4gY29udGV4dCA/IGNvbnRleHRbdGhpcy5uYW1lXSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIEFjY2Vzc1Njb3BlLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QWNjZXNzU2NvcGUodGhpcyk7XG4gIH07XG5cbiAgQWNjZXNzU2NvcGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yKHRoaXMubmFtZSwgc2NvcGUsIHRoaXMuYW5jZXN0b3IpO1xuICAgIGJpbmRpbmcub2JzZXJ2ZVByb3BlcnR5KGNvbnRleHQsIHRoaXMubmFtZSk7XG4gIH07XG5cbiAgcmV0dXJuIEFjY2Vzc1Njb3BlO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBBY2Nlc3NNZW1iZXIgPSBmdW5jdGlvbiAoX0V4cHJlc3Npb243KSB7XG4gIF9pbmhlcml0cyhBY2Nlc3NNZW1iZXIsIF9FeHByZXNzaW9uNyk7XG5cbiAgZnVuY3Rpb24gQWNjZXNzTWVtYmVyKG9iamVjdCwgbmFtZSkge1xuICAgIFxuXG4gICAgdmFyIF90aGlzOSA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uNy5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzOS5vYmplY3QgPSBvYmplY3Q7XG4gICAgX3RoaXM5Lm5hbWUgPSBuYW1lO1xuICAgIF90aGlzOS5pc0Fzc2lnbmFibGUgPSB0cnVlO1xuICAgIHJldHVybiBfdGhpczk7XG4gIH1cblxuICBBY2Nlc3NNZW1iZXIucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHZhciBpbnN0YW5jZSA9IHRoaXMub2JqZWN0LmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgIHJldHVybiBpbnN0YW5jZSA9PT0gbnVsbCB8fCBpbnN0YW5jZSA9PT0gdW5kZWZpbmVkID8gaW5zdGFuY2UgOiBpbnN0YW5jZVt0aGlzLm5hbWVdO1xuICB9O1xuXG4gIEFjY2Vzc01lbWJlci5wcm90b3R5cGUuYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHNjb3BlLCB2YWx1ZSkge1xuICAgIHZhciBpbnN0YW5jZSA9IHRoaXMub2JqZWN0LmV2YWx1YXRlKHNjb3BlKTtcblxuICAgIGlmIChpbnN0YW5jZSA9PT0gbnVsbCB8fCBpbnN0YW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbnN0YW5jZSA9IHt9O1xuICAgICAgdGhpcy5vYmplY3QuYXNzaWduKHNjb3BlLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VbdGhpcy5uYW1lXSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICBBY2Nlc3NNZW1iZXIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRBY2Nlc3NNZW1iZXIodGhpcyk7XG4gIH07XG5cbiAgQWNjZXNzTWVtYmVyLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHRoaXMub2JqZWN0LmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIHZhciBvYmogPSB0aGlzLm9iamVjdC5ldmFsdWF0ZShzY29wZSk7XG4gICAgaWYgKG9iaikge1xuICAgICAgYmluZGluZy5vYnNlcnZlUHJvcGVydHkob2JqLCB0aGlzLm5hbWUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQWNjZXNzTWVtYmVyO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBBY2Nlc3NLZXllZCA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjgpIHtcbiAgX2luaGVyaXRzKEFjY2Vzc0tleWVkLCBfRXhwcmVzc2lvbjgpO1xuXG4gIGZ1bmN0aW9uIEFjY2Vzc0tleWVkKG9iamVjdCwga2V5KSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMxMCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uOC5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTAub2JqZWN0ID0gb2JqZWN0O1xuICAgIF90aGlzMTAua2V5ID0ga2V5O1xuICAgIF90aGlzMTAuaXNBc3NpZ25hYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gX3RoaXMxMDtcbiAgfVxuXG4gIEFjY2Vzc0tleWVkLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLm9iamVjdC5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICB2YXIgbG9va3VwID0gdGhpcy5rZXkuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgcmV0dXJuIGdldEtleWVkKGluc3RhbmNlLCBsb29rdXApO1xuICB9O1xuXG4gIEFjY2Vzc0tleWVkLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24oc2NvcGUsIHZhbHVlKSB7XG4gICAgdmFyIGluc3RhbmNlID0gdGhpcy5vYmplY3QuZXZhbHVhdGUoc2NvcGUpO1xuICAgIHZhciBsb29rdXAgPSB0aGlzLmtleS5ldmFsdWF0ZShzY29wZSk7XG4gICAgcmV0dXJuIHNldEtleWVkKGluc3RhbmNlLCBsb29rdXAsIHZhbHVlKTtcbiAgfTtcblxuICBBY2Nlc3NLZXllZC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdEFjY2Vzc0tleWVkKHRoaXMpO1xuICB9O1xuXG4gIEFjY2Vzc0tleWVkLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHRoaXMub2JqZWN0LmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIHZhciBvYmogPSB0aGlzLm9iamVjdC5ldmFsdWF0ZShzY29wZSk7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgdGhpcy5rZXkuY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgICB2YXIga2V5ID0gdGhpcy5rZXkuZXZhbHVhdGUoc2NvcGUpO1xuXG4gICAgICBpZiAoa2V5ICE9PSBudWxsICYmIGtleSAhPT0gdW5kZWZpbmVkICYmICEoQXJyYXkuaXNBcnJheShvYmopICYmIHR5cGVvZiBrZXkgPT09ICdudW1iZXInKSkge1xuICAgICAgICBiaW5kaW5nLm9ic2VydmVQcm9wZXJ0eShvYmosIGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBBY2Nlc3NLZXllZDtcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgQ2FsbFNjb3BlID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uOSkge1xuICBfaW5oZXJpdHMoQ2FsbFNjb3BlLCBfRXhwcmVzc2lvbjkpO1xuXG4gIGZ1bmN0aW9uIENhbGxTY29wZShuYW1lLCBhcmdzLCBhbmNlc3Rvcikge1xuICAgIFxuXG4gICAgdmFyIF90aGlzMTEgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjkuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczExLm5hbWUgPSBuYW1lO1xuICAgIF90aGlzMTEuYXJncyA9IGFyZ3M7XG4gICAgX3RoaXMxMS5hbmNlc3RvciA9IGFuY2VzdG9yO1xuICAgIHJldHVybiBfdGhpczExO1xuICB9XG5cbiAgQ2FsbFNjb3BlLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMsIG11c3RFdmFsdWF0ZSkge1xuICAgIHZhciBhcmdzID0gZXZhbExpc3Qoc2NvcGUsIHRoaXMuYXJncywgbG9va3VwRnVuY3Rpb25zKTtcbiAgICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3IodGhpcy5uYW1lLCBzY29wZSwgdGhpcy5hbmNlc3Rvcik7XG4gICAgdmFyIGZ1bmMgPSBnZXRGdW5jdGlvbihjb250ZXh0LCB0aGlzLm5hbWUsIG11c3RFdmFsdWF0ZSk7XG4gICAgaWYgKGZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIENhbGxTY29wZS5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdENhbGxTY29wZSh0aGlzKTtcbiAgfTtcblxuICBDYWxsU2NvcGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgdmFyIGkgPSBhcmdzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBhcmdzW2ldLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ2FsbFNjb3BlO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBDYWxsTWVtYmVyID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTApIHtcbiAgX2luaGVyaXRzKENhbGxNZW1iZXIsIF9FeHByZXNzaW9uMTApO1xuXG4gIGZ1bmN0aW9uIENhbGxNZW1iZXIob2JqZWN0LCBuYW1lLCBhcmdzKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMxMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uMTAuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczEyLm9iamVjdCA9IG9iamVjdDtcbiAgICBfdGhpczEyLm5hbWUgPSBuYW1lO1xuICAgIF90aGlzMTIuYXJncyA9IGFyZ3M7XG4gICAgcmV0dXJuIF90aGlzMTI7XG4gIH1cblxuICBDYWxsTWVtYmVyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMsIG11c3RFdmFsdWF0ZSkge1xuICAgIHZhciBpbnN0YW5jZSA9IHRoaXMub2JqZWN0LmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgIHZhciBhcmdzID0gZXZhbExpc3Qoc2NvcGUsIHRoaXMuYXJncywgbG9va3VwRnVuY3Rpb25zKTtcbiAgICB2YXIgZnVuYyA9IGdldEZ1bmN0aW9uKGluc3RhbmNlLCB0aGlzLm5hbWUsIG11c3RFdmFsdWF0ZSk7XG4gICAgaWYgKGZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGluc3RhbmNlLCBhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcblxuICBDYWxsTWVtYmVyLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q2FsbE1lbWJlcih0aGlzKTtcbiAgfTtcblxuICBDYWxsTWVtYmVyLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHRoaXMub2JqZWN0LmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIHZhciBvYmogPSB0aGlzLm9iamVjdC5ldmFsdWF0ZShzY29wZSk7XG4gICAgaWYgKGdldEZ1bmN0aW9uKG9iaiwgdGhpcy5uYW1lLCBmYWxzZSkpIHtcbiAgICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgICAgdmFyIGkgPSBhcmdzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgYXJnc1tpXS5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENhbGxNZW1iZXI7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIENhbGxGdW5jdGlvbiA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjExKSB7XG4gIF9pbmhlcml0cyhDYWxsRnVuY3Rpb24sIF9FeHByZXNzaW9uMTEpO1xuXG4gIGZ1bmN0aW9uIENhbGxGdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMxMyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uMTEuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczEzLmZ1bmMgPSBmdW5jO1xuICAgIF90aGlzMTMuYXJncyA9IGFyZ3M7XG4gICAgcmV0dXJuIF90aGlzMTM7XG4gIH1cblxuICBDYWxsRnVuY3Rpb24ucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucywgbXVzdEV2YWx1YXRlKSB7XG4gICAgdmFyIGZ1bmMgPSB0aGlzLmZ1bmMuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBldmFsTGlzdChzY29wZSwgdGhpcy5hcmdzLCBsb29rdXBGdW5jdGlvbnMpKTtcbiAgICB9XG4gICAgaWYgKCFtdXN0RXZhbHVhdGUgJiYgKGZ1bmMgPT09IG51bGwgfHwgZnVuYyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZnVuYyArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgfTtcblxuICBDYWxsRnVuY3Rpb24ucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDYWxsRnVuY3Rpb24odGhpcyk7XG4gIH07XG5cbiAgQ2FsbEZ1bmN0aW9uLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHRoaXMuZnVuYy5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICB2YXIgZnVuYyA9IHRoaXMuZnVuYy5ldmFsdWF0ZShzY29wZSk7XG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICAgIHZhciBpID0gYXJncy5sZW5ndGg7XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGFyZ3NbaV0uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDYWxsRnVuY3Rpb247XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIEJpbmFyeSA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjEyKSB7XG4gIF9pbmhlcml0cyhCaW5hcnksIF9FeHByZXNzaW9uMTIpO1xuXG4gIGZ1bmN0aW9uIEJpbmFyeShvcGVyYXRpb24sIGxlZnQsIHJpZ2h0KSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMxNCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uMTIuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczE0Lm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgICBfdGhpczE0LmxlZnQgPSBsZWZ0O1xuICAgIF90aGlzMTQucmlnaHQgPSByaWdodDtcbiAgICByZXR1cm4gX3RoaXMxNDtcbiAgfVxuXG4gIEJpbmFyeS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgdmFyIGxlZnQgPSB0aGlzLmxlZnQuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG5cbiAgICBzd2l0Y2ggKHRoaXMub3BlcmF0aW9uKSB7XG4gICAgICBjYXNlICcmJic6XG4gICAgICAgIHJldHVybiBsZWZ0ICYmIHRoaXMucmlnaHQuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgICBjYXNlICd8fCc6XG4gICAgICAgIHJldHVybiBsZWZ0IHx8IHRoaXMucmlnaHQuZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgfVxuXG4gICAgdmFyIHJpZ2h0ID0gdGhpcy5yaWdodC5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcblxuICAgIHN3aXRjaCAodGhpcy5vcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgJz09JzpcbiAgICAgICAgcmV0dXJuIGxlZnQgPT0gcmlnaHQ7XG4gICAgICBjYXNlICc9PT0nOlxuICAgICAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQ7XG4gICAgICBjYXNlICchPSc6XG4gICAgICAgIHJldHVybiBsZWZ0ICE9IHJpZ2h0O1xuICAgICAgY2FzZSAnIT09JzpcbiAgICAgICAgcmV0dXJuIGxlZnQgIT09IHJpZ2h0O1xuICAgICAgY2FzZSAnaW5zdGFuY2VvZic6XG4gICAgICAgIHJldHVybiB0eXBlb2YgcmlnaHQgPT09ICdmdW5jdGlvbicgJiYgbGVmdCBpbnN0YW5jZW9mIHJpZ2h0O1xuICAgICAgY2FzZSAnaW4nOlxuICAgICAgICByZXR1cm4gKHR5cGVvZiByaWdodCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocmlnaHQpKSA9PT0gJ29iamVjdCcgJiYgcmlnaHQgIT09IG51bGwgJiYgbGVmdCBpbiByaWdodDtcbiAgICB9XG5cbiAgICBpZiAobGVmdCA9PT0gbnVsbCB8fCByaWdodCA9PT0gbnVsbCB8fCBsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoICh0aGlzLm9wZXJhdGlvbikge1xuICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICBpZiAobGVmdCAhPT0gbnVsbCAmJiBsZWZ0ICE9PSB1bmRlZmluZWQpIHJldHVybiBsZWZ0O1xuICAgICAgICAgIGlmIChyaWdodCAhPT0gbnVsbCAmJiByaWdodCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmlnaHQ7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIGlmIChsZWZ0ICE9PSBudWxsICYmIGxlZnQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGxlZnQ7XG4gICAgICAgICAgaWYgKHJpZ2h0ICE9PSBudWxsICYmIHJpZ2h0ICE9PSB1bmRlZmluZWQpIHJldHVybiAwIC0gcmlnaHQ7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5vcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgJysnOlxuICAgICAgICByZXR1cm4gYXV0b0NvbnZlcnRBZGQobGVmdCwgcmlnaHQpO1xuICAgICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBsZWZ0IC0gcmlnaHQ7XG4gICAgICBjYXNlICcqJzpcbiAgICAgICAgcmV0dXJuIGxlZnQgKiByaWdodDtcbiAgICAgIGNhc2UgJy8nOlxuICAgICAgICByZXR1cm4gbGVmdCAvIHJpZ2h0O1xuICAgICAgY2FzZSAnJSc6XG4gICAgICAgIHJldHVybiBsZWZ0ICUgcmlnaHQ7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgcmV0dXJuIGxlZnQgPCByaWdodDtcbiAgICAgIGNhc2UgJz4nOlxuICAgICAgICByZXR1cm4gbGVmdCA+IHJpZ2h0O1xuICAgICAgY2FzZSAnPD0nOlxuICAgICAgICByZXR1cm4gbGVmdCA8PSByaWdodDtcbiAgICAgIGNhc2UgJz49JzpcbiAgICAgICAgcmV0dXJuIGxlZnQgPj0gcmlnaHQ7XG4gICAgICBjYXNlICdeJzpcbiAgICAgICAgcmV0dXJuIGxlZnQgXiByaWdodDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yIFsnICsgdGhpcy5vcGVyYXRpb24gKyAnXSBub3QgaGFuZGxlZCcpO1xuICB9O1xuXG4gIEJpbmFyeS5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdEJpbmFyeSh0aGlzKTtcbiAgfTtcblxuICBCaW5hcnkucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgdGhpcy5sZWZ0LmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIHZhciBsZWZ0ID0gdGhpcy5sZWZ0LmV2YWx1YXRlKHNjb3BlKTtcbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09ICcmJicgJiYgIWxlZnQgfHwgdGhpcy5vcGVyYXRpb24gPT09ICd8fCcgJiYgbGVmdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0LmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICB9O1xuXG4gIHJldHVybiBCaW5hcnk7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIFVuYXJ5ID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTMpIHtcbiAgX2luaGVyaXRzKFVuYXJ5LCBfRXhwcmVzc2lvbjEzKTtcblxuICBmdW5jdGlvbiBVbmFyeShvcGVyYXRpb24sIGV4cHJlc3Npb24pIHtcbiAgICBcblxuICAgIHZhciBfdGhpczE1ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24xMy5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTUub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xuICAgIF90aGlzMTUuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgcmV0dXJuIF90aGlzMTU7XG4gIH1cblxuICBVbmFyeS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgc3dpdGNoICh0aGlzLm9wZXJhdGlvbikge1xuICAgICAgY2FzZSAnISc6XG4gICAgICAgIHJldHVybiAhdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgICAgY2FzZSAndHlwZW9mJzpcbiAgICAgICAgcmV0dXJuIF90eXBlb2YodGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpKTtcbiAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICByZXR1cm4gdm9pZCB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBlcnJvciBbJyArIHRoaXMub3BlcmF0aW9uICsgJ10gbm90IGhhbmRsZWQnKTtcbiAgfTtcblxuICBVbmFyeS5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdFByZWZpeCh0aGlzKTtcbiAgfTtcblxuICBVbmFyeS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB0aGlzLmV4cHJlc3Npb24uY29ubmVjdChiaW5kaW5nLCBzY29wZSk7XG4gIH07XG5cbiAgcmV0dXJuIFVuYXJ5O1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBMaXRlcmFsUHJpbWl0aXZlID0gZnVuY3Rpb24gKF9FeHByZXNzaW9uMTQpIHtcbiAgX2luaGVyaXRzKExpdGVyYWxQcmltaXRpdmUsIF9FeHByZXNzaW9uMTQpO1xuXG4gIGZ1bmN0aW9uIExpdGVyYWxQcmltaXRpdmUodmFsdWUpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczE2ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24xNC5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTYudmFsdWUgPSB2YWx1ZTtcbiAgICByZXR1cm4gX3RoaXMxNjtcbiAgfVxuXG4gIExpdGVyYWxQcmltaXRpdmUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9O1xuXG4gIExpdGVyYWxQcmltaXRpdmUucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXRlcmFsUHJpbWl0aXZlKHRoaXMpO1xuICB9O1xuXG4gIExpdGVyYWxQcmltaXRpdmUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7fTtcblxuICByZXR1cm4gTGl0ZXJhbFByaW1pdGl2ZTtcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgTGl0ZXJhbFN0cmluZyA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjE1KSB7XG4gIF9pbmhlcml0cyhMaXRlcmFsU3RyaW5nLCBfRXhwcmVzc2lvbjE1KTtcblxuICBmdW5jdGlvbiBMaXRlcmFsU3RyaW5nKHZhbHVlKSB7XG4gICAgXG5cbiAgICB2YXIgX3RoaXMxNyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9FeHByZXNzaW9uMTUuY2FsbCh0aGlzKSk7XG5cbiAgICBfdGhpczE3LnZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuIF90aGlzMTc7XG4gIH1cblxuICBMaXRlcmFsU3RyaW5nLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcblxuICBMaXRlcmFsU3RyaW5nLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGl0ZXJhbFN0cmluZyh0aGlzKTtcbiAgfTtcblxuICBMaXRlcmFsU3RyaW5nLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge307XG5cbiAgcmV0dXJuIExpdGVyYWxTdHJpbmc7XG59KEV4cHJlc3Npb24pO1xuXG5leHBvcnQgdmFyIExpdGVyYWxUZW1wbGF0ZSA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjE2KSB7XG4gIF9pbmhlcml0cyhMaXRlcmFsVGVtcGxhdGUsIF9FeHByZXNzaW9uMTYpO1xuXG4gIGZ1bmN0aW9uIExpdGVyYWxUZW1wbGF0ZShjb29rZWQsIGV4cHJlc3Npb25zLCByYXcsIHRhZykge1xuICAgIFxuXG4gICAgdmFyIF90aGlzMTggPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjE2LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMxOC5jb29rZWQgPSBjb29rZWQ7XG4gICAgX3RoaXMxOC5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zIHx8IFtdO1xuICAgIF90aGlzMTgubGVuZ3RoID0gX3RoaXMxOC5leHByZXNzaW9ucy5sZW5ndGg7XG4gICAgX3RoaXMxOC50YWdnZWQgPSB0YWcgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoX3RoaXMxOC50YWdnZWQpIHtcbiAgICAgIF90aGlzMTguY29va2VkLnJhdyA9IHJhdztcbiAgICAgIF90aGlzMTgudGFnID0gdGFnO1xuICAgICAgaWYgKHRhZyBpbnN0YW5jZW9mIEFjY2Vzc1Njb3BlKSB7XG4gICAgICAgIF90aGlzMTguY29udGV4dFR5cGUgPSAnU2NvcGUnO1xuICAgICAgfSBlbHNlIGlmICh0YWcgaW5zdGFuY2VvZiBBY2Nlc3NNZW1iZXIgfHwgdGFnIGluc3RhbmNlb2YgQWNjZXNzS2V5ZWQpIHtcbiAgICAgICAgX3RoaXMxOC5jb250ZXh0VHlwZSA9ICdPYmplY3QnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKF90aGlzMTgudGFnICsgJyBpcyBub3QgYSB2YWxpZCB0ZW1wbGF0ZSB0YWcnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF90aGlzMTg7XG4gIH1cblxuICBMaXRlcmFsVGVtcGxhdGUucHJvdG90eXBlLmdldFNjb3BlQ29udGV4dCA9IGZ1bmN0aW9uIGdldFNjb3BlQ29udGV4dChzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgcmV0dXJuIGdldENvbnRleHRGb3IodGhpcy50YWcubmFtZSwgc2NvcGUsIHRoaXMudGFnLmFuY2VzdG9yKTtcbiAgfTtcblxuICBMaXRlcmFsVGVtcGxhdGUucHJvdG90eXBlLmdldE9iamVjdENvbnRleHQgPSBmdW5jdGlvbiBnZXRPYmplY3RDb250ZXh0KHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy50YWcub2JqZWN0LmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIExpdGVyYWxUZW1wbGF0ZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zLCBtdXN0RXZhbHVhdGUpIHtcbiAgICB2YXIgcmVzdWx0cyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRzW2ldID0gdGhpcy5leHByZXNzaW9uc1tpXS5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFnZ2VkKSB7XG4gICAgICB2YXIgZnVuYyA9IHRoaXMudGFnLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpc1snZ2V0JyArIHRoaXMuY29udGV4dFR5cGUgKyAnQ29udGV4dCddKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsLmFwcGx5KGZ1bmMsIFtjb250ZXh0LCB0aGlzLmNvb2tlZF0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVzdEV2YWx1YXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMudGFnICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5jb29rZWRbMF07XG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgdGhpcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICByZXN1bHQgPSBTdHJpbmcucHJvdG90eXBlLmNvbmNhdChyZXN1bHQsIHJlc3VsdHNbX2kyXSwgdGhpcy5jb29rZWRbX2kyICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIExpdGVyYWxUZW1wbGF0ZS5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdExpdGVyYWxUZW1wbGF0ZSh0aGlzKTtcbiAgfTtcblxuICBMaXRlcmFsVGVtcGxhdGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiBjb25uZWN0KGJpbmRpbmcsIHNjb3BlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmV4cHJlc3Npb25zW2ldLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWdnZWQpIHtcbiAgICAgIHRoaXMudGFnLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gTGl0ZXJhbFRlbXBsYXRlO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IHZhciBMaXRlcmFsQXJyYXkgPSBmdW5jdGlvbiAoX0V4cHJlc3Npb24xNykge1xuICBfaW5oZXJpdHMoTGl0ZXJhbEFycmF5LCBfRXhwcmVzc2lvbjE3KTtcblxuICBmdW5jdGlvbiBMaXRlcmFsQXJyYXkoZWxlbWVudHMpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczE5ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24xNy5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMTkuZWxlbWVudHMgPSBlbGVtZW50cztcbiAgICByZXR1cm4gX3RoaXMxOTtcbiAgfVxuXG4gIExpdGVyYWxBcnJheS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHJlc3VsdFtpXSA9IGVsZW1lbnRzW2ldLmV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgTGl0ZXJhbEFycmF5LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGl0ZXJhbEFycmF5KHRoaXMpO1xuICB9O1xuXG4gIExpdGVyYWxBcnJheS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5lbGVtZW50cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIExpdGVyYWxBcnJheTtcbn0oRXhwcmVzc2lvbik7XG5cbmV4cG9ydCB2YXIgTGl0ZXJhbE9iamVjdCA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjE4KSB7XG4gIF9pbmhlcml0cyhMaXRlcmFsT2JqZWN0LCBfRXhwcmVzc2lvbjE4KTtcblxuICBmdW5jdGlvbiBMaXRlcmFsT2JqZWN0KGtleXMsIHZhbHVlcykge1xuICAgIFxuXG4gICAgdmFyIF90aGlzMjAgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfRXhwcmVzc2lvbjE4LmNhbGwodGhpcykpO1xuXG4gICAgX3RoaXMyMC5rZXlzID0ga2V5cztcbiAgICBfdGhpczIwLnZhbHVlcyA9IHZhbHVlcztcbiAgICByZXR1cm4gX3RoaXMyMDtcbiAgfVxuXG4gIExpdGVyYWxPYmplY3QucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIHZhciBpbnN0YW5jZSA9IHt9O1xuICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcztcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBpbnN0YW5jZVtrZXlzW2ldXSA9IHZhbHVlc1tpXS5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAgTGl0ZXJhbE9iamVjdC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gYWNjZXB0KHZpc2l0b3IpIHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdExpdGVyYWxPYmplY3QodGhpcyk7XG4gIH07XG5cbiAgTGl0ZXJhbE9iamVjdC5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoYmluZGluZywgc2NvcGUpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5rZXlzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnZhbHVlc1tpXS5jb25uZWN0KGJpbmRpbmcsIHNjb3BlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIExpdGVyYWxPYmplY3Q7XG59KEV4cHJlc3Npb24pO1xuXG5mdW5jdGlvbiBldmFsTGlzdChzY29wZSwgbGlzdCwgbG9va3VwRnVuY3Rpb25zKSB7XG4gIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W2ldID0gbGlzdFtpXS5ldmFsdWF0ZShzY29wZSwgbG9va3VwRnVuY3Rpb25zKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBhdXRvQ29udmVydEFkZChhLCBiKSB7XG4gIGlmIChhICE9PSBudWxsICYmIGIgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBiICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGEgKyBiLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgYiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBhLnRvU3RyaW5nKCkgKyBiO1xuICAgIH1cblxuICAgIHJldHVybiBhICsgYjtcbiAgfVxuXG4gIGlmIChhICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBpZiAoYiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBiO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGdldEZ1bmN0aW9uKG9iaiwgbmFtZSwgbXVzdEV4aXN0KSB7XG4gIHZhciBmdW5jID0gb2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG9ialtuYW1lXTtcbiAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbiAgaWYgKCFtdXN0RXhpc3QgJiYgKGZ1bmMgPT09IG51bGwgfHwgZnVuYyA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihuYW1lICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufVxuXG5mdW5jdGlvbiBnZXRLZXllZChvYmosIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9ialtwYXJzZUludChrZXksIDEwKV07XG4gIH0gZWxzZSBpZiAob2JqKSB7XG4gICAgcmV0dXJuIG9ialtrZXldO1xuICB9IGVsc2UgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gb2JqW2tleV07XG59XG5cbmZ1bmN0aW9uIHNldEtleWVkKG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoa2V5LCAxMCk7XG5cbiAgICBpZiAob2JqLmxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgb2JqLmxlbmd0aCA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICBvYmpbaW5kZXhdID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9VbnBhcnNlciA9IG51bGw7XG5cbmV4cG9ydCB7IF9VbnBhcnNlciBhcyBVbnBhcnNlciB9O1xuaWYgKHR5cGVvZiBGRUFUVVJFX05PX1VOUEFSU0VSID09PSAndW5kZWZpbmVkJykge1xuICBfVW5wYXJzZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVW5wYXJzZXIoYnVmZmVyKSB7XG4gICAgICBcblxuICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgfVxuXG4gICAgVW5wYXJzZXIudW5wYXJzZSA9IGZ1bmN0aW9uIHVucGFyc2UoZXhwcmVzc2lvbikge1xuICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgICAgdmFyIHZpc2l0b3IgPSBuZXcgX1VucGFyc2VyKGJ1ZmZlcik7XG5cbiAgICAgIGV4cHJlc3Npb24uYWNjZXB0KHZpc2l0b3IpO1xuXG4gICAgICByZXR1cm4gYnVmZmVyLmpvaW4oJycpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSh0ZXh0KSB7XG4gICAgICB0aGlzLmJ1ZmZlci5wdXNoKHRleHQpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUud3JpdGVBcmdzID0gZnVuY3Rpb24gd3JpdGVBcmdzKGFyZ3MpIHtcbiAgICAgIHRoaXMud3JpdGUoJygnKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgICB0aGlzLndyaXRlKCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzW2ldLmFjY2VwdCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy53cml0ZSgnKScpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRCaW5kaW5nQmVoYXZpb3IgPSBmdW5jdGlvbiB2aXNpdEJpbmRpbmdCZWhhdmlvcihiZWhhdmlvcikge1xuICAgICAgdmFyIGFyZ3MgPSBiZWhhdmlvci5hcmdzO1xuXG4gICAgICBiZWhhdmlvci5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTtcbiAgICAgIHRoaXMud3JpdGUoJyYnICsgYmVoYXZpb3IubmFtZSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMud3JpdGUoJzonKTtcbiAgICAgICAgYXJnc1tpXS5hY2NlcHQodGhpcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdFZhbHVlQ29udmVydGVyID0gZnVuY3Rpb24gdmlzaXRWYWx1ZUNvbnZlcnRlcihjb252ZXJ0ZXIpIHtcbiAgICAgIHZhciBhcmdzID0gY29udmVydGVyLmFyZ3M7XG5cbiAgICAgIGNvbnZlcnRlci5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTtcbiAgICAgIHRoaXMud3JpdGUoJ3wnICsgY29udmVydGVyLm5hbWUpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYXJncy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLndyaXRlKCc6Jyk7XG4gICAgICAgIGFyZ3NbaV0uYWNjZXB0KHRoaXMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRBc3NpZ24gPSBmdW5jdGlvbiB2aXNpdEFzc2lnbihhc3NpZ24pIHtcbiAgICAgIGFzc2lnbi50YXJnZXQuYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnPScpO1xuICAgICAgYXNzaWduLnZhbHVlLmFjY2VwdCh0aGlzKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0Q29uZGl0aW9uYWwgPSBmdW5jdGlvbiB2aXNpdENvbmRpdGlvbmFsKGNvbmRpdGlvbmFsKSB7XG4gICAgICBjb25kaXRpb25hbC5jb25kaXRpb24uYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnPycpO1xuICAgICAgY29uZGl0aW9uYWwueWVzLmFjY2VwdCh0aGlzKTtcbiAgICAgIHRoaXMud3JpdGUoJzonKTtcbiAgICAgIGNvbmRpdGlvbmFsLm5vLmFjY2VwdCh0aGlzKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0QWNjZXNzVGhpcyA9IGZ1bmN0aW9uIHZpc2l0QWNjZXNzVGhpcyhhY2Nlc3MpIHtcbiAgICAgIGlmIChhY2Nlc3MuYW5jZXN0b3IgPT09IDApIHtcbiAgICAgICAgdGhpcy53cml0ZSgnJHRoaXMnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy53cml0ZSgnJHBhcmVudCcpO1xuICAgICAgdmFyIGkgPSBhY2Nlc3MuYW5jZXN0b3IgLSAxO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICB0aGlzLndyaXRlKCcuJHBhcmVudCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRBY2Nlc3NTY29wZSA9IGZ1bmN0aW9uIHZpc2l0QWNjZXNzU2NvcGUoYWNjZXNzKSB7XG4gICAgICB2YXIgaSA9IGFjY2Vzcy5hbmNlc3RvcjtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdGhpcy53cml0ZSgnJHBhcmVudC4nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud3JpdGUoYWNjZXNzLm5hbWUpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRBY2Nlc3NNZW1iZXIgPSBmdW5jdGlvbiB2aXNpdEFjY2Vzc01lbWJlcihhY2Nlc3MpIHtcbiAgICAgIGFjY2Vzcy5vYmplY3QuYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnLicgKyBhY2Nlc3MubmFtZSk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdEFjY2Vzc0tleWVkID0gZnVuY3Rpb24gdmlzaXRBY2Nlc3NLZXllZChhY2Nlc3MpIHtcbiAgICAgIGFjY2Vzcy5vYmplY3QuYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnWycpO1xuICAgICAgYWNjZXNzLmtleS5hY2NlcHQodGhpcyk7XG4gICAgICB0aGlzLndyaXRlKCddJyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdENhbGxTY29wZSA9IGZ1bmN0aW9uIHZpc2l0Q2FsbFNjb3BlKGNhbGwpIHtcbiAgICAgIHZhciBpID0gY2FsbC5hbmNlc3RvcjtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdGhpcy53cml0ZSgnJHBhcmVudC4nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud3JpdGUoY2FsbC5uYW1lKTtcbiAgICAgIHRoaXMud3JpdGVBcmdzKGNhbGwuYXJncyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdENhbGxGdW5jdGlvbiA9IGZ1bmN0aW9uIHZpc2l0Q2FsbEZ1bmN0aW9uKGNhbGwpIHtcbiAgICAgIGNhbGwuZnVuYy5hY2NlcHQodGhpcyk7XG4gICAgICB0aGlzLndyaXRlQXJncyhjYWxsLmFyZ3MpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRDYWxsTWVtYmVyID0gZnVuY3Rpb24gdmlzaXRDYWxsTWVtYmVyKGNhbGwpIHtcbiAgICAgIGNhbGwub2JqZWN0LmFjY2VwdCh0aGlzKTtcbiAgICAgIHRoaXMud3JpdGUoJy4nICsgY2FsbC5uYW1lKTtcbiAgICAgIHRoaXMud3JpdGVBcmdzKGNhbGwuYXJncyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdFByZWZpeCA9IGZ1bmN0aW9uIHZpc2l0UHJlZml4KHByZWZpeCkge1xuICAgICAgdGhpcy53cml0ZSgnKCcgKyBwcmVmaXgub3BlcmF0aW9uKTtcbiAgICAgIGlmIChwcmVmaXgub3BlcmF0aW9uLmNoYXJDb2RlQXQoMCkgPj0gOTcpIHtcbiAgICAgICAgdGhpcy53cml0ZSgnICcpO1xuICAgICAgfVxuICAgICAgcHJlZml4LmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpO1xuICAgICAgdGhpcy53cml0ZSgnKScpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRCaW5hcnkgPSBmdW5jdGlvbiB2aXNpdEJpbmFyeShiaW5hcnkpIHtcbiAgICAgIGJpbmFyeS5sZWZ0LmFjY2VwdCh0aGlzKTtcbiAgICAgIGlmIChiaW5hcnkub3BlcmF0aW9uLmNoYXJDb2RlQXQoMCkgPT09IDEwNSkge1xuICAgICAgICB0aGlzLndyaXRlKCcgJyArIGJpbmFyeS5vcGVyYXRpb24gKyAnICcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53cml0ZShiaW5hcnkub3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGJpbmFyeS5yaWdodC5hY2NlcHQodGhpcyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdExpdGVyYWxQcmltaXRpdmUgPSBmdW5jdGlvbiB2aXNpdExpdGVyYWxQcmltaXRpdmUobGl0ZXJhbCkge1xuICAgICAgdGhpcy53cml0ZSgnJyArIGxpdGVyYWwudmFsdWUpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRMaXRlcmFsQXJyYXkgPSBmdW5jdGlvbiB2aXNpdExpdGVyYWxBcnJheShsaXRlcmFsKSB7XG4gICAgICB2YXIgZWxlbWVudHMgPSBsaXRlcmFsLmVsZW1lbnRzO1xuXG4gICAgICB0aGlzLndyaXRlKCdbJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIHRoaXMud3JpdGUoJywnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnRzW2ldLmFjY2VwdCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy53cml0ZSgnXScpO1xuICAgIH07XG5cbiAgICBVbnBhcnNlci5wcm90b3R5cGUudmlzaXRMaXRlcmFsT2JqZWN0ID0gZnVuY3Rpb24gdmlzaXRMaXRlcmFsT2JqZWN0KGxpdGVyYWwpIHtcbiAgICAgIHZhciBrZXlzID0gbGl0ZXJhbC5rZXlzO1xuICAgICAgdmFyIHZhbHVlcyA9IGxpdGVyYWwudmFsdWVzO1xuXG4gICAgICB0aGlzLndyaXRlKCd7Jyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy53cml0ZSgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZSgnXFwnJyArIGtleXNbaV0gKyAnXFwnOicpO1xuICAgICAgICB2YWx1ZXNbaV0uYWNjZXB0KHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndyaXRlKCd9Jyk7XG4gICAgfTtcblxuICAgIFVucGFyc2VyLnByb3RvdHlwZS52aXNpdExpdGVyYWxTdHJpbmcgPSBmdW5jdGlvbiB2aXNpdExpdGVyYWxTdHJpbmcobGl0ZXJhbCkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBsaXRlcmFsLnZhbHVlLnJlcGxhY2UoLycvZywgXCJcXCdcIik7XG4gICAgICB0aGlzLndyaXRlKCdcXCcnICsgZXNjYXBlZCArICdcXCcnKTtcbiAgICB9O1xuXG4gICAgVW5wYXJzZXIucHJvdG90eXBlLnZpc2l0TGl0ZXJhbFRlbXBsYXRlID0gZnVuY3Rpb24gdmlzaXRMaXRlcmFsVGVtcGxhdGUobGl0ZXJhbCkge1xuICAgICAgdmFyIGNvb2tlZCA9IGxpdGVyYWwuY29va2VkLFxuICAgICAgICAgIGV4cHJlc3Npb25zID0gbGl0ZXJhbC5leHByZXNzaW9ucztcblxuICAgICAgdmFyIGxlbmd0aCA9IGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgIHRoaXMud3JpdGUoJ2AnKTtcbiAgICAgIHRoaXMud3JpdGUoY29va2VkWzBdKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZXhwcmVzc2lvbnNbaV0uYWNjZXB0KHRoaXMpO1xuICAgICAgICB0aGlzLndyaXRlKGNvb2tlZFtpICsgMV0pO1xuICAgICAgfVxuICAgICAgdGhpcy53cml0ZSgnYCcpO1xuICAgIH07XG5cbiAgICByZXR1cm4gVW5wYXJzZXI7XG4gIH0oKTtcbn1cblxuZXhwb3J0IHZhciBFeHByZXNzaW9uQ2xvbmVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFeHByZXNzaW9uQ2xvbmVyKCkge1xuICAgIFxuICB9XG5cbiAgRXhwcmVzc2lvbkNsb25lci5wcm90b3R5cGUuY2xvbmVFeHByZXNzaW9uQXJyYXkgPSBmdW5jdGlvbiBjbG9uZUV4cHJlc3Npb25BcnJheShhcnJheSkge1xuICAgIHZhciBjbG9uZWRBcnJheSA9IFtdO1xuICAgIHZhciBpID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNsb25lZEFycmF5W2ldID0gYXJyYXlbaV0uYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVkQXJyYXk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbkNsb25lci5wcm90b3R5cGUudmlzaXRCaW5kaW5nQmVoYXZpb3IgPSBmdW5jdGlvbiB2aXNpdEJpbmRpbmdCZWhhdmlvcihiZWhhdmlvcikge1xuICAgIHJldHVybiBuZXcgQmluZGluZ0JlaGF2aW9yKGJlaGF2aW9yLmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpLCBiZWhhdmlvci5uYW1lLCB0aGlzLmNsb25lRXhwcmVzc2lvbkFycmF5KGJlaGF2aW9yLmFyZ3MpKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdFZhbHVlQ29udmVydGVyID0gZnVuY3Rpb24gdmlzaXRWYWx1ZUNvbnZlcnRlcihjb252ZXJ0ZXIpIHtcbiAgICByZXR1cm4gbmV3IFZhbHVlQ29udmVydGVyKGNvbnZlcnRlci5leHByZXNzaW9uLmFjY2VwdCh0aGlzKSwgY29udmVydGVyLm5hbWUsIHRoaXMuY2xvbmVFeHByZXNzaW9uQXJyYXkoY29udmVydGVyLmFyZ3MpKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdEFzc2lnbiA9IGZ1bmN0aW9uIHZpc2l0QXNzaWduKGFzc2lnbikge1xuICAgIHJldHVybiBuZXcgQXNzaWduKGFzc2lnbi50YXJnZXQuYWNjZXB0KHRoaXMpLCBhc3NpZ24udmFsdWUuYWNjZXB0KHRoaXMpKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdENvbmRpdGlvbmFsID0gZnVuY3Rpb24gdmlzaXRDb25kaXRpb25hbChjb25kaXRpb25hbCkge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWwoY29uZGl0aW9uYWwuY29uZGl0aW9uLmFjY2VwdCh0aGlzKSwgY29uZGl0aW9uYWwueWVzLmFjY2VwdCh0aGlzKSwgY29uZGl0aW9uYWwubm8uYWNjZXB0KHRoaXMpKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdEFjY2Vzc1RoaXMgPSBmdW5jdGlvbiB2aXNpdEFjY2Vzc1RoaXMoYWNjZXNzKSB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3NUaGlzKGFjY2Vzcy5hbmNlc3Rvcik7XG4gIH07XG5cbiAgRXhwcmVzc2lvbkNsb25lci5wcm90b3R5cGUudmlzaXRBY2Nlc3NTY29wZSA9IGZ1bmN0aW9uIHZpc2l0QWNjZXNzU2NvcGUoYWNjZXNzKSB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3NTY29wZShhY2Nlc3MubmFtZSwgYWNjZXNzLmFuY2VzdG9yKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdEFjY2Vzc01lbWJlciA9IGZ1bmN0aW9uIHZpc2l0QWNjZXNzTWVtYmVyKGFjY2Vzcykge1xuICAgIHJldHVybiBuZXcgQWNjZXNzTWVtYmVyKGFjY2Vzcy5vYmplY3QuYWNjZXB0KHRoaXMpLCBhY2Nlc3MubmFtZSk7XG4gIH07XG5cbiAgRXhwcmVzc2lvbkNsb25lci5wcm90b3R5cGUudmlzaXRBY2Nlc3NLZXllZCA9IGZ1bmN0aW9uIHZpc2l0QWNjZXNzS2V5ZWQoYWNjZXNzKSB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3NLZXllZChhY2Nlc3Mub2JqZWN0LmFjY2VwdCh0aGlzKSwgYWNjZXNzLmtleS5hY2NlcHQodGhpcykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0Q2FsbFNjb3BlID0gZnVuY3Rpb24gdmlzaXRDYWxsU2NvcGUoY2FsbCkge1xuICAgIHJldHVybiBuZXcgQ2FsbFNjb3BlKGNhbGwubmFtZSwgdGhpcy5jbG9uZUV4cHJlc3Npb25BcnJheShjYWxsLmFyZ3MpLCBjYWxsLmFuY2VzdG9yKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdENhbGxGdW5jdGlvbiA9IGZ1bmN0aW9uIHZpc2l0Q2FsbEZ1bmN0aW9uKGNhbGwpIHtcbiAgICByZXR1cm4gbmV3IENhbGxGdW5jdGlvbihjYWxsLmZ1bmMuYWNjZXB0KHRoaXMpLCB0aGlzLmNsb25lRXhwcmVzc2lvbkFycmF5KGNhbGwuYXJncykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0Q2FsbE1lbWJlciA9IGZ1bmN0aW9uIHZpc2l0Q2FsbE1lbWJlcihjYWxsKSB7XG4gICAgcmV0dXJuIG5ldyBDYWxsTWVtYmVyKGNhbGwub2JqZWN0LmFjY2VwdCh0aGlzKSwgY2FsbC5uYW1lLCB0aGlzLmNsb25lRXhwcmVzc2lvbkFycmF5KGNhbGwuYXJncykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0VW5hcnkgPSBmdW5jdGlvbiB2aXNpdFVuYXJ5KHVuYXJ5KSB7XG4gICAgcmV0dXJuIG5ldyBVbmFyeShwcmVmaXgub3BlcmF0aW9uLCBwcmVmaXguZXhwcmVzc2lvbi5hY2NlcHQodGhpcykpO1xuICB9O1xuXG4gIEV4cHJlc3Npb25DbG9uZXIucHJvdG90eXBlLnZpc2l0QmluYXJ5ID0gZnVuY3Rpb24gdmlzaXRCaW5hcnkoYmluYXJ5KSB7XG4gICAgcmV0dXJuIG5ldyBCaW5hcnkoYmluYXJ5Lm9wZXJhdGlvbiwgYmluYXJ5LmxlZnQuYWNjZXB0KHRoaXMpLCBiaW5hcnkucmlnaHQuYWNjZXB0KHRoaXMpKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdExpdGVyYWxQcmltaXRpdmUgPSBmdW5jdGlvbiB2aXNpdExpdGVyYWxQcmltaXRpdmUobGl0ZXJhbCkge1xuICAgIHJldHVybiBuZXcgTGl0ZXJhbFByaW1pdGl2ZShsaXRlcmFsKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdExpdGVyYWxBcnJheSA9IGZ1bmN0aW9uIHZpc2l0TGl0ZXJhbEFycmF5KGxpdGVyYWwpIHtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxBcnJheSh0aGlzLmNsb25lRXhwcmVzc2lvbkFycmF5KGxpdGVyYWwuZWxlbWVudHMpKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdExpdGVyYWxPYmplY3QgPSBmdW5jdGlvbiB2aXNpdExpdGVyYWxPYmplY3QobGl0ZXJhbCkge1xuICAgIHJldHVybiBuZXcgTGl0ZXJhbE9iamVjdChsaXRlcmFsLmtleXMsIHRoaXMuY2xvbmVFeHByZXNzaW9uQXJyYXkobGl0ZXJhbC52YWx1ZXMpKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdExpdGVyYWxTdHJpbmcgPSBmdW5jdGlvbiB2aXNpdExpdGVyYWxTdHJpbmcobGl0ZXJhbCkge1xuICAgIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZyhsaXRlcmFsLnZhbHVlKTtcbiAgfTtcblxuICBFeHByZXNzaW9uQ2xvbmVyLnByb3RvdHlwZS52aXNpdExpdGVyYWxUZW1wbGF0ZSA9IGZ1bmN0aW9uIHZpc2l0TGl0ZXJhbFRlbXBsYXRlKGxpdGVyYWwpIHtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxUZW1wbGF0ZShsaXRlcmFsLmNvb2tlZCwgdGhpcy5jbG9uZUV4cHJlc3Npb25BcnJheShsaXRlcmFsLmV4cHJlc3Npb25zKSwgbGl0ZXJhbC5yYXcsIGxpdGVyYWwudGFnICYmIGxpdGVyYWwudGFnLmFjY2VwdCh0aGlzKSk7XG4gIH07XG5cbiAgcmV0dXJuIEV4cHJlc3Npb25DbG9uZXI7XG59KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZUV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICB2YXIgdmlzaXRvciA9IG5ldyBFeHByZXNzaW9uQ2xvbmVyKCk7XG4gIHJldHVybiBleHByZXNzaW9uLmFjY2VwdCh2aXNpdG9yKTtcbn1cblxuZXhwb3J0IHZhciBiaW5kaW5nTW9kZSA9IHtcbiAgb25lVGltZTogMCxcbiAgdG9WaWV3OiAxLFxuICBvbmVXYXk6IDEsXG4gIHR3b1dheTogMixcbiAgZnJvbVZpZXc6IDNcbn07XG5cbmV4cG9ydCB2YXIgUGFyc2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgXG5cbiAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIFBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZShzcmMpIHtcbiAgICBzcmMgPSBzcmMgfHwgJyc7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZVtzcmNdIHx8ICh0aGlzLmNhY2hlW3NyY10gPSBuZXcgUGFyc2VySW1wbGVtZW50YXRpb24oc3JjKS5wYXJzZUJpbmRpbmdCZWhhdmlvcigpKTtcbiAgfTtcblxuICByZXR1cm4gUGFyc2VyO1xufSgpO1xuXG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuZXhwb3J0IHZhciBQYXJzZXJJbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgX2NyZWF0ZUNsYXNzKFBhcnNlckltcGxlbWVudGF0aW9uLCBbe1xuICAgIGtleTogJ3JhdycsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmMuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5pZHgpO1xuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIFBhcnNlckltcGxlbWVudGF0aW9uKHNyYykge1xuICAgIFxuXG4gICAgdGhpcy5pZHggPSAwO1xuXG4gICAgdGhpcy5zdGFydCA9IDA7XG5cbiAgICB0aGlzLnNyYyA9IHNyYztcbiAgICB0aGlzLmxlbiA9IHNyYy5sZW5ndGg7XG5cbiAgICB0aGlzLnRrbiA9IFQkRU9GO1xuXG4gICAgdGhpcy52YWwgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmNoID0gc3JjLmNoYXJDb2RlQXQoMCk7XG4gIH1cblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUucGFyc2VCaW5kaW5nQmVoYXZpb3IgPSBmdW5jdGlvbiBwYXJzZUJpbmRpbmdCZWhhdmlvcigpIHtcbiAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgIGlmICh0aGlzLnRrbiAmIFQkRXhwcmVzc2lvblRlcm1pbmFsKSB7XG4gICAgICB0aGlzLmVycignSW52YWxpZCBzdGFydCBvZiBleHByZXNzaW9uJyk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSB0aGlzLnBhcnNlVmFsdWVDb252ZXJ0ZXIoKTtcbiAgICB3aGlsZSAodGhpcy5vcHQoVCRBbXBlcnNhbmQpKSB7XG4gICAgICByZXN1bHQgPSBuZXcgQmluZGluZ0JlaGF2aW9yKHJlc3VsdCwgdGhpcy52YWwsIHRoaXMucGFyc2VWYXJpYWRpY0FyZ3MoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRrbiAhPT0gVCRFT0YpIHtcbiAgICAgIHRoaXMuZXJyKCdVbmNvbnN1bWVkIHRva2VuICcgKyB0aGlzLnJhdyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnBhcnNlVmFsdWVDb252ZXJ0ZXIgPSBmdW5jdGlvbiBwYXJzZVZhbHVlQ29udmVydGVyKCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgIHdoaWxlICh0aGlzLm9wdChUJEJhcikpIHtcbiAgICAgIHJlc3VsdCA9IG5ldyBWYWx1ZUNvbnZlcnRlcihyZXN1bHQsIHRoaXMudmFsLCB0aGlzLnBhcnNlVmFyaWFkaWNBcmdzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5wYXJzZVZhcmlhZGljQXJncyA9IGZ1bmN0aW9uIHBhcnNlVmFyaWFkaWNBcmdzKCkge1xuICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHdoaWxlICh0aGlzLm9wdChUJENvbG9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwclN0YXJ0ID0gdGhpcy5pZHg7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucGFyc2VDb25kaXRpb25hbCgpO1xuXG4gICAgd2hpbGUgKHRoaXMudGtuID09PSBUJEVxKSB7XG4gICAgICBpZiAoIXJlc3VsdC5pc0Fzc2lnbmFibGUpIHtcbiAgICAgICAgdGhpcy5lcnIoJ0V4cHJlc3Npb24gJyArIHRoaXMuc3JjLnNsaWNlKGV4cHJTdGFydCwgdGhpcy5zdGFydCkgKyAnIGlzIG5vdCBhc3NpZ25hYmxlJyk7XG4gICAgICB9XG4gICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgZXhwclN0YXJ0ID0gdGhpcy5pZHg7XG4gICAgICByZXN1bHQgPSBuZXcgQXNzaWduKHJlc3VsdCwgdGhpcy5wYXJzZUNvbmRpdGlvbmFsKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5wYXJzZUNvbmRpdGlvbmFsID0gZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbCgpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZUJpbmFyeSgwKTtcblxuICAgIGlmICh0aGlzLm9wdChUJFF1ZXN0aW9uKSkge1xuICAgICAgdmFyIHllcyA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICB0aGlzLmV4cGVjdChUJENvbG9uKTtcbiAgICAgIHJlc3VsdCA9IG5ldyBDb25kaXRpb25hbChyZXN1bHQsIHllcywgdGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnBhcnNlQmluYXJ5ID0gZnVuY3Rpb24gcGFyc2VCaW5hcnkobWluUHJlY2VkZW5jZSkge1xuICAgIHZhciBsZWZ0ID0gdGhpcy5wYXJzZUxlZnRIYW5kU2lkZSgwKTtcblxuICAgIHdoaWxlICh0aGlzLnRrbiAmIFQkQmluYXJ5T3ApIHtcbiAgICAgIHZhciBvcFRva2VuID0gdGhpcy50a247XG4gICAgICBpZiAoKG9wVG9rZW4gJiBUJFByZWNlZGVuY2UpIDw9IG1pblByZWNlZGVuY2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgbGVmdCA9IG5ldyBCaW5hcnkoVG9rZW5WYWx1ZXNbb3BUb2tlbiAmIFQkVG9rZW5NYXNrXSwgbGVmdCwgdGhpcy5wYXJzZUJpbmFyeShvcFRva2VuICYgVCRQcmVjZWRlbmNlKSk7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0O1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5wYXJzZUxlZnRIYW5kU2lkZSA9IGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlKGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gdm9pZCAwO1xuXG4gICAgcHJpbWFyeTogc3dpdGNoICh0aGlzLnRrbikge1xuICAgICAgY2FzZSBUJFBsdXM6XG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlTGVmdEhhbmRTaWRlKDApO1xuICAgICAgY2FzZSBUJE1pbnVzOlxuICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICByZXR1cm4gbmV3IEJpbmFyeSgnLScsIG5ldyBMaXRlcmFsUHJpbWl0aXZlKDApLCB0aGlzLnBhcnNlTGVmdEhhbmRTaWRlKDApKTtcbiAgICAgIGNhc2UgVCRCYW5nOlxuICAgICAgY2FzZSBUJFR5cGVvZktleXdvcmQ6XG4gICAgICBjYXNlIFQkVm9pZEtleXdvcmQ6XG4gICAgICAgIHZhciBvcCA9IFRva2VuVmFsdWVzW3RoaXMudGtuICYgVCRUb2tlbk1hc2tdO1xuICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICByZXR1cm4gbmV3IFVuYXJ5KG9wLCB0aGlzLnBhcnNlTGVmdEhhbmRTaWRlKDApKTtcbiAgICAgIGNhc2UgVCRQYXJlbnRTY29wZTpcbiAgICAgICAge1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICBjb250ZXh0Kys7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHQoVCRQZXJpb2QpKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnRrbiA9PT0gVCRQZXJpb2QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRrbiAmIFQkQWNjZXNzU2NvcGVUZXJtaW5hbCkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgQWNjZXNzVGhpcyhjb250ZXh0ICYgQyRBbmNlc3Rvcik7XG5cbiAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgJiBDJFNob3J0aGFuZFByb3AgfCBDJFRoaXM7XG4gICAgICAgICAgICAgIGJyZWFrIHByaW1hcnk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmVycigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gd2hpbGUgKHRoaXMudGtuID09PSBUJFBhcmVudFNjb3BlKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFQkSWRlbnRpZmllcjpcbiAgICAgICAge1xuICAgICAgICAgIHJlc3VsdCA9IG5ldyBBY2Nlc3NTY29wZSh0aGlzLnZhbCwgY29udGV4dCAmIEMkQW5jZXN0b3IpO1xuICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgJiBDJFNob3J0aGFuZFByb3AgfCBDJFNjb3BlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlIFQkVGhpc1Njb3BlOlxuICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICByZXN1bHQgPSBuZXcgQWNjZXNzVGhpcygwKTtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQgJiBDJFNob3J0aGFuZFByb3AgfCBDJFRoaXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUJExQYXJlbjpcbiAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgdGhpcy5leHBlY3QoVCRSUGFyZW4pO1xuICAgICAgICBjb250ZXh0ID0gQyRQcmltYXJ5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVCRMQnJhY2tldDpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgdmFyIF9lbGVtZW50cyA9IFtdO1xuICAgICAgICAgIGlmICh0aGlzLnRrbiAhPT0gVCRSQnJhY2tldCkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBfZWxlbWVudHMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHRoaXMub3B0KFQkQ29tbWEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5leHBlY3QoVCRSQnJhY2tldCk7XG4gICAgICAgICAgcmVzdWx0ID0gbmV3IExpdGVyYWxBcnJheShfZWxlbWVudHMpO1xuICAgICAgICAgIGNvbnRleHQgPSBDJFByaW1hcnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVCRMQnJhY2U6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgIHdoaWxlICh0aGlzLnRrbiAhPT0gVCRSQnJhY2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRrbiAmIFQkSWRlbnRpZmllck9yS2V5d29yZCkge1xuICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmNoLFxuICAgICAgICAgICAgICAgICAgdGtuID0gdGhpcy50a24sXG4gICAgICAgICAgICAgICAgICBpZHggPSB0aGlzLmlkeDtcblxuICAgICAgICAgICAgICBrZXlzLnB1c2godGhpcy52YWwpO1xuICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgICAgICBpZiAodGhpcy5vcHQoVCRDb2xvbikpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoID0gY2g7XG4gICAgICAgICAgICAgICAgdGhpcy50a24gPSB0a247XG4gICAgICAgICAgICAgICAgdGhpcy5pZHggPSBpZHg7XG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5wYXJzZUxlZnRIYW5kU2lkZShDJFNob3J0aGFuZFByb3ApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRrbiAmIFQkTGl0ZXJhbCkge1xuICAgICAgICAgICAgICBrZXlzLnB1c2godGhpcy52YWwpO1xuICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgICAgICB0aGlzLmV4cGVjdChUJENvbG9uKTtcbiAgICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmVycigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudGtuICE9PSBUJFJCcmFjZSkge1xuICAgICAgICAgICAgICB0aGlzLmV4cGVjdChUJENvbW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5leHBlY3QoVCRSQnJhY2UpO1xuICAgICAgICAgIHJlc3VsdCA9IG5ldyBMaXRlcmFsT2JqZWN0KGtleXMsIHZhbHVlcyk7XG4gICAgICAgICAgY29udGV4dCA9IEMkUHJpbWFyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSBUJFN0cmluZ0xpdGVyYWw6XG4gICAgICAgIHJlc3VsdCA9IG5ldyBMaXRlcmFsU3RyaW5nKHRoaXMudmFsKTtcbiAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgY29udGV4dCA9IEMkUHJpbWFyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFQkVGVtcGxhdGVUYWlsOlxuICAgICAgICByZXN1bHQgPSBuZXcgTGl0ZXJhbFRlbXBsYXRlKFt0aGlzLnZhbF0pO1xuICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICBjb250ZXh0ID0gQyRQcmltYXJ5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVCRUZW1wbGF0ZUNvbnRpbnVhdGlvbjpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5wYXJzZVRlbXBsYXRlKDApO1xuICAgICAgICBjb250ZXh0ID0gQyRQcmltYXJ5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVCROdW1lcmljTGl0ZXJhbDpcbiAgICAgICAge1xuICAgICAgICAgIHJlc3VsdCA9IG5ldyBMaXRlcmFsUHJpbWl0aXZlKHRoaXMudmFsKTtcbiAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVCROdWxsS2V5d29yZDpcbiAgICAgIGNhc2UgVCRVbmRlZmluZWRLZXl3b3JkOlxuICAgICAgY2FzZSBUJFRydWVLZXl3b3JkOlxuICAgICAgY2FzZSBUJEZhbHNlS2V5d29yZDpcbiAgICAgICAgcmVzdWx0ID0gbmV3IExpdGVyYWxQcmltaXRpdmUoVG9rZW5WYWx1ZXNbdGhpcy50a24gJiBUJFRva2VuTWFza10pO1xuICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICBjb250ZXh0ID0gQyRQcmltYXJ5O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlkeCA+PSB0aGlzLmxlbikge1xuICAgICAgICAgIHRoaXMuZXJyKCdVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZXh0ICYgQyRTaG9ydGhhbmRQcm9wKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBuYW1lID0gdGhpcy52YWw7XG4gICAgd2hpbGUgKHRoaXMudGtuICYgVCRNZW1iZXJPckNhbGxFeHByZXNzaW9uKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudGtuKSB7XG4gICAgICAgIGNhc2UgVCRQZXJpb2Q6XG4gICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICBpZiAoISh0aGlzLnRrbiAmIFQkSWRlbnRpZmllck9yS2V5d29yZCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5hbWUgPSB0aGlzLnZhbDtcbiAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuXG4gICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgJiBDJFByaW1hcnkgfCAoY29udGV4dCAmIChDJFRoaXMgfCBDJFNjb3BlKSkgPDwgMSB8IGNvbnRleHQgJiBDJE1lbWJlciB8IChjb250ZXh0ICYgQyRLZXllZCkgPj4gMSB8IChjb250ZXh0ICYgQyRDYWxsKSA+PiAyO1xuICAgICAgICAgIGlmICh0aGlzLnRrbiA9PT0gVCRMUGFyZW4pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29udGV4dCAmIEMkU2NvcGUpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBBY2Nlc3NTY29wZShuYW1lLCByZXN1bHQuYW5jZXN0b3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgQWNjZXNzTWVtYmVyKHJlc3VsdCwgbmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIFQkTEJyYWNrZXQ6XG4gICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICBjb250ZXh0ID0gQyRLZXllZDtcbiAgICAgICAgICByZXN1bHQgPSBuZXcgQWNjZXNzS2V5ZWQocmVzdWx0LCB0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICB0aGlzLmV4cGVjdChUJFJCcmFja2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUJExQYXJlbjpcbiAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgd2hpbGUgKHRoaXMudGtuICE9PSBUJFJQYXJlbikge1xuICAgICAgICAgICAgYXJncy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdChUJENvbW1hKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5leHBlY3QoVCRSUGFyZW4pO1xuICAgICAgICAgIGlmIChjb250ZXh0ICYgQyRTY29wZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IENhbGxTY29wZShuYW1lLCBhcmdzLCByZXN1bHQuYW5jZXN0b3IpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCAmIChDJE1lbWJlciB8IEMkUHJpbWFyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBDYWxsTWVtYmVyKHJlc3VsdCwgbmFtZSwgYXJncyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBDYWxsRnVuY3Rpb24ocmVzdWx0LCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGV4dCA9IEMkQ2FsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUJFRlbXBsYXRlVGFpbDpcbiAgICAgICAgICByZXN1bHQgPSBuZXcgTGl0ZXJhbFRlbXBsYXRlKFt0aGlzLnZhbF0sIFtdLCBbdGhpcy5yYXddLCByZXN1bHQpO1xuICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVCRUZW1wbGF0ZUNvbnRpbnVhdGlvbjpcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLnBhcnNlVGVtcGxhdGUoY29udGV4dCB8IEMkVGFnZ2VkLCByZXN1bHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLnBhcnNlVGVtcGxhdGUgPSBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlKGNvbnRleHQsIGZ1bmMpIHtcbiAgICB2YXIgY29va2VkID0gW3RoaXMudmFsXTtcbiAgICB2YXIgcmF3ID0gY29udGV4dCAmIEMkVGFnZ2VkID8gW3RoaXMucmF3XSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmV4cGVjdChUJFRlbXBsYXRlQ29udGludWF0aW9uKTtcbiAgICB2YXIgZXhwcmVzc2lvbnMgPSBbdGhpcy5wYXJzZUV4cHJlc3Npb24oKV07XG5cbiAgICB3aGlsZSAoKHRoaXMudGtuID0gdGhpcy5zY2FuVGVtcGxhdGVUYWlsKCkpICE9PSBUJFRlbXBsYXRlVGFpbCkge1xuICAgICAgY29va2VkLnB1c2godGhpcy52YWwpO1xuICAgICAgaWYgKGNvbnRleHQgJiBDJFRhZ2dlZCkge1xuICAgICAgICByYXcucHVzaCh0aGlzLnJhdyk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4cGVjdChUJFRlbXBsYXRlQ29udGludWF0aW9uKTtcbiAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG4gICAgfVxuXG4gICAgY29va2VkLnB1c2godGhpcy52YWwpO1xuICAgIGlmIChjb250ZXh0ICYgQyRUYWdnZWQpIHtcbiAgICAgIHJhdy5wdXNoKHRoaXMucmF3KTtcbiAgICB9XG4gICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxUZW1wbGF0ZShjb29rZWQsIGV4cHJlc3Npb25zLCByYXcsIGZ1bmMpO1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5uZXh0VG9rZW4gPSBmdW5jdGlvbiBuZXh0VG9rZW4oKSB7XG4gICAgd2hpbGUgKHRoaXMuaWR4IDwgdGhpcy5sZW4pIHtcbiAgICAgIGlmICh0aGlzLmNoIDw9IDB4MjApIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGFydCA9IHRoaXMuaWR4O1xuICAgICAgaWYgKHRoaXMuY2ggPT09IDB4MjQgfHwgdGhpcy5jaCA+PSAweDYxICYmIHRoaXMuY2ggPD0gMHg3QSkge1xuICAgICAgICB0aGlzLnRrbiA9IHRoaXMuc2NhbklkZW50aWZpZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHRoaXMudGtuID0gQ2hhclNjYW5uZXJzW3RoaXMuY2hdKHRoaXMpKSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudGtuID0gVCRFT0Y7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNoID0gdGhpcy5zcmMuY2hhckNvZGVBdCgrK3RoaXMuaWR4KTtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuc2NhbklkZW50aWZpZXIgPSBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcigpIHtcbiAgICB3aGlsZSAoQXNjaWlJZFBhcnRzLmhhcyh0aGlzLm5leHQoKSkgfHwgdGhpcy5jaCA+IDB4N0YgJiYgSWRQYXJ0c1t0aGlzLmNoXSkge31cblxuICAgIHJldHVybiBLZXl3b3JkTG9va3VwW3RoaXMudmFsID0gdGhpcy5yYXddIHx8IFQkSWRlbnRpZmllcjtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuc2Nhbk51bWJlciA9IGZ1bmN0aW9uIHNjYW5OdW1iZXIoaXNGbG9hdCkge1xuICAgIGlmIChpc0Zsb2F0KSB7XG4gICAgICB0aGlzLnZhbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsID0gdGhpcy5jaCAtIDB4MzA7XG4gICAgICB3aGlsZSAodGhpcy5uZXh0KCkgPD0gMHgzOSAmJiB0aGlzLmNoID49IDB4MzApIHtcbiAgICAgICAgdGhpcy52YWwgPSB0aGlzLnZhbCAqIDEwICsgdGhpcy5jaCAtIDB4MzA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzRmxvYXQgfHwgdGhpcy5jaCA9PT0gMHgyRSkge1xuICAgICAgaWYgKCFpc0Zsb2F0KSB7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgfVxuICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pZHg7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLmNoIC0gMHgzMDtcbiAgICAgIHdoaWxlICh0aGlzLm5leHQoKSA8PSAweDM5ICYmIHRoaXMuY2ggPj0gMHgzMCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAgKyB0aGlzLmNoIC0gMHgzMDtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsID0gdGhpcy52YWwgKyB2YWx1ZSAvIE1hdGgucG93KDEwLCB0aGlzLmlkeCAtIHN0YXJ0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaCA9PT0gMHg2NSB8fCB0aGlzLmNoID09PSAweDQ1KSB7XG4gICAgICB2YXIgX3N0YXJ0ID0gdGhpcy5pZHg7XG5cbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgaWYgKHRoaXMuY2ggPT09IDB4MkQgfHwgdGhpcy5jaCA9PT0gMHgyQikge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEodGhpcy5jaCA+PSAweDMwICYmIHRoaXMuY2ggPD0gMHgzOSkpIHtcbiAgICAgICAgdGhpcy5pZHggPSBfc3RhcnQ7XG4gICAgICAgIHRoaXMuZXJyKCdJbnZhbGlkIGV4cG9uZW50Jyk7XG4gICAgICB9XG4gICAgICB3aGlsZSAodGhpcy5uZXh0KCkgPD0gMHgzOSAmJiB0aGlzLmNoID49IDB4MzApIHt9XG4gICAgICB0aGlzLnZhbCA9IHBhcnNlRmxvYXQodGhpcy5zcmMuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5pZHgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVCROdW1lcmljTGl0ZXJhbDtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuc2NhblN0cmluZyA9IGZ1bmN0aW9uIHNjYW5TdHJpbmcoKSB7XG4gICAgdmFyIHF1b3RlID0gdGhpcy5jaDtcbiAgICB0aGlzLm5leHQoKTtcblxuICAgIHZhciBidWZmZXIgPSB2b2lkIDA7XG4gICAgdmFyIG1hcmtlciA9IHRoaXMuaWR4O1xuXG4gICAgd2hpbGUgKHRoaXMuY2ggIT09IHF1b3RlKSB7XG4gICAgICBpZiAodGhpcy5jaCA9PT0gMHg1Qykge1xuICAgICAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgICAgIGJ1ZmZlciA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZmVyLnB1c2godGhpcy5zcmMuc2xpY2UobWFya2VyLCB0aGlzLmlkeCkpO1xuXG4gICAgICAgIHRoaXMubmV4dCgpO1xuXG4gICAgICAgIHZhciBfdW5lc2NhcGVkID0gdm9pZCAwO1xuXG4gICAgICAgIGlmICh0aGlzLmNoID09PSAweDc1KSB7XG4gICAgICAgICAgdGhpcy5uZXh0KCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pZHggKyA0IDwgdGhpcy5sZW4pIHtcbiAgICAgICAgICAgIHZhciBoZXggPSB0aGlzLnNyYy5zbGljZSh0aGlzLmlkeCwgdGhpcy5pZHggKyA0KTtcblxuICAgICAgICAgICAgaWYgKCEvW0EtWjAtOV17NH0vaS50ZXN0KGhleCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5lcnIoJ0ludmFsaWQgdW5pY29kZSBlc2NhcGUgW1xcXFx1JyArIGhleCArICddJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF91bmVzY2FwZWQgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgICAgIHRoaXMuaWR4ICs9IDQ7XG4gICAgICAgICAgICB0aGlzLmNoID0gdGhpcy5zcmMuY2hhckNvZGVBdCh0aGlzLmlkeCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXJyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF91bmVzY2FwZWQgPSB1bmVzY2FwZSh0aGlzLmNoKTtcbiAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZlci5wdXNoKGZyb21DaGFyQ29kZShfdW5lc2NhcGVkKSk7XG4gICAgICAgIG1hcmtlciA9IHRoaXMuaWR4O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSAwIHx8IHRoaXMuaWR4ID49IHRoaXMubGVuKSB7XG4gICAgICAgIHRoaXMuZXJyKCdVbnRlcm1pbmF0ZWQgcXVvdGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYXN0ID0gdGhpcy5zcmMuc2xpY2UobWFya2VyLCB0aGlzLmlkeCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdmFyIHVuZXNjYXBlZCA9IGxhc3Q7XG5cbiAgICBpZiAoYnVmZmVyICE9PSBudWxsICYmIGJ1ZmZlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBidWZmZXIucHVzaChsYXN0KTtcbiAgICAgIHVuZXNjYXBlZCA9IGJ1ZmZlci5qb2luKCcnKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbCA9IHVuZXNjYXBlZDtcbiAgICByZXR1cm4gVCRTdHJpbmdMaXRlcmFsO1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5zY2FuVGVtcGxhdGUgPSBmdW5jdGlvbiBzY2FuVGVtcGxhdGUoKSB7XG4gICAgdmFyIHRhaWwgPSB0cnVlO1xuICAgIHZhciByZXN1bHQgPSAnJztcblxuICAgIHdoaWxlICh0aGlzLm5leHQoKSAhPT0gMHg2MCkge1xuICAgICAgaWYgKHRoaXMuY2ggPT09IDB4MjQpIHtcbiAgICAgICAgaWYgKHRoaXMuaWR4ICsgMSA8IHRoaXMubGVuICYmIHRoaXMuc3JjLmNoYXJDb2RlQXQodGhpcy5pZHggKyAxKSA9PT0gMHg3Qikge1xuICAgICAgICAgIHRoaXMuaWR4Kys7XG4gICAgICAgICAgdGFpbCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCArPSAnJCc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaCA9PT0gMHg1Qykge1xuICAgICAgICByZXN1bHQgKz0gZnJvbUNoYXJDb2RlKHVuZXNjYXBlKHRoaXMubmV4dCgpKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2ggPT09IDAgfHwgdGhpcy5pZHggPj0gdGhpcy5sZW4pIHtcbiAgICAgICAgdGhpcy5lcnIoJ1VudGVybWluYXRlZCB0ZW1wbGF0ZSBsaXRlcmFsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gZnJvbUNoYXJDb2RlKHRoaXMuY2gpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubmV4dCgpO1xuICAgIHRoaXMudmFsID0gcmVzdWx0O1xuICAgIGlmICh0YWlsKSB7XG4gICAgICByZXR1cm4gVCRUZW1wbGF0ZVRhaWw7XG4gICAgfVxuICAgIHJldHVybiBUJFRlbXBsYXRlQ29udGludWF0aW9uO1xuICB9O1xuXG4gIFBhcnNlckltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5zY2FuVGVtcGxhdGVUYWlsID0gZnVuY3Rpb24gc2NhblRlbXBsYXRlVGFpbCgpIHtcbiAgICBpZiAodGhpcy5pZHggPj0gdGhpcy5sZW4pIHtcbiAgICAgIHRoaXMuZXJyKCdVbnRlcm1pbmF0ZWQgdGVtcGxhdGUnKTtcbiAgICB9XG4gICAgdGhpcy5pZHgtLTtcbiAgICByZXR1cm4gdGhpcy5zY2FuVGVtcGxhdGUoKTtcbiAgfTtcblxuICBQYXJzZXJJbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuZXJyID0gZnVuY3Rpb24gZXJyKCkge1xuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnVW5leHBlY3RlZCB0b2tlbiAnICsgdGhpcy5yYXc7XG4gICAgdmFyIGNvbHVtbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdGhpcy5zdGFydDtcblxuICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VyIEVycm9yOiAnICsgbWVzc2FnZSArICcgYXQgY29sdW1uICcgKyBjb2x1bW4gKyAnIGluIGV4cHJlc3Npb24gWycgKyB0aGlzLnNyYyArICddJyk7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLm9wdCA9IGZ1bmN0aW9uIG9wdCh0b2tlbikge1xuICAgIGlmICh0aGlzLnRrbiA9PT0gdG9rZW4pIHtcbiAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgUGFyc2VySW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmV4cGVjdCA9IGZ1bmN0aW9uIGV4cGVjdCh0b2tlbikge1xuICAgIGlmICh0aGlzLnRrbiA9PT0gdG9rZW4pIHtcbiAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXJyKCdNaXNzaW5nIGV4cGVjdGVkIHRva2VuICcgKyBUb2tlblZhbHVlc1t0b2tlbiAmIFQkVG9rZW5NYXNrXSwgdGhpcy5pZHgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUGFyc2VySW1wbGVtZW50YXRpb247XG59KCk7XG5cbmZ1bmN0aW9uIHVuZXNjYXBlKGNvZGUpIHtcbiAgc3dpdGNoIChjb2RlKSB7XG4gICAgY2FzZSAweDY2OlxuICAgICAgcmV0dXJuIDB4QztcbiAgICBjYXNlIDB4NkU6XG4gICAgICByZXR1cm4gMHhBO1xuICAgIGNhc2UgMHg3MjpcbiAgICAgIHJldHVybiAweEQ7XG4gICAgY2FzZSAweDc0OlxuICAgICAgcmV0dXJuIDB4OTtcbiAgICBjYXNlIDB4NzY6XG4gICAgICByZXR1cm4gMHhCO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY29kZTtcbiAgfVxufVxuXG52YXIgQyRUaGlzID0gMSA8PCAxMDtcbnZhciBDJFNjb3BlID0gMSA8PCAxMTtcbnZhciBDJE1lbWJlciA9IDEgPDwgMTI7XG52YXIgQyRLZXllZCA9IDEgPDwgMTM7XG52YXIgQyRDYWxsID0gMSA8PCAxNDtcbnZhciBDJFByaW1hcnkgPSAxIDw8IDE1O1xudmFyIEMkU2hvcnRoYW5kUHJvcCA9IDEgPDwgMTY7XG52YXIgQyRUYWdnZWQgPSAxIDw8IDE3O1xuXG52YXIgQyRBbmNlc3RvciA9ICgxIDw8IDkpIC0gMTtcblxudmFyIFQkVG9rZW5NYXNrID0gKDEgPDwgNikgLSAxO1xuXG52YXIgVCRQcmVjU2hpZnQgPSA2O1xuXG52YXIgVCRQcmVjZWRlbmNlID0gNyA8PCBUJFByZWNTaGlmdDtcblxudmFyIFQkRXhwcmVzc2lvblRlcm1pbmFsID0gMSA8PCAxMTtcblxudmFyIFQkQ2xvc2luZ1Rva2VuID0gMSA8PCAxMjtcblxudmFyIFQkT3BlbmluZ1Rva2VuID0gMSA8PCAxMztcblxudmFyIFQkQWNjZXNzU2NvcGVUZXJtaW5hbCA9IDEgPDwgMTQ7XG52YXIgVCRLZXl3b3JkID0gMSA8PCAxNTtcbnZhciBUJEVPRiA9IDEgPDwgMTYgfCBUJEFjY2Vzc1Njb3BlVGVybWluYWwgfCBUJEV4cHJlc3Npb25UZXJtaW5hbDtcbnZhciBUJElkZW50aWZpZXIgPSAxIDw8IDE3O1xudmFyIFQkSWRlbnRpZmllck9yS2V5d29yZCA9IFQkSWRlbnRpZmllciB8IFQkS2V5d29yZDtcbnZhciBUJExpdGVyYWwgPSAxIDw8IDE4O1xudmFyIFQkTnVtZXJpY0xpdGVyYWwgPSAxIDw8IDE5IHwgVCRMaXRlcmFsO1xudmFyIFQkU3RyaW5nTGl0ZXJhbCA9IDEgPDwgMjAgfCBUJExpdGVyYWw7XG52YXIgVCRCaW5hcnlPcCA9IDEgPDwgMjE7XG5cbnZhciBUJFVuYXJ5T3AgPSAxIDw8IDIyO1xuXG52YXIgVCRNZW1iZXJFeHByZXNzaW9uID0gMSA8PCAyMztcblxudmFyIFQkTWVtYmVyT3JDYWxsRXhwcmVzc2lvbiA9IDEgPDwgMjQ7XG52YXIgVCRUZW1wbGF0ZVRhaWwgPSAxIDw8IDI1IHwgVCRNZW1iZXJPckNhbGxFeHByZXNzaW9uO1xudmFyIFQkVGVtcGxhdGVDb250aW51YXRpb24gPSAxIDw8IDI2IHwgVCRNZW1iZXJPckNhbGxFeHByZXNzaW9uO1xuXG52YXIgVCRGYWxzZUtleXdvcmQgPSAwIHwgVCRLZXl3b3JkIHwgVCRMaXRlcmFsO1xudmFyIFQkVHJ1ZUtleXdvcmQgPSAxIHwgVCRLZXl3b3JkIHwgVCRMaXRlcmFsO1xudmFyIFQkTnVsbEtleXdvcmQgPSAyIHwgVCRLZXl3b3JkIHwgVCRMaXRlcmFsO1xudmFyIFQkVW5kZWZpbmVkS2V5d29yZCA9IDMgfCBUJEtleXdvcmQgfCBUJExpdGVyYWw7XG52YXIgVCRUaGlzU2NvcGUgPSA0IHwgVCRJZGVudGlmaWVyT3JLZXl3b3JkO1xudmFyIFQkUGFyZW50U2NvcGUgPSA1IHwgVCRJZGVudGlmaWVyT3JLZXl3b3JkO1xuXG52YXIgVCRMUGFyZW4gPSA2IHwgVCRPcGVuaW5nVG9rZW4gfCBUJEFjY2Vzc1Njb3BlVGVybWluYWwgfCBUJE1lbWJlck9yQ2FsbEV4cHJlc3Npb247XG52YXIgVCRMQnJhY2UgPSA3IHwgVCRPcGVuaW5nVG9rZW47XG52YXIgVCRQZXJpb2QgPSA4IHwgVCRNZW1iZXJFeHByZXNzaW9uIHwgVCRNZW1iZXJPckNhbGxFeHByZXNzaW9uO1xudmFyIFQkUkJyYWNlID0gOSB8IFQkQWNjZXNzU2NvcGVUZXJtaW5hbCB8IFQkQ2xvc2luZ1Rva2VuIHwgVCRFeHByZXNzaW9uVGVybWluYWw7XG52YXIgVCRSUGFyZW4gPSAxMCB8IFQkQWNjZXNzU2NvcGVUZXJtaW5hbCB8IFQkQ2xvc2luZ1Rva2VuIHwgVCRFeHByZXNzaW9uVGVybWluYWw7XG52YXIgVCRDb21tYSA9IDExIHwgVCRBY2Nlc3NTY29wZVRlcm1pbmFsO1xudmFyIFQkTEJyYWNrZXQgPSAxMiB8IFQkT3BlbmluZ1Rva2VuIHwgVCRBY2Nlc3NTY29wZVRlcm1pbmFsIHwgVCRNZW1iZXJFeHByZXNzaW9uIHwgVCRNZW1iZXJPckNhbGxFeHByZXNzaW9uO1xudmFyIFQkUkJyYWNrZXQgPSAxMyB8IFQkQ2xvc2luZ1Rva2VuIHwgVCRFeHByZXNzaW9uVGVybWluYWw7XG52YXIgVCRDb2xvbiA9IDE0IHwgVCRBY2Nlc3NTY29wZVRlcm1pbmFsO1xudmFyIFQkUXVlc3Rpb24gPSAxNTtcblxudmFyIFQkQW1wZXJzYW5kID0gMTggfCBUJEFjY2Vzc1Njb3BlVGVybWluYWw7XG52YXIgVCRCYXIgPSAxOSB8IFQkQWNjZXNzU2NvcGVUZXJtaW5hbDtcbnZhciBUJEJhckJhciA9IDIwIHwgMSA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3A7XG52YXIgVCRBbXBlcnNhbmRBbXBlcnNhbmQgPSAyMSB8IDIgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkQ2FyZXQgPSAyMiB8IDMgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkRXFFcSA9IDIzIHwgNCA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3A7XG52YXIgVCRCYW5nRXEgPSAyNCB8IDQgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkRXFFcUVxID0gMjUgfCA0IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJEJhbmdFcUVxID0gMjYgfCA0IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJEx0ID0gMjcgfCA1IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJEd0ID0gMjggfCA1IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJEx0RXEgPSAyOSB8IDUgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wO1xudmFyIFQkR3RFcSA9IDMwIHwgNSA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3A7XG52YXIgVCRJbktleXdvcmQgPSAzMSB8IDUgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wIHwgVCRLZXl3b3JkO1xudmFyIFQkSW5zdGFuY2VPZktleXdvcmQgPSAzMiB8IDUgPDwgVCRQcmVjU2hpZnQgfCBUJEJpbmFyeU9wIHwgVCRLZXl3b3JkO1xudmFyIFQkUGx1cyA9IDMzIHwgNiA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3AgfCBUJFVuYXJ5T3A7XG52YXIgVCRNaW51cyA9IDM0IHwgNiA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3AgfCBUJFVuYXJ5T3A7XG52YXIgVCRUeXBlb2ZLZXl3b3JkID0gMzUgfCBUJFVuYXJ5T3AgfCBUJEtleXdvcmQ7XG52YXIgVCRWb2lkS2V5d29yZCA9IDM2IHwgVCRVbmFyeU9wIHwgVCRLZXl3b3JkO1xudmFyIFQkU3RhciA9IDM3IHwgNyA8PCBUJFByZWNTaGlmdCB8IFQkQmluYXJ5T3A7XG52YXIgVCRQZXJjZW50ID0gMzggfCA3IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJFNsYXNoID0gMzkgfCA3IDw8IFQkUHJlY1NoaWZ0IHwgVCRCaW5hcnlPcDtcbnZhciBUJEVxID0gNDA7XG52YXIgVCRCYW5nID0gNDEgfCBUJFVuYXJ5T3A7XG5cbnZhciBLZXl3b3JkTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbktleXdvcmRMb29rdXAudHJ1ZSA9IFQkVHJ1ZUtleXdvcmQ7XG5LZXl3b3JkTG9va3VwLm51bGwgPSBUJE51bGxLZXl3b3JkO1xuS2V5d29yZExvb2t1cC5mYWxzZSA9IFQkRmFsc2VLZXl3b3JkO1xuS2V5d29yZExvb2t1cC51bmRlZmluZWQgPSBUJFVuZGVmaW5lZEtleXdvcmQ7XG5LZXl3b3JkTG9va3VwLiR0aGlzID0gVCRUaGlzU2NvcGU7XG5LZXl3b3JkTG9va3VwLiRwYXJlbnQgPSBUJFBhcmVudFNjb3BlO1xuS2V5d29yZExvb2t1cC5pbiA9IFQkSW5LZXl3b3JkO1xuS2V5d29yZExvb2t1cC5pbnN0YW5jZW9mID0gVCRJbnN0YW5jZU9mS2V5d29yZDtcbktleXdvcmRMb29rdXAudHlwZW9mID0gVCRUeXBlb2ZLZXl3b3JkO1xuS2V5d29yZExvb2t1cC52b2lkID0gVCRWb2lkS2V5d29yZDtcblxudmFyIFRva2VuVmFsdWVzID0gW2ZhbHNlLCB0cnVlLCBudWxsLCB1bmRlZmluZWQsICckdGhpcycsICckcGFyZW50JywgJygnLCAneycsICcuJywgJ30nLCAnKScsICcsJywgJ1snLCAnXScsICc6JywgJz8nLCAnXFwnJywgJ1wiJywgJyYnLCAnfCcsICd8fCcsICcmJicsICdeJywgJz09JywgJyE9JywgJz09PScsICchPT0nLCAnPCcsICc+JywgJzw9JywgJz49JywgJ2luJywgJ2luc3RhbmNlb2YnLCAnKycsICctJywgJ3R5cGVvZicsICd2b2lkJywgJyonLCAnJScsICcvJywgJz0nLCAnISddO1xuXG52YXIgY29kZXMgPSB7XG4gIEFzY2lpSWRQYXJ0OiBbMHgyNCwgMCwgMHgzMCwgMHgzQSwgMHg0MSwgMHg1QiwgMHg1RiwgMCwgMHg2MSwgMHg3Ql0sXG4gIElkU3RhcnQ6IFsweDI0LCAwLCAweDQxLCAweDVCLCAweDVGLCAwLCAweDYxLCAweDdCLCAweEFBLCAwLCAweEJBLCAwLCAweEMwLCAweEQ3LCAweEQ4LCAweEY3LCAweEY4LCAweDJCOSwgMHgyRTAsIDB4MkU1LCAweDFEMDAsIDB4MUQyNiwgMHgxRDJDLCAweDFENUQsIDB4MUQ2MiwgMHgxRDY2LCAweDFENkIsIDB4MUQ3OCwgMHgxRDc5LCAweDFEQkYsIDB4MUUwMCwgMHgxRjAwLCAweDIwNzEsIDAsIDB4MjA3RiwgMCwgMHgyMDkwLCAweDIwOUQsIDB4MjEyQSwgMHgyMTJDLCAweDIxMzIsIDAsIDB4MjE0RSwgMCwgMHgyMTYwLCAweDIxODksIDB4MkM2MCwgMHgyQzgwLCAweEE3MjIsIDB4QTc4OCwgMHhBNzhCLCAweEE3QUYsIDB4QTdCMCwgMHhBN0I4LCAweEE3RjcsIDB4QTgwMCwgMHhBQjMwLCAweEFCNUIsIDB4QUI1QywgMHhBQjY1LCAweEZCMDAsIDB4RkIwNywgMHhGRjIxLCAweEZGM0IsIDB4RkY0MSwgMHhGRjVCXSxcbiAgRGlnaXQ6IFsweDMwLCAweDNBXSxcbiAgU2tpcDogWzAsIDB4MjEsIDB4N0YsIDB4QTFdXG59O1xuXG5mdW5jdGlvbiBkZWNvbXByZXNzKGxvb2t1cCwgc2V0LCBjb21wcmVzc2VkLCB2YWx1ZSkge1xuICB2YXIgcmFuZ2VDb3VudCA9IGNvbXByZXNzZWQubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlQ291bnQ7IGkgKz0gMikge1xuICAgIHZhciBzdGFydCA9IGNvbXByZXNzZWRbaV07XG4gICAgdmFyIGVuZCA9IGNvbXByZXNzZWRbaSArIDFdO1xuICAgIGVuZCA9IGVuZCA+IDAgPyBlbmQgOiBzdGFydCArIDE7XG4gICAgaWYgKGxvb2t1cCkge1xuICAgICAgdmFyIGogPSBzdGFydDtcbiAgICAgIHdoaWxlIChqIDwgZW5kKSB7XG4gICAgICAgIGxvb2t1cFtqXSA9IHZhbHVlO1xuICAgICAgICBqKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZXQpIHtcbiAgICAgIGZvciAodmFyIGNoID0gc3RhcnQ7IGNoIDwgZW5kOyBjaCsrKSB7XG4gICAgICAgIHNldC5hZGQoY2gpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXR1cm5Ub2tlbih0b2tlbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHApIHtcbiAgICBwLm5leHQoKTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH07XG59XG5mdW5jdGlvbiB1bmV4cGVjdGVkQ2hhcmFjdGVyKHApIHtcbiAgcC5lcnIoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIFsnICsgZnJvbUNoYXJDb2RlKHAuY2gpICsgJ10nKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBBc2NpaUlkUGFydHMgPSBuZXcgU2V0KCk7XG5kZWNvbXByZXNzKG51bGwsIEFzY2lpSWRQYXJ0cywgY29kZXMuQXNjaWlJZFBhcnQsIHRydWUpO1xuXG52YXIgSWRQYXJ0cyA9IG5ldyBVaW50OEFycmF5KDB4RkZGRik7XG5kZWNvbXByZXNzKElkUGFydHMsIG51bGwsIGNvZGVzLklkU3RhcnQsIDEpO1xuZGVjb21wcmVzcyhJZFBhcnRzLCBudWxsLCBjb2Rlcy5EaWdpdCwgMSk7XG5cbnZhciBDaGFyU2Nhbm5lcnMgPSBuZXcgQXJyYXkoMHhGRkZGKTtcbnZhciBjaSA9IDA7XG53aGlsZSAoY2kgPCAweEZGRkYpIHtcbiAgQ2hhclNjYW5uZXJzW2NpXSA9IHVuZXhwZWN0ZWRDaGFyYWN0ZXI7XG4gIGNpKys7XG59XG5cbmRlY29tcHJlc3MoQ2hhclNjYW5uZXJzLCBudWxsLCBjb2Rlcy5Ta2lwLCBmdW5jdGlvbiAocCkge1xuICBwLm5leHQoKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcbmRlY29tcHJlc3MoQ2hhclNjYW5uZXJzLCBudWxsLCBjb2Rlcy5JZFN0YXJ0LCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5zY2FuSWRlbnRpZmllcigpO1xufSk7XG5kZWNvbXByZXNzKENoYXJTY2FubmVycywgbnVsbCwgY29kZXMuRGlnaXQsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLnNjYW5OdW1iZXIoZmFsc2UpO1xufSk7XG5cbkNoYXJTY2FubmVyc1sweDIyXSA9IENoYXJTY2FubmVyc1sweDI3XSA9IGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwLnNjYW5TdHJpbmcoKTtcbn07XG5DaGFyU2Nhbm5lcnNbMHg2MF0gPSBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gcC5zY2FuVGVtcGxhdGUoKTtcbn07XG5cbkNoYXJTY2FubmVyc1sweDIxXSA9IGZ1bmN0aW9uIChwKSB7XG4gIGlmIChwLm5leHQoKSAhPT0gMHgzRCkge1xuICAgIHJldHVybiBUJEJhbmc7XG4gIH1cbiAgaWYgKHAubmV4dCgpICE9PSAweDNEKSB7XG4gICAgcmV0dXJuIFQkQmFuZ0VxO1xuICB9XG4gIHAubmV4dCgpO1xuICByZXR1cm4gVCRCYW5nRXFFcTtcbn07XG5cbkNoYXJTY2FubmVyc1sweDNEXSA9IGZ1bmN0aW9uIChwKSB7XG4gIGlmIChwLm5leHQoKSAhPT0gMHgzRCkge1xuICAgIHJldHVybiBUJEVxO1xuICB9XG4gIGlmIChwLm5leHQoKSAhPT0gMHgzRCkge1xuICAgIHJldHVybiBUJEVxRXE7XG4gIH1cbiAgcC5uZXh0KCk7XG4gIHJldHVybiBUJEVxRXFFcTtcbn07XG5cbkNoYXJTY2FubmVyc1sweDI2XSA9IGZ1bmN0aW9uIChwKSB7XG4gIGlmIChwLm5leHQoKSAhPT0gMHgyNikge1xuICAgIHJldHVybiBUJEFtcGVyc2FuZDtcbiAgfVxuICBwLm5leHQoKTtcbiAgcmV0dXJuIFQkQW1wZXJzYW5kQW1wZXJzYW5kO1xufTtcblxuQ2hhclNjYW5uZXJzWzB4N0NdID0gZnVuY3Rpb24gKHApIHtcbiAgaWYgKHAubmV4dCgpICE9PSAweDdDKSB7XG4gICAgcmV0dXJuIFQkQmFyO1xuICB9XG4gIHAubmV4dCgpO1xuICByZXR1cm4gVCRCYXJCYXI7XG59O1xuXG5DaGFyU2Nhbm5lcnNbMHgyRV0gPSBmdW5jdGlvbiAocCkge1xuICBpZiAocC5uZXh0KCkgPD0gMHgzOSAmJiBwLmNoID49IDB4MzApIHtcbiAgICByZXR1cm4gcC5zY2FuTnVtYmVyKHRydWUpO1xuICB9XG4gIHJldHVybiBUJFBlcmlvZDtcbn07XG5cbkNoYXJTY2FubmVyc1sweDNDXSA9IGZ1bmN0aW9uIChwKSB7XG4gIGlmIChwLm5leHQoKSAhPT0gMHgzRCkge1xuICAgIHJldHVybiBUJEx0O1xuICB9XG4gIHAubmV4dCgpO1xuICByZXR1cm4gVCRMdEVxO1xufTtcblxuQ2hhclNjYW5uZXJzWzB4M0VdID0gZnVuY3Rpb24gKHApIHtcbiAgaWYgKHAubmV4dCgpICE9PSAweDNEKSB7XG4gICAgcmV0dXJuIFQkR3Q7XG4gIH1cbiAgcC5uZXh0KCk7XG4gIHJldHVybiBUJEd0RXE7XG59O1xuXG5DaGFyU2Nhbm5lcnNbMHgyNV0gPSByZXR1cm5Ub2tlbihUJFBlcmNlbnQpO1xuQ2hhclNjYW5uZXJzWzB4MjhdID0gcmV0dXJuVG9rZW4oVCRMUGFyZW4pO1xuQ2hhclNjYW5uZXJzWzB4MjldID0gcmV0dXJuVG9rZW4oVCRSUGFyZW4pO1xuQ2hhclNjYW5uZXJzWzB4MkFdID0gcmV0dXJuVG9rZW4oVCRTdGFyKTtcbkNoYXJTY2FubmVyc1sweDJCXSA9IHJldHVyblRva2VuKFQkUGx1cyk7XG5DaGFyU2Nhbm5lcnNbMHgyQ10gPSByZXR1cm5Ub2tlbihUJENvbW1hKTtcbkNoYXJTY2FubmVyc1sweDJEXSA9IHJldHVyblRva2VuKFQkTWludXMpO1xuQ2hhclNjYW5uZXJzWzB4MkZdID0gcmV0dXJuVG9rZW4oVCRTbGFzaCk7XG5DaGFyU2Nhbm5lcnNbMHgzQV0gPSByZXR1cm5Ub2tlbihUJENvbG9uKTtcbkNoYXJTY2FubmVyc1sweDNGXSA9IHJldHVyblRva2VuKFQkUXVlc3Rpb24pO1xuQ2hhclNjYW5uZXJzWzB4NUJdID0gcmV0dXJuVG9rZW4oVCRMQnJhY2tldCk7XG5DaGFyU2Nhbm5lcnNbMHg1RF0gPSByZXR1cm5Ub2tlbihUJFJCcmFja2V0KTtcbkNoYXJTY2FubmVyc1sweDVFXSA9IHJldHVyblRva2VuKFQkQ2FyZXQpO1xuQ2hhclNjYW5uZXJzWzB4N0JdID0gcmV0dXJuVG9rZW4oVCRMQnJhY2UpO1xuQ2hhclNjYW5uZXJzWzB4N0RdID0gcmV0dXJuVG9rZW4oVCRSQnJhY2UpO1xuXG52YXIgbWFwUHJvdG8gPSBNYXAucHJvdG90eXBlO1xuXG5mdW5jdGlvbiBfZ2V0TWFwT2JzZXJ2ZXIodGFza1F1ZXVlLCBtYXApIHtcbiAgcmV0dXJuIE1vZGlmeU1hcE9ic2VydmVyLmZvcih0YXNrUXVldWUsIG1hcCk7XG59XG5cbnZhciBNb2RpZnlNYXBPYnNlcnZlciA9IGZ1bmN0aW9uIChfTW9kaWZ5Q29sbGVjdGlvbk9ic2UyKSB7XG4gIF9pbmhlcml0cyhNb2RpZnlNYXBPYnNlcnZlciwgX01vZGlmeUNvbGxlY3Rpb25PYnNlMik7XG5cbiAgZnVuY3Rpb24gTW9kaWZ5TWFwT2JzZXJ2ZXIodGFza1F1ZXVlLCBtYXApIHtcbiAgICBcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfTW9kaWZ5Q29sbGVjdGlvbk9ic2UyLmNhbGwodGhpcywgdGFza1F1ZXVlLCBtYXApKTtcbiAgfVxuXG4gIE1vZGlmeU1hcE9ic2VydmVyLmZvciA9IGZ1bmN0aW9uIF9mb3IodGFza1F1ZXVlLCBtYXApIHtcbiAgICBpZiAoISgnX19tYXBfb2JzZXJ2ZXJfXycgaW4gbWFwKSkge1xuICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShtYXAsICdfX21hcF9vYnNlcnZlcl9fJywge1xuICAgICAgICB2YWx1ZTogTW9kaWZ5TWFwT2JzZXJ2ZXIuY3JlYXRlKHRhc2tRdWV1ZSwgbWFwKSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWFwLl9fbWFwX29ic2VydmVyX187XG4gIH07XG5cbiAgTW9kaWZ5TWFwT2JzZXJ2ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRhc2tRdWV1ZSwgbWFwKSB7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IE1vZGlmeU1hcE9ic2VydmVyKHRhc2tRdWV1ZSwgbWFwKTtcblxuICAgIHZhciBwcm90byA9IG1hcFByb3RvO1xuICAgIGlmIChwcm90by5zZXQgIT09IG1hcC5zZXQgfHwgcHJvdG8uZGVsZXRlICE9PSBtYXAuZGVsZXRlIHx8IHByb3RvLmNsZWFyICE9PSBtYXAuY2xlYXIpIHtcbiAgICAgIHByb3RvID0ge1xuICAgICAgICBzZXQ6IG1hcC5zZXQsXG4gICAgICAgIGRlbGV0ZTogbWFwLmRlbGV0ZSxcbiAgICAgICAgY2xlYXI6IG1hcC5jbGVhclxuICAgICAgfTtcbiAgICB9XG5cbiAgICBtYXAuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGhhc1ZhbHVlID0gbWFwLmhhcyhhcmd1bWVudHNbMF0pO1xuICAgICAgdmFyIHR5cGUgPSBoYXNWYWx1ZSA/ICd1cGRhdGUnIDogJ2FkZCc7XG4gICAgICB2YXIgb2xkVmFsdWUgPSBtYXAuZ2V0KGFyZ3VtZW50c1swXSk7XG4gICAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHByb3RvLnNldC5hcHBseShtYXAsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoIWhhc1ZhbHVlIHx8IG9sZFZhbHVlICE9PSBtYXAuZ2V0KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgb2JzZXJ2ZXIuYWRkQ2hhbmdlUmVjb3JkKHtcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIG9iamVjdDogbWFwLFxuICAgICAgICAgIGtleTogYXJndW1lbnRzWzBdLFxuICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXRob2RDYWxsUmVzdWx0O1xuICAgIH07XG5cbiAgICBtYXAuZGVsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGhhc1ZhbHVlID0gbWFwLmhhcyhhcmd1bWVudHNbMF0pO1xuICAgICAgdmFyIG9sZFZhbHVlID0gbWFwLmdldChhcmd1bWVudHNbMF0pO1xuICAgICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSBwcm90by5kZWxldGUuYXBwbHkobWFwLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgIG9ic2VydmVyLmFkZENoYW5nZVJlY29yZCh7XG4gICAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgICAgb2JqZWN0OiBtYXAsXG4gICAgICAgICAga2V5OiBhcmd1bWVudHNbMF0sXG4gICAgICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gICAgfTtcblxuICAgIG1hcC5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtZXRob2RDYWxsUmVzdWx0ID0gcHJvdG8uY2xlYXIuYXBwbHkobWFwLCBhcmd1bWVudHMpO1xuICAgICAgb2JzZXJ2ZXIuYWRkQ2hhbmdlUmVjb3JkKHtcbiAgICAgICAgdHlwZTogJ2NsZWFyJyxcbiAgICAgICAgb2JqZWN0OiBtYXBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiBvYnNlcnZlcjtcbiAgfTtcblxuICByZXR1cm4gTW9kaWZ5TWFwT2JzZXJ2ZXI7XG59KE1vZGlmeUNvbGxlY3Rpb25PYnNlcnZlcik7XG5cbnZhciBlbUxvZ2dlciA9IExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCdldmVudC1tYW5hZ2VyJyk7XG5cbmZ1bmN0aW9uIGZpbmRPcmlnaW5hbEV2ZW50VGFyZ2V0KGV2ZW50KSB7XG4gIHJldHVybiBldmVudC5jb21wb3NlZFBhdGggJiYgZXZlbnQuY29tcG9zZWRQYXRoKClbMF0gfHwgZXZlbnQuZGVlcFBhdGggJiYgZXZlbnQuZGVlcFBhdGgoKVswXSB8fCBldmVudC5wYXRoICYmIGV2ZW50LnBhdGhbMF0gfHwgZXZlbnQudGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oKSB7XG4gIHRoaXMuc3RhbmRhcmRTdG9wUHJvcGFnYXRpb24oKTtcbiAgdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVDYXB0dXJlZEV2ZW50KGV2ZW50KSB7XG4gIGV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlO1xuICB2YXIgdGFyZ2V0ID0gZmluZE9yaWdpbmFsRXZlbnRUYXJnZXQoZXZlbnQpO1xuXG4gIHZhciBvcmRlcmVkQ2FsbGJhY2tzID0gW107XG5cbiAgd2hpbGUgKHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQuY2FwdHVyZWRDYWxsYmFja3MpIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IHRhcmdldC5jYXB0dXJlZENhbGxiYWNrc1tldmVudC50eXBlXTtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uICE9PSBzdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICBldmVudC5zdGFuZGFyZFN0b3BQcm9wYWdhdGlvbiA9IGV2ZW50LnN0b3BQcm9wYWdhdGlvbjtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSBzdG9wUHJvcGFnYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgb3JkZXJlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IG9yZGVyZWRDYWxsYmFja3MubGVuZ3RoIC0gMTsgaSA+PSAwICYmICFldmVudC5wcm9wYWdhdGlvblN0b3BwZWQ7IGktLSkge1xuICAgIHZhciBvcmRlcmVkQ2FsbGJhY2sgPSBvcmRlcmVkQ2FsbGJhY2tzW2ldO1xuICAgIGlmICgnaGFuZGxlRXZlbnQnIGluIG9yZGVyZWRDYWxsYmFjaykge1xuICAgICAgb3JkZXJlZENhbGxiYWNrLmhhbmRsZUV2ZW50KGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3JkZXJlZENhbGxiYWNrKGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cblxudmFyIENhcHR1cmVkSGFuZGxlckVudHJ5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDYXB0dXJlZEhhbmRsZXJFbnRyeShldmVudE5hbWUpIHtcbiAgICBcblxuICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xuICAgIHRoaXMuY291bnQgPSAwO1xuICB9XG5cbiAgQ2FwdHVyZWRIYW5kbGVyRW50cnkucHJvdG90eXBlLmluY3JlbWVudCA9IGZ1bmN0aW9uIGluY3JlbWVudCgpIHtcbiAgICB0aGlzLmNvdW50Kys7XG5cbiAgICBpZiAodGhpcy5jb3VudCA9PT0gMSkge1xuICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsIGhhbmRsZUNhcHR1cmVkRXZlbnQsIHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBDYXB0dXJlZEhhbmRsZXJFbnRyeS5wcm90b3R5cGUuZGVjcmVtZW50ID0gZnVuY3Rpb24gZGVjcmVtZW50KCkge1xuICAgIGlmICh0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICBlbUxvZ2dlci53YXJuKCdUaGUgc2FtZSBFdmVudExpc3RlbmVyIHdhcyBkaXNwb3NlZCBtdWx0aXBsZSB0aW1lcy4nKTtcbiAgICB9IGVsc2UgaWYgKC0tdGhpcy5jb3VudCA9PT0gMCkge1xuICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsIGhhbmRsZUNhcHR1cmVkRXZlbnQsIHRydWUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ2FwdHVyZWRIYW5kbGVyRW50cnk7XG59KCk7XG5cbnZhciBEZWxlZ2F0ZUhhbmRsZXJFbnRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGVsZWdhdGVIYW5kbGVyRW50cnkoZXZlbnROYW1lLCBldmVudE1hbmFnZXIpIHtcbiAgICBcblxuICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xuICAgIHRoaXMuY291bnQgPSAwO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyID0gZXZlbnRNYW5hZ2VyO1xuICB9XG5cbiAgRGVsZWdhdGVIYW5kbGVyRW50cnkucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZTtcbiAgICB2YXIgdGFyZ2V0ID0gZmluZE9yaWdpbmFsRXZlbnRUYXJnZXQoZXZlbnQpO1xuXG4gICAgd2hpbGUgKHRhcmdldCAmJiAhZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKSB7XG4gICAgICBpZiAodGFyZ2V0LmRlbGVnYXRlZENhbGxiYWNrcykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXJnZXQuZGVsZWdhdGVkQ2FsbGJhY2tzW2V2ZW50LnR5cGVdO1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uICE9PSBzdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgIGV2ZW50LnN0YW5kYXJkU3RvcFByb3BhZ2F0aW9uID0gZXZlbnQuc3RvcFByb3BhZ2F0aW9uO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2hhbmRsZUV2ZW50JyBpbiBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2suaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgIHZhciBzaG91bGRFc2NhcGVTaGFkb3dSb290ID0gdGhpcy5ldmVudE1hbmFnZXIuZXNjYXBlU2hhZG93Um9vdCAmJiBwYXJlbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xuXG4gICAgICB0YXJnZXQgPSBzaG91bGRFc2NhcGVTaGFkb3dSb290ID8gcGFyZW50Lmhvc3QgOiBwYXJlbnQ7XG4gICAgfVxuICB9O1xuXG4gIERlbGVnYXRlSGFuZGxlckVudHJ5LnByb3RvdHlwZS5pbmNyZW1lbnQgPSBmdW5jdGlvbiBpbmNyZW1lbnQoKSB7XG4gICAgdGhpcy5jb3VudCsrO1xuXG4gICAgaWYgKHRoaXMuY291bnQgPT09IDEpIHtcbiAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHRoaXMuZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIERlbGVnYXRlSGFuZGxlckVudHJ5LnByb3RvdHlwZS5kZWNyZW1lbnQgPSBmdW5jdGlvbiBkZWNyZW1lbnQoKSB7XG4gICAgaWYgKHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgIGVtTG9nZ2VyLndhcm4oJ1RoZSBzYW1lIEV2ZW50TGlzdGVuZXIgd2FzIGRpc3Bvc2VkIG11bHRpcGxlIHRpbWVzLicpO1xuICAgIH0gZWxzZSBpZiAoLS10aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSwgdGhpcywgZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gRGVsZWdhdGVIYW5kbGVyRW50cnk7XG59KCk7XG5cbnZhciBEZWxlZ2F0aW9uRW50cnlIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEZWxlZ2F0aW9uRW50cnlIYW5kbGVyKGVudHJ5LCBsb29rdXAsIHRhcmdldEV2ZW50KSB7XG4gICAgXG5cbiAgICB0aGlzLmVudHJ5ID0gZW50cnk7XG4gICAgdGhpcy5sb29rdXAgPSBsb29rdXA7XG4gICAgdGhpcy50YXJnZXRFdmVudCA9IHRhcmdldEV2ZW50O1xuICB9XG5cbiAgRGVsZWdhdGlvbkVudHJ5SGFuZGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMubG9va3VwW3RoaXMudGFyZ2V0RXZlbnRdKSB7XG4gICAgICB0aGlzLmVudHJ5LmRlY3JlbWVudCgpO1xuICAgICAgdGhpcy5sb29rdXBbdGhpcy50YXJnZXRFdmVudF0gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbUxvZ2dlci53YXJuKCdDYWxsaW5nIC5kaXNwb3NlKCkgb24gYWxyZWFkeSBkaXNwb3NlZCBldmVudExpc3RlbmVyJyk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBEZWxlZ2F0aW9uRW50cnlIYW5kbGVyO1xufSgpO1xuXG52YXIgRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudEhhbmRsZXIodGFyZ2V0LCB0YXJnZXRFdmVudCwgY2FsbGJhY2spIHtcbiAgICBcblxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMudGFyZ2V0RXZlbnQgPSB0YXJnZXRFdmVudDtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBFdmVudEhhbmRsZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy50YXJnZXRFdmVudCwgdGhpcy5jYWxsYmFjayk7XG4gIH07XG5cbiAgcmV0dXJuIEV2ZW50SGFuZGxlcjtcbn0oKTtcblxudmFyIERlZmF1bHRFdmVudFN0cmF0ZWd5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEZWZhdWx0RXZlbnRTdHJhdGVneShldmVudE1hbmFnZXIpIHtcbiAgICBcblxuICAgIHRoaXMuZGVsZWdhdGVkSGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLmNhcHR1cmVkSGFuZGxlcnMgPSB7fTtcblxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyID0gZXZlbnRNYW5hZ2VyO1xuICB9XG5cbiAgRGVmYXVsdEV2ZW50U3RyYXRlZ3kucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSh0YXJnZXQsIHRhcmdldEV2ZW50LCBjYWxsYmFjaywgc3RyYXRlZ3ksIGRpc3Bvc2FibGUpIHtcbiAgICB2YXIgZGVsZWdhdGVkSGFuZGxlcnMgPSB2b2lkIDA7XG4gICAgdmFyIGNhcHR1cmVkSGFuZGxlcnMgPSB2b2lkIDA7XG4gICAgdmFyIGhhbmRsZXJFbnRyeSA9IHZvaWQgMDtcblxuICAgIGlmIChzdHJhdGVneSA9PT0gZGVsZWdhdGlvblN0cmF0ZWd5LmJ1YmJsaW5nKSB7XG4gICAgICBkZWxlZ2F0ZWRIYW5kbGVycyA9IHRoaXMuZGVsZWdhdGVkSGFuZGxlcnM7XG4gICAgICBoYW5kbGVyRW50cnkgPSBkZWxlZ2F0ZWRIYW5kbGVyc1t0YXJnZXRFdmVudF0gfHwgKGRlbGVnYXRlZEhhbmRsZXJzW3RhcmdldEV2ZW50XSA9IG5ldyBEZWxlZ2F0ZUhhbmRsZXJFbnRyeSh0YXJnZXRFdmVudCwgdGhpcy5ldmVudE1hbmFnZXIpKTtcbiAgICAgIHZhciBkZWxlZ2F0ZWRDYWxsYmFja3MgPSB0YXJnZXQuZGVsZWdhdGVkQ2FsbGJhY2tzIHx8ICh0YXJnZXQuZGVsZWdhdGVkQ2FsbGJhY2tzID0ge30pO1xuICAgICAgaWYgKCFkZWxlZ2F0ZWRDYWxsYmFja3NbdGFyZ2V0RXZlbnRdKSB7XG4gICAgICAgIGhhbmRsZXJFbnRyeS5pbmNyZW1lbnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtTG9nZ2VyLndhcm4oJ092ZXJyaWRpbmcgcHJldmlvdXMgY2FsbGJhY2sgZm9yIGV2ZW50IGxpc3RlbmVyJywgeyBldmVudDogdGFyZ2V0RXZlbnQsIGNhbGxiYWNrOiBjYWxsYmFjaywgcHJldmlvdXNDYWxsYmFjazogZGVsZWdhdGVkQ2FsbGJhY2tzW3RhcmdldEV2ZW50XSB9KTtcbiAgICAgIH1cbiAgICAgIGRlbGVnYXRlZENhbGxiYWNrc1t0YXJnZXRFdmVudF0gPSBjYWxsYmFjaztcblxuICAgICAgaWYgKGRpc3Bvc2FibGUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxlZ2F0aW9uRW50cnlIYW5kbGVyKGhhbmRsZXJFbnRyeSwgZGVsZWdhdGVkQ2FsbGJhY2tzLCB0YXJnZXRFdmVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhbmRsZXJFbnRyeS5kZWNyZW1lbnQoKTtcbiAgICAgICAgZGVsZWdhdGVkQ2FsbGJhY2tzW3RhcmdldEV2ZW50XSA9IG51bGw7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoc3RyYXRlZ3kgPT09IGRlbGVnYXRpb25TdHJhdGVneS5jYXB0dXJpbmcpIHtcbiAgICAgIGNhcHR1cmVkSGFuZGxlcnMgPSB0aGlzLmNhcHR1cmVkSGFuZGxlcnM7XG4gICAgICBoYW5kbGVyRW50cnkgPSBjYXB0dXJlZEhhbmRsZXJzW3RhcmdldEV2ZW50XSB8fCAoY2FwdHVyZWRIYW5kbGVyc1t0YXJnZXRFdmVudF0gPSBuZXcgQ2FwdHVyZWRIYW5kbGVyRW50cnkodGFyZ2V0RXZlbnQpKTtcbiAgICAgIHZhciBjYXB0dXJlZENhbGxiYWNrcyA9IHRhcmdldC5jYXB0dXJlZENhbGxiYWNrcyB8fCAodGFyZ2V0LmNhcHR1cmVkQ2FsbGJhY2tzID0ge30pO1xuICAgICAgaWYgKCFjYXB0dXJlZENhbGxiYWNrc1t0YXJnZXRFdmVudF0pIHtcbiAgICAgICAgaGFuZGxlckVudHJ5LmluY3JlbWVudCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1Mb2dnZXIuZXJyb3IoJ2FscmVhZHkgaGF2ZSBhIGNhbGxiYWNrIGZvciBldmVudCcsIHsgZXZlbnQ6IHRhcmdldEV2ZW50LCBjYWxsYmFjazogY2FsbGJhY2sgfSk7XG4gICAgICB9XG4gICAgICBjYXB0dXJlZENhbGxiYWNrc1t0YXJnZXRFdmVudF0gPSBjYWxsYmFjaztcblxuICAgICAgaWYgKGRpc3Bvc2FibGUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxlZ2F0aW9uRW50cnlIYW5kbGVyKGhhbmRsZXJFbnRyeSwgY2FwdHVyZWRDYWxsYmFja3MsIHRhcmdldEV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFuZGxlckVudHJ5LmRlY3JlbWVudCgpO1xuICAgICAgICBjYXB0dXJlZENhbGxiYWNrc1t0YXJnZXRFdmVudF0gPSBudWxsO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0YXJnZXRFdmVudCwgY2FsbGJhY2spO1xuXG4gICAgaWYgKGRpc3Bvc2FibGUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBuZXcgRXZlbnRIYW5kbGVyKHRhcmdldCwgdGFyZ2V0RXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGFyZ2V0RXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBEZWZhdWx0RXZlbnRTdHJhdGVneTtcbn0oKTtcblxuZXhwb3J0IHZhciBkZWxlZ2F0aW9uU3RyYXRlZ3kgPSB7XG4gIG5vbmU6IDAsXG4gIGNhcHR1cmluZzogMSxcbiAgYnViYmxpbmc6IDJcbn07XG5cbmV4cG9ydCB2YXIgRXZlbnRNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudE1hbmFnZXIoKSB7XG4gICAgdmFyIGVzY2FwZVNoYWRvd1Jvb3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG4gICAgXG5cbiAgICB0aGlzLmVsZW1lbnRIYW5kbGVyTG9va3VwID0ge307XG4gICAgdGhpcy5ldmVudFN0cmF0ZWd5TG9va3VwID0ge307XG4gICAgdGhpcy5lc2NhcGVTaGFkb3dSb290ID0gZXNjYXBlU2hhZG93Um9vdDtcblxuICAgIHRoaXMucmVnaXN0ZXJFbGVtZW50Q29uZmlnKHtcbiAgICAgIHRhZ05hbWU6ICdpbnB1dCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlOiBbJ2NoYW5nZScsICdpbnB1dCddLFxuICAgICAgICBjaGVja2VkOiBbJ2NoYW5nZScsICdpbnB1dCddLFxuICAgICAgICBmaWxlczogWydjaGFuZ2UnLCAnaW5wdXQnXVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlckVsZW1lbnRDb25maWcoe1xuICAgICAgdGFnTmFtZTogJ3RleHRhcmVhJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmFsdWU6IFsnY2hhbmdlJywgJ2lucHV0J11cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXJFbGVtZW50Q29uZmlnKHtcbiAgICAgIHRhZ05hbWU6ICdzZWxlY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2YWx1ZTogWydjaGFuZ2UnXVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlckVsZW1lbnRDb25maWcoe1xuICAgICAgdGFnTmFtZTogJ2NvbnRlbnQgZWRpdGFibGUnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2YWx1ZTogWydjaGFuZ2UnLCAnaW5wdXQnLCAnYmx1cicsICdrZXl1cCcsICdwYXN0ZSddXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyRWxlbWVudENvbmZpZyh7XG4gICAgICB0YWdOYW1lOiAnc2Nyb2xsYWJsZSBlbGVtZW50JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc2Nyb2xsVG9wOiBbJ3Njcm9sbCddLFxuICAgICAgICBzY3JvbGxMZWZ0OiBbJ3Njcm9sbCddXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlZmF1bHRFdmVudFN0cmF0ZWd5ID0gbmV3IERlZmF1bHRFdmVudFN0cmF0ZWd5KHRoaXMpO1xuICB9XG5cbiAgRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5yZWdpc3RlckVsZW1lbnRDb25maWcgPSBmdW5jdGlvbiByZWdpc3RlckVsZW1lbnRDb25maWcoY29uZmlnKSB7XG4gICAgdmFyIHRhZ05hbWUgPSBjb25maWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gY29uZmlnLnByb3BlcnRpZXM7XG4gICAgdmFyIHByb3BlcnR5TmFtZSA9IHZvaWQgMDtcblxuICAgIHZhciBsb29rdXAgPSB0aGlzLmVsZW1lbnRIYW5kbGVyTG9va3VwW3RhZ05hbWVdID0ge307XG5cbiAgICBmb3IgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIGxvb2t1cFtwcm9wZXJ0eU5hbWVdID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBFdmVudE1hbmFnZXIucHJvdG90eXBlLnJlZ2lzdGVyRXZlbnRTdHJhdGVneSA9IGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRTdHJhdGVneShldmVudE5hbWUsIHN0cmF0ZWd5KSB7XG4gICAgdGhpcy5ldmVudFN0cmF0ZWd5TG9va3VwW2V2ZW50TmFtZV0gPSBzdHJhdGVneTtcbiAgfTtcblxuICBFdmVudE1hbmFnZXIucHJvdG90eXBlLmdldEVsZW1lbnRIYW5kbGVyID0gZnVuY3Rpb24gZ2V0RWxlbWVudEhhbmRsZXIodGFyZ2V0LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICB2YXIgdGFnTmFtZSA9IHZvaWQgMDtcbiAgICB2YXIgbG9va3VwID0gdGhpcy5lbGVtZW50SGFuZGxlckxvb2t1cDtcblxuICAgIGlmICh0YXJnZXQudGFnTmFtZSkge1xuICAgICAgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChsb29rdXBbdGFnTmFtZV0gJiYgbG9va3VwW3RhZ05hbWVdW3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFdmVudFN1YnNjcmliZXIobG9va3VwW3RhZ05hbWVdW3Byb3BlcnR5TmFtZV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAndGV4dENvbnRlbnQnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFdmVudFN1YnNjcmliZXIobG9va3VwWydjb250ZW50IGVkaXRhYmxlJ10udmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnc2Nyb2xsVG9wJyB8fCBwcm9wZXJ0eU5hbWUgPT09ICdzY3JvbGxMZWZ0Jykge1xuICAgICAgICByZXR1cm4gbmV3IEV2ZW50U3Vic2NyaWJlcihsb29rdXBbJ3Njcm9sbGFibGUgZWxlbWVudCddW3Byb3BlcnR5TmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIEV2ZW50TWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodGFyZ2V0LCB0YXJnZXRFdmVudCwgY2FsbGJhY2tPckxpc3RlbmVyLCBkZWxlZ2F0ZSwgZGlzcG9zYWJsZSkge1xuICAgIHJldHVybiAodGhpcy5ldmVudFN0cmF0ZWd5TG9va3VwW3RhcmdldEV2ZW50XSB8fCB0aGlzLmRlZmF1bHRFdmVudFN0cmF0ZWd5KS5zdWJzY3JpYmUodGFyZ2V0LCB0YXJnZXRFdmVudCwgY2FsbGJhY2tPckxpc3RlbmVyLCBkZWxlZ2F0ZSwgZGlzcG9zYWJsZSk7XG4gIH07XG5cbiAgcmV0dXJuIEV2ZW50TWFuYWdlcjtcbn0oKTtcblxuZXhwb3J0IHZhciBFdmVudFN1YnNjcmliZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEV2ZW50U3Vic2NyaWJlcihldmVudHMpIHtcbiAgICBcblxuICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbDtcbiAgfVxuXG4gIEV2ZW50U3Vic2NyaWJlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGVsZW1lbnQsIGNhbGxiYWNrT3JMaXN0ZW5lcikge1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVyID0gY2FsbGJhY2tPckxpc3RlbmVyO1xuXG4gICAgdmFyIGV2ZW50cyA9IHRoaXMuZXZlbnRzO1xuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGV2ZW50cy5sZW5ndGg7IGlpID4gaTsgKytpKSB7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRzW2ldLCBjYWxsYmFja09yTGlzdGVuZXIpO1xuICAgIH1cbiAgfTtcblxuICBFdmVudFN1YnNjcmliZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLmVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgdmFyIGNhbGxiYWNrT3JMaXN0ZW5lciA9IHRoaXMuaGFuZGxlcjtcbiAgICB2YXIgZXZlbnRzID0gdGhpcy5ldmVudHM7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZXZlbnRzLmxlbmd0aDsgaWkgPiBpOyArK2kpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudHNbaV0sIGNhbGxiYWNrT3JMaXN0ZW5lcik7XG4gICAgfVxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuaGFuZGxlciA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIEV2ZW50U3Vic2NyaWJlcjtcbn0oKTtcblxuZXhwb3J0IHZhciBEaXJ0eUNoZWNrZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIERpcnR5Q2hlY2tlcigpIHtcbiAgICBcblxuICAgIHRoaXMudHJhY2tlZCA9IFtdO1xuICAgIHRoaXMuY2hlY2tEZWxheSA9IDEyMDtcbiAgfVxuXG4gIERpcnR5Q2hlY2tlci5wcm90b3R5cGUuYWRkUHJvcGVydHkgPSBmdW5jdGlvbiBhZGRQcm9wZXJ0eShwcm9wZXJ0eSkge1xuICAgIHZhciB0cmFja2VkID0gdGhpcy50cmFja2VkO1xuXG4gICAgdHJhY2tlZC5wdXNoKHByb3BlcnR5KTtcblxuICAgIGlmICh0cmFja2VkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5zY2hlZHVsZURpcnR5Q2hlY2soKTtcbiAgICB9XG4gIH07XG5cbiAgRGlydHlDaGVja2VyLnByb3RvdHlwZS5yZW1vdmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5KSB7XG4gICAgdmFyIHRyYWNrZWQgPSB0aGlzLnRyYWNrZWQ7XG4gICAgdHJhY2tlZC5zcGxpY2UodHJhY2tlZC5pbmRleE9mKHByb3BlcnR5KSwgMSk7XG4gIH07XG5cbiAgRGlydHlDaGVja2VyLnByb3RvdHlwZS5zY2hlZHVsZURpcnR5Q2hlY2sgPSBmdW5jdGlvbiBzY2hlZHVsZURpcnR5Q2hlY2soKSB7XG4gICAgdmFyIF90aGlzMjIgPSB0aGlzO1xuXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyMi5jaGVjaygpO1xuICAgIH0sIHRoaXMuY2hlY2tEZWxheSk7XG4gIH07XG5cbiAgRGlydHlDaGVja2VyLnByb3RvdHlwZS5jaGVjayA9IGZ1bmN0aW9uIGNoZWNrKCkge1xuICAgIHZhciB0cmFja2VkID0gdGhpcy50cmFja2VkO1xuICAgIHZhciBpID0gdHJhY2tlZC5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHRyYWNrZWRbaV07XG5cbiAgICAgIGlmIChjdXJyZW50LmlzRGlydHkoKSkge1xuICAgICAgICBjdXJyZW50LmNhbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHJhY2tlZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVEaXJ0eUNoZWNrKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBEaXJ0eUNoZWNrZXI7XG59KCk7XG5cbmV4cG9ydCB2YXIgRGlydHlDaGVja1Byb3BlcnR5ID0gKF9kZWM1ID0gc3Vic2NyaWJlckNvbGxlY3Rpb24oKSwgX2RlYzUoX2NsYXNzNSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGlydHlDaGVja1Byb3BlcnR5KGRpcnR5Q2hlY2tlciwgb2JqLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICBcblxuICAgIHRoaXMuZGlydHlDaGVja2VyID0gZGlydHlDaGVja2VyO1xuICAgIHRoaXMub2JqID0gb2JqO1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICB9XG5cbiAgRGlydHlDaGVja1Byb3BlcnR5LnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9ialt0aGlzLnByb3BlcnR5TmFtZV07XG4gIH07XG5cbiAgRGlydHlDaGVja1Byb3BlcnR5LnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eU5hbWVdID0gbmV3VmFsdWU7XG4gIH07XG5cbiAgRGlydHlDaGVja1Byb3BlcnR5LnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gY2FsbCgpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm9sZFZhbHVlO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcblxuICAgIHRoaXMuY2FsbFN1YnNjcmliZXJzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG5cbiAgICB0aGlzLm9sZFZhbHVlID0gbmV3VmFsdWU7XG4gIH07XG5cbiAgRGlydHlDaGVja1Byb3BlcnR5LnByb3RvdHlwZS5pc0RpcnR5ID0gZnVuY3Rpb24gaXNEaXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vbGRWYWx1ZSAhPT0gdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eU5hbWVdO1xuICB9O1xuXG4gIERpcnR5Q2hlY2tQcm9wZXJ0eS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgaWYgKCF0aGlzLmhhc1N1YnNjcmliZXJzKCkpIHtcbiAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICB0aGlzLmRpcnR5Q2hlY2tlci5hZGRQcm9wZXJ0eSh0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hZGRTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgfTtcblxuICBEaXJ0eUNoZWNrUHJvcGVydHkucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICBpZiAodGhpcy5yZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKSAmJiAhdGhpcy5oYXNTdWJzY3JpYmVycygpKSB7XG4gICAgICB0aGlzLmRpcnR5Q2hlY2tlci5yZW1vdmVQcm9wZXJ0eSh0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIERpcnR5Q2hlY2tQcm9wZXJ0eTtcbn0oKSkgfHwgX2NsYXNzNSk7XG5cbnZhciBsb2dnZXIgPSBMb2dNYW5hZ2VyLmdldExvZ2dlcigncHJvcGVydHktb2JzZXJ2YXRpb24nKTtcblxuZXhwb3J0IHZhciBwcm9wZXJ0eUFjY2Vzc29yID0ge1xuICBnZXRWYWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUob2JqLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICByZXR1cm4gb2JqW3Byb3BlcnR5TmFtZV07XG4gIH0sXG4gIHNldFZhbHVlOiBmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSwgb2JqLCBwcm9wZXJ0eU5hbWUpIHtcbiAgICBvYmpbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIFByaW1pdGl2ZU9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQcmltaXRpdmVPYnNlcnZlcihwcmltaXRpdmUsIHByb3BlcnR5TmFtZSkge1xuICAgIFxuXG4gICAgdGhpcy5kb05vdENhY2hlID0gdHJ1ZTtcblxuICAgIHRoaXMucHJpbWl0aXZlID0gcHJpbWl0aXZlO1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICB9XG5cbiAgUHJpbWl0aXZlT2JzZXJ2ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJpbWl0aXZlW3RoaXMucHJvcGVydHlOYW1lXTtcbiAgfTtcblxuICBQcmltaXRpdmVPYnNlcnZlci5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiBzZXRWYWx1ZSgpIHtcbiAgICB2YXIgdHlwZSA9IF90eXBlb2YodGhpcy5wcmltaXRpdmUpO1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlICcgKyB0aGlzLnByb3BlcnR5TmFtZSArICcgcHJvcGVydHkgb2YgYSAnICsgdHlwZSArICcgKCcgKyB0aGlzLnByaW1pdGl2ZSArICcpIGNhbm5vdCBiZSBhc3NpZ25lZC4nKTtcbiAgfTtcblxuICBQcmltaXRpdmVPYnNlcnZlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKCkge307XG5cbiAgUHJpbWl0aXZlT2JzZXJ2ZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7fTtcblxuICByZXR1cm4gUHJpbWl0aXZlT2JzZXJ2ZXI7XG59KCk7XG5cbmV4cG9ydCB2YXIgU2V0dGVyT2JzZXJ2ZXIgPSAoX2RlYzYgPSBzdWJzY3JpYmVyQ29sbGVjdGlvbigpLCBfZGVjNihfY2xhc3M3ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXR0ZXJPYnNlcnZlcih0YXNrUXVldWUsIG9iaiwgcHJvcGVydHlOYW1lKSB7XG4gICAgXG5cbiAgICB0aGlzLnRhc2tRdWV1ZSA9IHRhc2tRdWV1ZTtcbiAgICB0aGlzLm9iaiA9IG9iajtcbiAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgICB0aGlzLnF1ZXVlZCA9IGZhbHNlO1xuICAgIHRoaXMub2JzZXJ2aW5nID0gZmFsc2U7XG4gIH1cblxuICBTZXR0ZXJPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eU5hbWVdO1xuICB9O1xuXG4gIFNldHRlck9ic2VydmVyLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eU5hbWVdID0gbmV3VmFsdWU7XG4gIH07XG5cbiAgU2V0dGVyT2JzZXJ2ZXIucHJvdG90eXBlLmdldHRlclZhbHVlID0gZnVuY3Rpb24gZ2V0dGVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlO1xuICB9O1xuXG4gIFNldHRlck9ic2VydmVyLnByb3RvdHlwZS5zZXR0ZXJWYWx1ZSA9IGZ1bmN0aW9uIHNldHRlclZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMucXVldWVkKSB7XG4gICAgICAgIHRoaXMub2xkVmFsdWUgPSBvbGRWYWx1ZTtcbiAgICAgICAgdGhpcy5xdWV1ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRhc2tRdWV1ZS5xdWV1ZU1pY3JvVGFzayh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgU2V0dGVyT2JzZXJ2ZXIucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiBjYWxsKCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMub2xkVmFsdWU7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5vbGRWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlO1xuXG4gICAgdGhpcy5xdWV1ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuY2FsbFN1YnNjcmliZXJzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gIH07XG5cbiAgU2V0dGVyT2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIGlmICghdGhpcy5vYnNlcnZpbmcpIHtcbiAgICAgIHRoaXMuY29udmVydFByb3BlcnR5KCk7XG4gICAgfVxuICAgIHRoaXMuYWRkU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSk7XG4gIH07XG5cbiAgU2V0dGVyT2JzZXJ2ZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICB0aGlzLnJlbW92ZVN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpO1xuICB9O1xuXG4gIFNldHRlck9ic2VydmVyLnByb3RvdHlwZS5jb252ZXJ0UHJvcGVydHkgPSBmdW5jdGlvbiBjb252ZXJ0UHJvcGVydHkoKSB7XG4gICAgdGhpcy5vYnNlcnZpbmcgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFZhbHVlID0gdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eU5hbWVdO1xuICAgIHRoaXMuc2V0VmFsdWUgPSB0aGlzLnNldHRlclZhbHVlO1xuICAgIHRoaXMuZ2V0VmFsdWUgPSB0aGlzLmdldHRlclZhbHVlO1xuXG4gICAgaWYgKCFSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRoaXMub2JqLCB0aGlzLnByb3BlcnR5TmFtZSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdGhpcy5wcm9wZXJ0eU5hbWUgaW4gdGhpcy5vYmogPyB0aGlzLm9iai5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0aGlzLnByb3BlcnR5TmFtZSkgOiB0cnVlLFxuICAgICAgZ2V0OiB0aGlzLmdldFZhbHVlLmJpbmQodGhpcyksXG4gICAgICBzZXQ6IHRoaXMuc2V0VmFsdWUuYmluZCh0aGlzKVxuICAgIH0pKSB7XG4gICAgICBsb2dnZXIud2FybignQ2Fubm90IG9ic2VydmUgcHJvcGVydHkgXFwnJyArIHRoaXMucHJvcGVydHlOYW1lICsgJ1xcJyBvZiBvYmplY3QnLCB0aGlzLm9iaik7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTZXR0ZXJPYnNlcnZlcjtcbn0oKSkgfHwgX2NsYXNzNyk7XG5cbmV4cG9ydCB2YXIgWExpbmtBdHRyaWJ1dGVPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gWExpbmtBdHRyaWJ1dGVPYnNlcnZlcihlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgICBcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7XG4gICAgdGhpcy5hdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZTtcbiAgfVxuXG4gIFhMaW5rQXR0cmlidXRlT2JzZXJ2ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRoaXMuYXR0cmlidXRlTmFtZSk7XG4gIH07XG5cbiAgWExpbmtBdHRyaWJ1dGVPYnNlcnZlci5wcm90b3R5cGUuc2V0VmFsdWUgPSBmdW5jdGlvbiBzZXRWYWx1ZShuZXdWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0aGlzLmF0dHJpYnV0ZU5hbWUsIG5ld1ZhbHVlKTtcbiAgfTtcblxuICBYTGlua0F0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPYnNlcnZhdGlvbiBvZiBhIFwiJyArIHRoaXMuZWxlbWVudC5ub2RlTmFtZSArICdcIiBlbGVtZW50XFwncyBcIicgKyB0aGlzLnByb3BlcnR5TmFtZSArICdcIiBwcm9wZXJ0eSBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICB9O1xuXG4gIHJldHVybiBYTGlua0F0dHJpYnV0ZU9ic2VydmVyO1xufSgpO1xuXG5leHBvcnQgdmFyIGRhdGFBdHRyaWJ1dGVBY2Nlc3NvciA9IHtcbiAgZ2V0VmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgcHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIG9iai5nZXRBdHRyaWJ1dGUocHJvcGVydHlOYW1lKTtcbiAgfSxcbiAgc2V0VmFsdWU6IGZ1bmN0aW9uIHNldFZhbHVlKHZhbHVlLCBvYmosIHByb3BlcnR5TmFtZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmoucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5zZXRBdHRyaWJ1dGUocHJvcGVydHlOYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgdmFyIERhdGFBdHRyaWJ1dGVPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGF0YUF0dHJpYnV0ZU9ic2VydmVyKGVsZW1lbnQsIHByb3BlcnR5TmFtZSkge1xuICAgIFxuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgfVxuXG4gIERhdGFBdHRyaWJ1dGVPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSh0aGlzLnByb3BlcnR5TmFtZSk7XG4gIH07XG5cbiAgRGF0YUF0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgaWYgKG5ld1ZhbHVlID09PSBudWxsIHx8IG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMucHJvcGVydHlOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5wcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlKTtcbiAgfTtcblxuICBEYXRhQXR0cmlidXRlT2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09ic2VydmF0aW9uIG9mIGEgXCInICsgdGhpcy5lbGVtZW50Lm5vZGVOYW1lICsgJ1wiIGVsZW1lbnRcXCdzIFwiJyArIHRoaXMucHJvcGVydHlOYW1lICsgJ1wiIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gIH07XG5cbiAgcmV0dXJuIERhdGFBdHRyaWJ1dGVPYnNlcnZlcjtcbn0oKTtcblxuZXhwb3J0IHZhciBTdHlsZU9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHlsZU9ic2VydmVyKGVsZW1lbnQsIHByb3BlcnR5TmFtZSkge1xuICAgIFxuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcblxuICAgIHRoaXMuc3R5bGVzID0gbnVsbDtcbiAgICB0aGlzLnZlcnNpb24gPSAwO1xuICB9XG5cbiAgU3R5bGVPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LnN0eWxlLmNzc1RleHQ7XG4gIH07XG5cbiAgU3R5bGVPYnNlcnZlci5wcm90b3R5cGUuX3NldFByb3BlcnR5ID0gZnVuY3Rpb24gX3NldFByb3BlcnR5KHN0eWxlLCB2YWx1ZSkge1xuICAgIHZhciBwcmlvcml0eSA9ICcnO1xuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlLmluZGV4T2YgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuaW5kZXhPZignIWltcG9ydGFudCcpICE9PSAtMSkge1xuICAgICAgcHJpb3JpdHkgPSAnaW1wb3J0YW50JztcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnIWltcG9ydGFudCcsICcnKTtcbiAgICB9XG4gICAgdGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xuXG4gIFN0eWxlT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICB2YXIgc3R5bGVzID0gdGhpcy5zdHlsZXMgfHwge307XG4gICAgdmFyIHN0eWxlID0gdm9pZCAwO1xuICAgIHZhciB2ZXJzaW9uID0gdGhpcy52ZXJzaW9uO1xuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBudWxsICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB2b2lkIDA7XG4gICAgICAgIGZvciAoc3R5bGUgaW4gbmV3VmFsdWUpIHtcbiAgICAgICAgICBpZiAobmV3VmFsdWUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlW3N0eWxlXTtcbiAgICAgICAgICAgIHN0eWxlID0gc3R5bGUucmVwbGFjZSgvKFtBLVpdKS9nLCBmdW5jdGlvbiAobSkge1xuICAgICAgICAgICAgICByZXR1cm4gJy0nICsgbS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdHlsZXNbc3R5bGVdID0gdmVyc2lvbjtcbiAgICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHN0eWxlLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YXIgcnggPSAvXFxzKihbXFx3XFwtXSspXFxzKjpcXHMqKCg/Oig/OltcXHdcXC1dK1xcKFxccyooPzpcIig/OlxcXFxcInxbXlwiXSkqXCJ8Jyg/OlxcXFwnfFteJ10pKid8W1xcd1xcLV0rXFwoXFxzKig/Ol5cIig/OlxcXFxcInxbXlwiXSkqXCJ8Jyg/OlxcXFwnfFteJ10pKid8W15cXCldKilcXCksP3xbXlxcKV0qKVxcKSw/fFwiKD86XFxcXFwifFteXCJdKSpcInwnKD86XFxcXCd8W14nXSkqJ3xbXjtdKiksP1xccyopKyk7Py9nO1xuICAgICAgICB2YXIgcGFpciA9IHZvaWQgMDtcbiAgICAgICAgd2hpbGUgKChwYWlyID0gcnguZXhlYyhuZXdWYWx1ZSkpICE9PSBudWxsKSB7XG4gICAgICAgICAgc3R5bGUgPSBwYWlyWzFdO1xuICAgICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0eWxlc1tzdHlsZV0gPSB2ZXJzaW9uO1xuICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHN0eWxlLCBwYWlyWzJdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3R5bGVzID0gc3R5bGVzO1xuICAgIHRoaXMudmVyc2lvbiArPSAxO1xuXG4gICAgaWYgKHZlcnNpb24gPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2ZXJzaW9uIC09IDE7XG4gICAgZm9yIChzdHlsZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlKSB8fCBzdHlsZXNbc3R5bGVdICE9PSB2ZXJzaW9uKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGUpO1xuICAgIH1cbiAgfTtcblxuICBTdHlsZU9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPYnNlcnZhdGlvbiBvZiBhIFwiJyArIHRoaXMuZWxlbWVudC5ub2RlTmFtZSArICdcIiBlbGVtZW50XFwncyBcIicgKyB0aGlzLnByb3BlcnR5TmFtZSArICdcIiBwcm9wZXJ0eSBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZU9ic2VydmVyO1xufSgpO1xuXG5leHBvcnQgdmFyIFZhbHVlQXR0cmlidXRlT2JzZXJ2ZXIgPSAoX2RlYzcgPSBzdWJzY3JpYmVyQ29sbGVjdGlvbigpLCBfZGVjNyhfY2xhc3M4ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBWYWx1ZUF0dHJpYnV0ZU9ic2VydmVyKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgaGFuZGxlcikge1xuICAgIFxuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdmaWxlcycpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICB9XG4gIH1cblxuICBWYWx1ZUF0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRbdGhpcy5wcm9wZXJ0eU5hbWVdO1xuICB9O1xuXG4gIFZhbHVlQXR0cmlidXRlT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQgfHwgbmV3VmFsdWUgPT09IG51bGwgPyAnJyA6IG5ld1ZhbHVlO1xuICAgIGlmICh0aGlzLmVsZW1lbnRbdGhpcy5wcm9wZXJ0eU5hbWVdICE9PSBuZXdWYWx1ZSkge1xuICAgICAgdGhpcy5lbGVtZW50W3RoaXMucHJvcGVydHlOYW1lXSA9IG5ld1ZhbHVlO1xuICAgICAgdGhpcy5ub3RpZnkoKTtcbiAgICB9XG4gIH07XG5cbiAgVmFsdWVBdHRyaWJ1dGVPYnNlcnZlci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMub2xkVmFsdWU7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuXG4gICAgdGhpcy5jYWxsU3Vic2NyaWJlcnMobmV3VmFsdWUsIG9sZFZhbHVlKTtcblxuICAgIHRoaXMub2xkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfTtcblxuICBWYWx1ZUF0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KCkge1xuICAgIHRoaXMubm90aWZ5KCk7XG4gIH07XG5cbiAgVmFsdWVBdHRyaWJ1dGVPYnNlcnZlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgaWYgKCF0aGlzLmhhc1N1YnNjcmliZXJzKCkpIHtcbiAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICB0aGlzLmhhbmRsZXIuc3Vic2NyaWJlKHRoaXMuZWxlbWVudCwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgfTtcblxuICBWYWx1ZUF0dHJpYnV0ZU9ic2VydmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgaWYgKHRoaXMucmVtb3ZlU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSkgJiYgIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFZhbHVlQXR0cmlidXRlT2JzZXJ2ZXI7XG59KCkpIHx8IF9jbGFzczgpO1xuXG52YXIgY2hlY2tlZEFycmF5Q29udGV4dCA9ICdDaGVja2VkT2JzZXJ2ZXI6YXJyYXknO1xudmFyIGNoZWNrZWRWYWx1ZUNvbnRleHQgPSAnQ2hlY2tlZE9ic2VydmVyOnZhbHVlJztcblxuZXhwb3J0IHZhciBDaGVja2VkT2JzZXJ2ZXIgPSAoX2RlYzggPSBzdWJzY3JpYmVyQ29sbGVjdGlvbigpLCBfZGVjOChfY2xhc3M5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDaGVja2VkT2JzZXJ2ZXIoZWxlbWVudCwgaGFuZGxlciwgb2JzZXJ2ZXJMb2NhdG9yKSB7XG4gICAgXG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XG4gIH1cblxuICBDaGVja2VkT2JzZXJ2ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH07XG5cbiAgQ2hlY2tlZE9ic2VydmVyLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFN5bmMgJiYgdGhpcy52YWx1ZSA9PT0gbmV3VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcnJheU9ic2VydmVyKSB7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIudW5zdWJzY3JpYmUoY2hlY2tlZEFycmF5Q29udGV4dCwgdGhpcyk7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVsZW1lbnQudHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgdGhpcy5hcnJheU9ic2VydmVyID0gdGhpcy5vYnNlcnZlckxvY2F0b3IuZ2V0QXJyYXlPYnNlcnZlcihuZXdWYWx1ZSk7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIuc3Vic2NyaWJlKGNoZWNrZWRBcnJheUNvbnRleHQsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnN5bmNocm9uaXplRWxlbWVudCgpO1xuICAgIHRoaXMubm90aWZ5KCk7XG5cbiAgICBpZiAoIXRoaXMuaW5pdGlhbFN5bmMpIHtcbiAgICAgIHRoaXMuaW5pdGlhbFN5bmMgPSB0cnVlO1xuICAgICAgdGhpcy5vYnNlcnZlckxvY2F0b3IudGFza1F1ZXVlLnF1ZXVlTWljcm9UYXNrKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBDaGVja2VkT2JzZXJ2ZXIucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiBjYWxsKGNvbnRleHQsIHNwbGljZXMpIHtcbiAgICB0aGlzLnN5bmNocm9uaXplRWxlbWVudCgpO1xuXG4gICAgaWYgKCF0aGlzLnZhbHVlT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMudmFsdWVPYnNlcnZlciA9IHRoaXMuZWxlbWVudC5fX29ic2VydmVyc19fLm1vZGVsIHx8IHRoaXMuZWxlbWVudC5fX29ic2VydmVyc19fLnZhbHVlO1xuICAgICAgaWYgKHRoaXMudmFsdWVPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnZhbHVlT2JzZXJ2ZXIuc3Vic2NyaWJlKGNoZWNrZWRWYWx1ZUNvbnRleHQsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBDaGVja2VkT2JzZXJ2ZXIucHJvdG90eXBlLnN5bmNocm9uaXplRWxlbWVudCA9IGZ1bmN0aW9uIHN5bmNocm9uaXplRWxlbWVudCgpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICAgIHZhciBlbGVtZW50VmFsdWUgPSBlbGVtZW50Lmhhc093blByb3BlcnR5KCdtb2RlbCcpID8gZWxlbWVudC5tb2RlbCA6IGVsZW1lbnQudmFsdWU7XG4gICAgdmFyIGlzUmFkaW8gPSBlbGVtZW50LnR5cGUgPT09ICdyYWRpbyc7XG4gICAgdmFyIG1hdGNoZXIgPSBlbGVtZW50Lm1hdGNoZXIgfHwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhID09PSBiO1xuICAgIH07XG5cbiAgICBlbGVtZW50LmNoZWNrZWQgPSBpc1JhZGlvICYmICEhbWF0Y2hlcih2YWx1ZSwgZWxlbWVudFZhbHVlKSB8fCAhaXNSYWRpbyAmJiB2YWx1ZSA9PT0gdHJ1ZSB8fCAhaXNSYWRpbyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAhIW1hdGNoZXIoaXRlbSwgZWxlbWVudFZhbHVlKTtcbiAgICB9KSAhPT0gLTE7XG4gIH07XG5cbiAgQ2hlY2tlZE9ic2VydmVyLnByb3RvdHlwZS5zeW5jaHJvbml6ZVZhbHVlID0gZnVuY3Rpb24gc3luY2hyb25pemVWYWx1ZSgpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICAgIHZhciBlbGVtZW50VmFsdWUgPSBlbGVtZW50Lmhhc093blByb3BlcnR5KCdtb2RlbCcpID8gZWxlbWVudC5tb2RlbCA6IGVsZW1lbnQudmFsdWU7XG4gICAgdmFyIGluZGV4ID0gdm9pZCAwO1xuICAgIHZhciBtYXRjaGVyID0gZWxlbWVudC5tYXRjaGVyIHx8IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICB9O1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGluZGV4ID0gdmFsdWUuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuICEhbWF0Y2hlcihpdGVtLCBlbGVtZW50VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hlY2tlZCAmJiBpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICB2YWx1ZS5wdXNoKGVsZW1lbnRWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWVsZW1lbnQuY2hlY2tlZCAmJiBpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB2YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IGVsZW1lbnQuY2hlY2tlZDtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2hlY2tlZCkge1xuICAgICAgdmFsdWUgPSBlbGVtZW50VmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5ub3RpZnkoKTtcbiAgfTtcblxuICBDaGVja2VkT2JzZXJ2ZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm9sZFZhbHVlO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsU3Vic2NyaWJlcnMobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgfTtcblxuICBDaGVja2VkT2JzZXJ2ZXIucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gaGFuZGxlRXZlbnQoKSB7XG4gICAgdGhpcy5zeW5jaHJvbml6ZVZhbHVlKCk7XG4gIH07XG5cbiAgQ2hlY2tlZE9ic2VydmVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUoY29udGV4dCwgY2FsbGFibGUpIHtcbiAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyLnN1YnNjcmliZSh0aGlzLmVsZW1lbnQsIHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLmFkZFN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpO1xuICB9O1xuXG4gIENoZWNrZWRPYnNlcnZlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIGlmICh0aGlzLnJlbW92ZVN1YnNjcmliZXIoY29udGV4dCwgY2FsbGFibGUpICYmICF0aGlzLmhhc1N1YnNjcmliZXJzKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5kaXNwb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIENoZWNrZWRPYnNlcnZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgIGlmICh0aGlzLmFycmF5T2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlci51bnN1YnNjcmliZShjaGVja2VkQXJyYXlDb250ZXh0LCB0aGlzKTtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMudmFsdWVPYnNlcnZlci51bnN1YnNjcmliZShjaGVja2VkVmFsdWVDb250ZXh0LCB0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENoZWNrZWRPYnNlcnZlcjtcbn0oKSkgfHwgX2NsYXNzOSk7XG5cbnZhciBzZWxlY3RBcnJheUNvbnRleHQgPSAnU2VsZWN0VmFsdWVPYnNlcnZlcjphcnJheSc7XG5cbmV4cG9ydCB2YXIgU2VsZWN0VmFsdWVPYnNlcnZlciA9IChfZGVjOSA9IHN1YnNjcmliZXJDb2xsZWN0aW9uKCksIF9kZWM5KF9jbGFzczEwID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZWxlY3RWYWx1ZU9ic2VydmVyKGVsZW1lbnQsIGhhbmRsZXIsIG9ic2VydmVyTG9jYXRvcikge1xuICAgIFxuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yID0gb2JzZXJ2ZXJMb2NhdG9yO1xuICB9XG5cbiAgU2VsZWN0VmFsdWVPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcblxuICBTZWxlY3RWYWx1ZU9ic2VydmVyLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgaWYgKG5ld1ZhbHVlICE9PSBudWxsICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbGVtZW50Lm11bHRpcGxlICYmICFBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IG51bGwgb3IgQXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBib3VuZCB0byBhIG11bHRpLXNlbGVjdC4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IG5ld1ZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXJyYXlPYnNlcnZlcikge1xuICAgICAgdGhpcy5hcnJheU9ic2VydmVyLnVuc3Vic2NyaWJlKHNlbGVjdEFycmF5Q29udGV4dCwgdGhpcyk7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgdGhpcy5hcnJheU9ic2VydmVyID0gdGhpcy5vYnNlcnZlckxvY2F0b3IuZ2V0QXJyYXlPYnNlcnZlcihuZXdWYWx1ZSk7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIuc3Vic2NyaWJlKHNlbGVjdEFycmF5Q29udGV4dCwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuc3luY2hyb25pemVPcHRpb25zKCk7XG4gICAgdGhpcy5ub3RpZnkoKTtcblxuICAgIGlmICghdGhpcy5pbml0aWFsU3luYykge1xuICAgICAgdGhpcy5pbml0aWFsU3luYyA9IHRydWU7XG4gICAgICB0aGlzLm9ic2VydmVyTG9jYXRvci50YXNrUXVldWUucXVldWVNaWNyb1Rhc2sodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIFNlbGVjdFZhbHVlT2JzZXJ2ZXIucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiBjYWxsKGNvbnRleHQsIHNwbGljZXMpIHtcbiAgICB0aGlzLnN5bmNocm9uaXplT3B0aW9ucygpO1xuICB9O1xuXG4gIFNlbGVjdFZhbHVlT2JzZXJ2ZXIucHJvdG90eXBlLnN5bmNocm9uaXplT3B0aW9ucyA9IGZ1bmN0aW9uIHN5bmNocm9uaXplT3B0aW9ucygpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBpc0FycmF5ID0gdm9pZCAwO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpc0FycmF5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZWxlbWVudC5vcHRpb25zO1xuICAgIHZhciBpID0gb3B0aW9ucy5sZW5ndGg7XG4gICAgdmFyIG1hdGNoZXIgPSB0aGlzLmVsZW1lbnQubWF0Y2hlciB8fCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnMuaXRlbShpKTtcbiAgICAgIHZhciBvcHRpb25WYWx1ZSA9IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnbW9kZWwnKSA/IG9wdGlvbi5tb2RlbCA6IG9wdGlvbi52YWx1ZTtcbiAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHZhbHVlLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiAhIW1hdGNoZXIob3B0aW9uVmFsdWUsIGl0ZW0pO1xuICAgICAgICB9KSAhPT0gLTE7XG4gICAgICAgIHJldHVybiAnY29udGludWUnO1xuICAgICAgfVxuICAgICAgb3B0aW9uLnNlbGVjdGVkID0gISFtYXRjaGVyKG9wdGlvblZhbHVlLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoKTtcblxuICAgICAgaWYgKF9yZXQgPT09ICdjb250aW51ZScpIGNvbnRpbnVlO1xuICAgIH1cbiAgfTtcblxuICBTZWxlY3RWYWx1ZU9ic2VydmVyLnByb3RvdHlwZS5zeW5jaHJvbml6ZVZhbHVlID0gZnVuY3Rpb24gc3luY2hyb25pemVWYWx1ZSgpIHtcbiAgICB2YXIgX3RoaXMyMyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZWxlbWVudC5vcHRpb25zO1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIHZhbHVlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBvcHRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBfb3B0aW9uID0gb3B0aW9ucy5pdGVtKGkpO1xuICAgICAgaWYgKCFfb3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFsdWUucHVzaChfb3B0aW9uLmhhc093blByb3BlcnR5KCdtb2RlbCcpID8gX29wdGlvbi5tb2RlbCA6IF9vcHRpb24udmFsdWUpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbGVtZW50Lm11bHRpcGxlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICB2YXIgX3JldDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIG1hdGNoZXIgPSBfdGhpczIzLmVsZW1lbnQubWF0Y2hlciB8fCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHZhciBpID0gMDtcblxuICAgICAgICAgIHZhciBfbG9vcDIgPSBmdW5jdGlvbiBfbG9vcDIoKSB7XG4gICAgICAgICAgICB2YXIgYSA9IF90aGlzMjMudmFsdWVbaV07XG4gICAgICAgICAgICBpZiAodmFsdWUuZmluZEluZGV4KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGEsIGIpO1xuICAgICAgICAgICAgfSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIF90aGlzMjMudmFsdWUuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB3aGlsZSAoaSA8IF90aGlzMjMudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBfbG9vcDIoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpID0gMDtcblxuICAgICAgICAgIHZhciBfbG9vcDMgPSBmdW5jdGlvbiBfbG9vcDMoKSB7XG4gICAgICAgICAgICB2YXIgYSA9IHZhbHVlW2ldO1xuICAgICAgICAgICAgaWYgKF90aGlzMjMudmFsdWUuZmluZEluZGV4KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGEsIGIpO1xuICAgICAgICAgICAgfSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIF90aGlzMjMudmFsdWUucHVzaChhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgd2hpbGUgKGkgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIF9sb29wMygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdjogdm9pZCAwXG4gICAgICAgICAgfTtcbiAgICAgICAgfSgpO1xuXG4gICAgICAgIGlmICgodHlwZW9mIF9yZXQyID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihfcmV0MikpID09PSBcIm9iamVjdFwiKSByZXR1cm4gX3JldDIudjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMubm90aWZ5KCk7XG4gICAgfVxuICB9O1xuXG4gIFNlbGVjdFZhbHVlT2JzZXJ2ZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm9sZFZhbHVlO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICB0aGlzLmNhbGxTdWJzY3JpYmVycyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICB9O1xuXG4gIFNlbGVjdFZhbHVlT2JzZXJ2ZXIucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gaGFuZGxlRXZlbnQoKSB7XG4gICAgdGhpcy5zeW5jaHJvbml6ZVZhbHVlKCk7XG4gIH07XG5cbiAgU2VsZWN0VmFsdWVPYnNlcnZlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgaWYgKCF0aGlzLmhhc1N1YnNjcmliZXJzKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5zdWJzY3JpYmUodGhpcy5lbGVtZW50LCB0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hZGRTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgfTtcblxuICBTZWxlY3RWYWx1ZU9ic2VydmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgaWYgKHRoaXMucmVtb3ZlU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSkgJiYgIXRoaXMuaGFzU3Vic2NyaWJlcnMoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgU2VsZWN0VmFsdWVPYnNlcnZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQoKSB7XG4gICAgdmFyIF90aGlzMjQgPSB0aGlzO1xuXG4gICAgdGhpcy5kb21PYnNlcnZlciA9IERPTS5jcmVhdGVNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMjQuc3luY2hyb25pemVPcHRpb25zKCk7XG4gICAgICBfdGhpczI0LnN5bmNocm9uaXplVmFsdWUoKTtcbiAgICB9KTtcbiAgICB0aGlzLmRvbU9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgfTtcblxuICBTZWxlY3RWYWx1ZU9ic2VydmVyLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgdGhpcy5kb21PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5kb21PYnNlcnZlciA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5hcnJheU9ic2VydmVyKSB7XG4gICAgICB0aGlzLmFycmF5T2JzZXJ2ZXIudW5zdWJzY3JpYmUoc2VsZWN0QXJyYXlDb250ZXh0LCB0aGlzKTtcbiAgICAgIHRoaXMuYXJyYXlPYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTZWxlY3RWYWx1ZU9ic2VydmVyO1xufSgpKSB8fCBfY2xhc3MxMCk7XG5cbmV4cG9ydCB2YXIgQ2xhc3NPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2xhc3NPYnNlcnZlcihlbGVtZW50KSB7XG4gICAgXG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuZG9Ob3RDYWNoZSA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIHRoaXMudmVyc2lvbiA9IDA7XG4gIH1cblxuICBDbGFzc09ic2VydmVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9O1xuXG4gIENsYXNzT2JzZXJ2ZXIucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gc2V0VmFsdWUobmV3VmFsdWUpIHtcbiAgICB2YXIgbmFtZUluZGV4ID0gdGhpcy5uYW1lSW5kZXggfHwge307XG4gICAgdmFyIHZlcnNpb24gPSB0aGlzLnZlcnNpb247XG4gICAgdmFyIG5hbWVzID0gdm9pZCAwO1xuICAgIHZhciBuYW1lID0gdm9pZCAwO1xuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBudWxsICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUubGVuZ3RoKSB7XG4gICAgICBuYW1lcyA9IG5ld1ZhbHVlLnNwbGl0KC9cXHMrLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbmFtZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICBpZiAobmFtZSA9PT0gJycpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lSW5kZXhbbmFtZV0gPSB2ZXJzaW9uO1xuICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5uYW1lSW5kZXggPSBuYW1lSW5kZXg7XG4gICAgdGhpcy52ZXJzaW9uICs9IDE7XG5cbiAgICBpZiAodmVyc2lvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZlcnNpb24gLT0gMTtcbiAgICBmb3IgKG5hbWUgaW4gbmFtZUluZGV4KSB7XG4gICAgICBpZiAoIW5hbWVJbmRleC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBuYW1lSW5kZXhbbmFtZV0gIT09IHZlcnNpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgQ2xhc3NPYnNlcnZlci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignT2JzZXJ2YXRpb24gb2YgYSBcIicgKyB0aGlzLmVsZW1lbnQubm9kZU5hbWUgKyAnXCIgZWxlbWVudFxcJ3MgXCJjbGFzc1wiIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gIH07XG5cbiAgcmV0dXJuIENsYXNzT2JzZXJ2ZXI7XG59KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNEZWNsYXJlZERlcGVuZGVuY2llcyhkZXNjcmlwdG9yKSB7XG4gIHJldHVybiAhIShkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZ2V0ICYmIGRlc2NyaXB0b3IuZ2V0LmRlcGVuZGVuY2llcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlUHJvcGVydHlEZXBlbmRlbmNpZXMoY3RvciwgcHJvcGVydHlOYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0b3IucHJvdG90eXBlLCBwcm9wZXJ0eU5hbWUpO1xuICBkZXNjcmlwdG9yLmdldC5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZEZyb20oKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgICBkZXNjcmlwdG9yLmdldC5kZXBlbmRlbmNpZXMgPSByZXN0O1xuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuXG5leHBvcnQgdmFyIENvbXB1dGVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChfRXhwcmVzc2lvbjE5KSB7XG4gIF9pbmhlcml0cyhDb21wdXRlZEV4cHJlc3Npb24sIF9FeHByZXNzaW9uMTkpO1xuXG4gIGZ1bmN0aW9uIENvbXB1dGVkRXhwcmVzc2lvbihuYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgICBcblxuICAgIHZhciBfdGhpczI1ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0V4cHJlc3Npb24xOS5jYWxsKHRoaXMpKTtcblxuICAgIF90aGlzMjUubmFtZSA9IG5hbWU7XG4gICAgX3RoaXMyNS5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG4gICAgX3RoaXMyNS5pc0Fzc2lnbmFibGUgPSB0cnVlO1xuICAgIHJldHVybiBfdGhpczI1O1xuICB9XG5cbiAgQ29tcHV0ZWRFeHByZXNzaW9uLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlLCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICByZXR1cm4gc2NvcGUuYmluZGluZ0NvbnRleHRbdGhpcy5uYW1lXTtcbiAgfTtcblxuICBDb21wdXRlZEV4cHJlc3Npb24ucHJvdG90eXBlLmFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbihzY29wZSwgdmFsdWUpIHtcbiAgICBzY29wZS5iaW5kaW5nQ29udGV4dFt0aGlzLm5hbWVdID0gdmFsdWU7XG4gIH07XG5cbiAgQ29tcHV0ZWRFeHByZXNzaW9uLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiBhY2NlcHQodmlzaXRvcikge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gIH07XG5cbiAgQ29tcHV0ZWRFeHByZXNzaW9uLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gY29ubmVjdChiaW5kaW5nLCBzY29wZSkge1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSB0aGlzLmRlcGVuZGVuY2llcztcbiAgICB2YXIgaSA9IGRlcGVuZGVuY2llcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgZGVwZW5kZW5jaWVzW2ldLmNvbm5lY3QoYmluZGluZywgc2NvcGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ29tcHV0ZWRFeHByZXNzaW9uO1xufShFeHByZXNzaW9uKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXB1dGVkT2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIG9ic2VydmVyTG9jYXRvcikge1xuICB2YXIgZGVwZW5kZW5jaWVzID0gZGVzY3JpcHRvci5nZXQuZGVwZW5kZW5jaWVzO1xuICBpZiAoIShkZXBlbmRlbmNpZXMgaW5zdGFuY2VvZiBDb21wdXRlZEV4cHJlc3Npb24pKSB7XG4gICAgdmFyIGkgPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGRlcGVuZGVuY2llc1tpXSA9IG9ic2VydmVyTG9jYXRvci5wYXJzZXIucGFyc2UoZGVwZW5kZW5jaWVzW2ldKTtcbiAgICB9XG4gICAgZGVwZW5kZW5jaWVzID0gZGVzY3JpcHRvci5nZXQuZGVwZW5kZW5jaWVzID0gbmV3IENvbXB1dGVkRXhwcmVzc2lvbihwcm9wZXJ0eU5hbWUsIGRlcGVuZGVuY2llcyk7XG4gIH1cblxuICB2YXIgc2NvcGUgPSB7IGJpbmRpbmdDb250ZXh0OiBvYmosIG92ZXJyaWRlQ29udGV4dDogY3JlYXRlT3ZlcnJpZGVDb250ZXh0KG9iaikgfTtcbiAgcmV0dXJuIG5ldyBFeHByZXNzaW9uT2JzZXJ2ZXIoc2NvcGUsIGRlcGVuZGVuY2llcywgb2JzZXJ2ZXJMb2NhdG9yKTtcbn1cblxudmFyIHN2Z0VsZW1lbnRzID0gdm9pZCAwO1xudmFyIHN2Z1ByZXNlbnRhdGlvbkVsZW1lbnRzID0gdm9pZCAwO1xudmFyIHN2Z1ByZXNlbnRhdGlvbkF0dHJpYnV0ZXMgPSB2b2lkIDA7XG52YXIgc3ZnQW5hbHl6ZXIgPSB2b2lkIDA7XG5cbmlmICh0eXBlb2YgRkVBVFVSRV9OT19TVkcgPT09ICd1bmRlZmluZWQnKSB7XG4gIHN2Z0VsZW1lbnRzID0ge1xuICAgIGE6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RhcmdldCcsICd0cmFuc2Zvcm0nLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgYWx0R2x5cGg6IFsnY2xhc3MnLCAnZHgnLCAnZHknLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmb3JtYXQnLCAnZ2x5cGhSZWYnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdyb3RhdGUnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAneCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGFsdEdseXBoRGVmOiBbJ2lkJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGFsdEdseXBoSXRlbTogWydpZCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBhbmltYXRlOiBbJ2FjY3VtdWxhdGUnLCAnYWRkaXRpdmUnLCAnYXR0cmlidXRlTmFtZScsICdhdHRyaWJ1dGVUeXBlJywgJ2JlZ2luJywgJ2J5JywgJ2NhbGNNb2RlJywgJ2R1cicsICdlbmQnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmaWxsJywgJ2Zyb20nLCAnaWQnLCAna2V5U3BsaW5lcycsICdrZXlUaW1lcycsICdtYXgnLCAnbWluJywgJ29uYmVnaW4nLCAnb25lbmQnLCAnb25sb2FkJywgJ29ucmVwZWF0JywgJ3JlcGVhdENvdW50JywgJ3JlcGVhdER1cicsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdyZXN0YXJ0JywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RvJywgJ3ZhbHVlcycsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBhbmltYXRlQ29sb3I6IFsnYWNjdW11bGF0ZScsICdhZGRpdGl2ZScsICdhdHRyaWJ1dGVOYW1lJywgJ2F0dHJpYnV0ZVR5cGUnLCAnYmVnaW4nLCAnYnknLCAnY2FsY01vZGUnLCAnZHVyJywgJ2VuZCcsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2ZpbGwnLCAnZnJvbScsICdpZCcsICdrZXlTcGxpbmVzJywgJ2tleVRpbWVzJywgJ21heCcsICdtaW4nLCAnb25iZWdpbicsICdvbmVuZCcsICdvbmxvYWQnLCAnb25yZXBlYXQnLCAncmVwZWF0Q291bnQnLCAncmVwZWF0RHVyJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3Jlc3RhcnQnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndG8nLCAndmFsdWVzJywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGFuaW1hdGVNb3Rpb246IFsnYWNjdW11bGF0ZScsICdhZGRpdGl2ZScsICdiZWdpbicsICdieScsICdjYWxjTW9kZScsICdkdXInLCAnZW5kJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZmlsbCcsICdmcm9tJywgJ2lkJywgJ2tleVBvaW50cycsICdrZXlTcGxpbmVzJywgJ2tleVRpbWVzJywgJ21heCcsICdtaW4nLCAnb25iZWdpbicsICdvbmVuZCcsICdvbmxvYWQnLCAnb25yZXBlYXQnLCAnb3JpZ2luJywgJ3BhdGgnLCAncmVwZWF0Q291bnQnLCAncmVwZWF0RHVyJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3Jlc3RhcnQnLCAncm90YXRlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RvJywgJ3ZhbHVlcycsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBhbmltYXRlVHJhbnNmb3JtOiBbJ2FjY3VtdWxhdGUnLCAnYWRkaXRpdmUnLCAnYXR0cmlidXRlTmFtZScsICdhdHRyaWJ1dGVUeXBlJywgJ2JlZ2luJywgJ2J5JywgJ2NhbGNNb2RlJywgJ2R1cicsICdlbmQnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmaWxsJywgJ2Zyb20nLCAnaWQnLCAna2V5U3BsaW5lcycsICdrZXlUaW1lcycsICdtYXgnLCAnbWluJywgJ29uYmVnaW4nLCAnb25lbmQnLCAnb25sb2FkJywgJ29ucmVwZWF0JywgJ3JlcGVhdENvdW50JywgJ3JlcGVhdER1cicsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdyZXN0YXJ0JywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RvJywgJ3R5cGUnLCAndmFsdWVzJywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGNpcmNsZTogWydjbGFzcycsICdjeCcsICdjeScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncicsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgY2xpcFBhdGg6IFsnY2xhc3MnLCAnY2xpcFBhdGhVbml0cycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICAnY29sb3ItcHJvZmlsZSc6IFsnaWQnLCAnbG9jYWwnLCAnbmFtZScsICdyZW5kZXJpbmctaW50ZW50JywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGN1cnNvcjogWydleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3gnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBkZWZzOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZGVzYzogWydjbGFzcycsICdpZCcsICdzdHlsZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBlbGxpcHNlOiBbJ2NsYXNzJywgJ2N4JywgJ2N5JywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdyeCcsICdyeScsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZmVCbGVuZDogWydjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAnaW4yJywgJ21vZGUnLCAncmVzdWx0JywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZUNvbG9yTWF0cml4OiBbJ2NsYXNzJywgJ2hlaWdodCcsICdpZCcsICdpbicsICdyZXN1bHQnLCAnc3R5bGUnLCAndHlwZScsICd2YWx1ZXMnLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGZlQ29tcG9uZW50VHJhbnNmZXI6IFsnY2xhc3MnLCAnaGVpZ2h0JywgJ2lkJywgJ2luJywgJ3Jlc3VsdCcsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVDb21wb3NpdGU6IFsnY2xhc3MnLCAnaGVpZ2h0JywgJ2lkJywgJ2luJywgJ2luMicsICdrMScsICdrMicsICdrMycsICdrNCcsICdvcGVyYXRvcicsICdyZXN1bHQnLCAnc3R5bGUnLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGZlQ29udm9sdmVNYXRyaXg6IFsnYmlhcycsICdjbGFzcycsICdkaXZpc29yJywgJ2VkZ2VNb2RlJywgJ2hlaWdodCcsICdpZCcsICdpbicsICdrZXJuZWxNYXRyaXgnLCAna2VybmVsVW5pdExlbmd0aCcsICdvcmRlcicsICdwcmVzZXJ2ZUFscGhhJywgJ3Jlc3VsdCcsICdzdHlsZScsICd0YXJnZXRYJywgJ3RhcmdldFknLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGZlRGlmZnVzZUxpZ2h0aW5nOiBbJ2NsYXNzJywgJ2RpZmZ1c2VDb25zdGFudCcsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAna2VybmVsVW5pdExlbmd0aCcsICdyZXN1bHQnLCAnc3R5bGUnLCAnc3VyZmFjZVNjYWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZURpc3BsYWNlbWVudE1hcDogWydjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAnaW4yJywgJ3Jlc3VsdCcsICdzY2FsZScsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3hDaGFubmVsU2VsZWN0b3InLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knLCAneUNoYW5uZWxTZWxlY3RvciddLFxuICAgIGZlRGlzdGFudExpZ2h0OiBbJ2F6aW11dGgnLCAnZWxldmF0aW9uJywgJ2lkJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGZlRmxvb2Q6IFsnY2xhc3MnLCAnaGVpZ2h0JywgJ2lkJywgJ3Jlc3VsdCcsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVGdW5jQTogWydhbXBsaXR1ZGUnLCAnZXhwb25lbnQnLCAnaWQnLCAnaW50ZXJjZXB0JywgJ29mZnNldCcsICdzbG9wZScsICd0YWJsZVZhbHVlcycsICd0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGZlRnVuY0I6IFsnYW1wbGl0dWRlJywgJ2V4cG9uZW50JywgJ2lkJywgJ2ludGVyY2VwdCcsICdvZmZzZXQnLCAnc2xvcGUnLCAndGFibGVWYWx1ZXMnLCAndHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBmZUZ1bmNHOiBbJ2FtcGxpdHVkZScsICdleHBvbmVudCcsICdpZCcsICdpbnRlcmNlcHQnLCAnb2Zmc2V0JywgJ3Nsb3BlJywgJ3RhYmxlVmFsdWVzJywgJ3R5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZmVGdW5jUjogWydhbXBsaXR1ZGUnLCAnZXhwb25lbnQnLCAnaWQnLCAnaW50ZXJjZXB0JywgJ29mZnNldCcsICdzbG9wZScsICd0YWJsZVZhbHVlcycsICd0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGZlR2F1c3NpYW5CbHVyOiBbJ2NsYXNzJywgJ2hlaWdodCcsICdpZCcsICdpbicsICdyZXN1bHQnLCAnc3RkRGV2aWF0aW9uJywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZUltYWdlOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaGVpZ2h0JywgJ2lkJywgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAncmVzdWx0JywgJ3N0eWxlJywgJ3dpZHRoJywgJ3gnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBmZU1lcmdlOiBbJ2NsYXNzJywgJ2hlaWdodCcsICdpZCcsICdyZXN1bHQnLCAnc3R5bGUnLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGZlTWVyZ2VOb2RlOiBbJ2lkJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGZlTW9ycGhvbG9neTogWydjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAnb3BlcmF0b3InLCAncmFkaXVzJywgJ3Jlc3VsdCcsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVPZmZzZXQ6IFsnY2xhc3MnLCAnZHgnLCAnZHknLCAnaGVpZ2h0JywgJ2lkJywgJ2luJywgJ3Jlc3VsdCcsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVQb2ludExpZ2h0OiBbJ2lkJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knLCAneiddLFxuICAgIGZlU3BlY3VsYXJMaWdodGluZzogWydjbGFzcycsICdoZWlnaHQnLCAnaWQnLCAnaW4nLCAna2VybmVsVW5pdExlbmd0aCcsICdyZXN1bHQnLCAnc3BlY3VsYXJDb25zdGFudCcsICdzcGVjdWxhckV4cG9uZW50JywgJ3N0eWxlJywgJ3N1cmZhY2VTY2FsZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVTcG90TGlnaHQ6IFsnaWQnLCAnbGltaXRpbmdDb25lQW5nbGUnLCAncG9pbnRzQXRYJywgJ3BvaW50c0F0WScsICdwb2ludHNBdFonLCAnc3BlY3VsYXJFeHBvbmVudCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5JywgJ3onXSxcbiAgICBmZVRpbGU6IFsnY2xhc3MnLCAnaGVpZ2h0JywgJ2lkJywgJ2luJywgJ3Jlc3VsdCcsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmVUdXJidWxlbmNlOiBbJ2Jhc2VGcmVxdWVuY3knLCAnY2xhc3MnLCAnaGVpZ2h0JywgJ2lkJywgJ251bU9jdGF2ZXMnLCAncmVzdWx0JywgJ3NlZWQnLCAnc3RpdGNoVGlsZXMnLCAnc3R5bGUnLCAndHlwZScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZmlsdGVyOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZmlsdGVyUmVzJywgJ2ZpbHRlclVuaXRzJywgJ2hlaWdodCcsICdpZCcsICdwcmltaXRpdmVVbml0cycsICdzdHlsZScsICd3aWR0aCcsICd4JywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZm9udDogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2hvcml6LW9yaWdpbi15JywgJ2lkJywgJ3N0eWxlJywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgICdmb250LWZhY2UnOiBbJ2FjY2VudC1oZWlnaHQnLCAnYWxwaGFiZXRpYycsICdhc2NlbnQnLCAnYmJveCcsICdjYXAtaGVpZ2h0JywgJ2Rlc2NlbnQnLCAnZm9udC1mYW1pbHknLCAnZm9udC1zaXplJywgJ2ZvbnQtc3RyZXRjaCcsICdmb250LXN0eWxlJywgJ2ZvbnQtdmFyaWFudCcsICdmb250LXdlaWdodCcsICdoYW5naW5nJywgJ2lkJywgJ2lkZW9ncmFwaGljJywgJ21hdGhlbWF0aWNhbCcsICdvdmVybGluZS1wb3NpdGlvbicsICdvdmVybGluZS10aGlja25lc3MnLCAncGFub3NlLTEnLCAnc2xvcGUnLCAnc3RlbWgnLCAnc3RlbXYnLCAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbicsICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcycsICd1bmRlcmxpbmUtcG9zaXRpb24nLCAndW5kZXJsaW5lLXRoaWNrbmVzcycsICd1bmljb2RlLXJhbmdlJywgJ3VuaXRzLXBlci1lbScsICd2LWFscGhhYmV0aWMnLCAndi1oYW5naW5nJywgJ3YtaWRlb2dyYXBoaWMnLCAndi1tYXRoZW1hdGljYWwnLCAnd2lkdGhzJywgJ3gtaGVpZ2h0JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgICdmb250LWZhY2UtZm9ybWF0JzogWydpZCcsICdzdHJpbmcnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgJ2ZvbnQtZmFjZS1uYW1lJzogWydpZCcsICduYW1lJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgICdmb250LWZhY2Utc3JjJzogWydpZCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICAnZm9udC1mYWNlLXVyaSc6IFsnaWQnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZm9yZWlnbk9iamVjdDogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2hlaWdodCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd3aWR0aCcsICd4JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScsICd5J10sXG4gICAgZzogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndHJhbnNmb3JtJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGdseXBoOiBbJ2FyYWJpYy1mb3JtJywgJ2NsYXNzJywgJ2QnLCAnZ2x5cGgtbmFtZScsICdob3Jpei1hZHYteCcsICdpZCcsICdsYW5nJywgJ29yaWVudGF0aW9uJywgJ3N0eWxlJywgJ3VuaWNvZGUnLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgZ2x5cGhSZWY6IFsnY2xhc3MnLCAnZHgnLCAnZHknLCAnZm9ybWF0JywgJ2dseXBoUmVmJywgJ2lkJywgJ3N0eWxlJywgJ3gnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBoa2VybjogWydnMScsICdnMicsICdpZCcsICdrJywgJ3UxJywgJ3UyJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIGltYWdlOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaGVpZ2h0JywgJ2lkJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncHJlc2VydmVBc3BlY3RSYXRpbycsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAnd2lkdGgnLCAneCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIGxpbmU6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd4MScsICd4MicsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneTEnLCAneTInXSxcbiAgICBsaW5lYXJHcmFkaWVudDogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2dyYWRpZW50VHJhbnNmb3JtJywgJ2dyYWRpZW50VW5pdHMnLCAnaWQnLCAnc3ByZWFkTWV0aG9kJywgJ3N0eWxlJywgJ3gxJywgJ3gyJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3kxJywgJ3kyJ10sXG4gICAgbWFya2VyOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnbWFya2VySGVpZ2h0JywgJ21hcmtlclVuaXRzJywgJ21hcmtlcldpZHRoJywgJ29yaWVudCcsICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3JlZlgnLCAncmVmWScsICdzdHlsZScsICd2aWV3Qm94JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIG1hc2s6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdoZWlnaHQnLCAnaWQnLCAnbWFza0NvbnRlbnRVbml0cycsICdtYXNrVW5pdHMnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIG1ldGFkYXRhOiBbJ2lkJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgICdtaXNzaW5nLWdseXBoJzogWydjbGFzcycsICdkJywgJ2hvcml6LWFkdi14JywgJ2lkJywgJ3N0eWxlJywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIG1wYXRoOiBbJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgcGF0aDogWydjbGFzcycsICdkJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdwYXRoTGVuZ3RoJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3N0eWxlJywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RyYW5zZm9ybScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnXSxcbiAgICBwYXR0ZXJuOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaGVpZ2h0JywgJ2lkJywgJ3BhdHRlcm5Db250ZW50VW5pdHMnLCAncGF0dGVyblRyYW5zZm9ybScsICdwYXR0ZXJuVW5pdHMnLCAncHJlc2VydmVBc3BlY3RSYXRpbycsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd2aWV3Qm94JywgJ3dpZHRoJywgJ3gnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICBwb2x5Z29uOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdwb2ludHMnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndHJhbnNmb3JtJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHBvbHlsaW5lOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdwb2ludHMnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndHJhbnNmb3JtJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHJhZGlhbEdyYWRpZW50OiBbJ2NsYXNzJywgJ2N4JywgJ2N5JywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZngnLCAnZnknLCAnZ3JhZGllbnRUcmFuc2Zvcm0nLCAnZ3JhZGllbnRVbml0cycsICdpZCcsICdyJywgJ3NwcmVhZE1ldGhvZCcsICdzdHlsZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHJlY3Q6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdoZWlnaHQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdyeCcsICdyeScsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAnd2lkdGgnLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIHNjcmlwdDogWydleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ3R5cGUnLCAneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgc2V0OiBbJ2F0dHJpYnV0ZU5hbWUnLCAnYXR0cmlidXRlVHlwZScsICdiZWdpbicsICdkdXInLCAnZW5kJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZmlsbCcsICdpZCcsICdtYXgnLCAnbWluJywgJ29uYmVnaW4nLCAnb25lbmQnLCAnb25sb2FkJywgJ29ucmVwZWF0JywgJ3JlcGVhdENvdW50JywgJ3JlcGVhdER1cicsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdyZXN0YXJ0JywgJ3N5c3RlbUxhbmd1YWdlJywgJ3RvJywgJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpocmVmJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHN0b3A6IFsnY2xhc3MnLCAnaWQnLCAnb2Zmc2V0JywgJ3N0eWxlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHN0eWxlOiBbJ2lkJywgJ21lZGlhJywgJ3RpdGxlJywgJ3R5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ10sXG4gICAgc3ZnOiBbJ2Jhc2VQcm9maWxlJywgJ2NsYXNzJywgJ2NvbnRlbnRTY3JpcHRUeXBlJywgJ2NvbnRlbnRTdHlsZVR5cGUnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdoZWlnaHQnLCAnaWQnLCAnb25hYm9ydCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25lcnJvcicsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAnb25yZXNpemUnLCAnb25zY3JvbGwnLCAnb251bmxvYWQnLCAnb256b29tJywgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndmVyc2lvbicsICd2aWV3Qm94JywgJ3dpZHRoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knLCAnem9vbUFuZFBhbiddLFxuICAgIHN3aXRjaDogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncmVxdWlyZWRFeHRlbnNpb25zJywgJ3JlcXVpcmVkRmVhdHVyZXMnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndHJhbnNmb3JtJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHN5bWJvbDogWydjbGFzcycsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ29uYWN0aXZhdGUnLCAnb25jbGljaycsICdvbmZvY3VzaW4nLCAnb25mb2N1c291dCcsICdvbmxvYWQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZW1vdmUnLCAnb25tb3VzZW91dCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNldXAnLCAncHJlc2VydmVBc3BlY3RSYXRpbycsICdzdHlsZScsICd2aWV3Qm94JywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHRleHQ6IFsnY2xhc3MnLCAnZHgnLCAnZHknLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdsZW5ndGhBZGp1c3QnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdyb3RhdGUnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndGV4dExlbmd0aCcsICd0cmFuc2Zvcm0nLCAneCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIHRleHRQYXRoOiBbJ2NsYXNzJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnaWQnLCAnbGVuZ3RoQWRqdXN0JywgJ21ldGhvZCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3NwYWNpbmcnLCAnc3RhcnRPZmZzZXQnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndGV4dExlbmd0aCcsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOmhyZWYnLCAneGxpbms6cm9sZScsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHRpdGxlOiBbJ2NsYXNzJywgJ2lkJywgJ3N0eWxlJywgJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZSddLFxuICAgIHRyZWY6IFsnY2xhc3MnLCAnZHgnLCAnZHknLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdsZW5ndGhBZGp1c3QnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdyb3RhdGUnLCAnc3R5bGUnLCAnc3lzdGVtTGFuZ3VhZ2UnLCAndGV4dExlbmd0aCcsICd4JywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICB0c3BhbjogWydjbGFzcycsICdkeCcsICdkeScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2lkJywgJ2xlbmd0aEFkanVzdCcsICdvbmFjdGl2YXRlJywgJ29uY2xpY2snLCAnb25mb2N1c2luJywgJ29uZm9jdXNvdXQnLCAnb25sb2FkJywgJ29ubW91c2Vkb3duJywgJ29ubW91c2Vtb3ZlJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZXVwJywgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsICdyZXF1aXJlZEZlYXR1cmVzJywgJ3JvdGF0ZScsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0ZXh0TGVuZ3RoJywgJ3gnLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJywgJ3knXSxcbiAgICB1c2U6IFsnY2xhc3MnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdoZWlnaHQnLCAnaWQnLCAnb25hY3RpdmF0ZScsICdvbmNsaWNrJywgJ29uZm9jdXNpbicsICdvbmZvY3Vzb3V0JywgJ29ubG9hZCcsICdvbm1vdXNlZG93bicsICdvbm1vdXNlbW92ZScsICdvbm1vdXNlb3V0JywgJ29ubW91c2VvdmVyJywgJ29ubW91c2V1cCcsICdyZXF1aXJlZEV4dGVuc2lvbnMnLCAncmVxdWlyZWRGZWF0dXJlcycsICdzdHlsZScsICdzeXN0ZW1MYW5ndWFnZScsICd0cmFuc2Zvcm0nLCAnd2lkdGgnLCAneCcsICd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6aHJlZicsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAneSddLFxuICAgIHZpZXc6IFsnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdpZCcsICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3ZpZXdCb3gnLCAndmlld1RhcmdldCcsICd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnLCAnem9vbUFuZFBhbiddLFxuICAgIHZrZXJuOiBbJ2cxJywgJ2cyJywgJ2lkJywgJ2snLCAndTEnLCAndTInLCAneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJ11cbiAgfTtcblxuXG4gIHN2Z1ByZXNlbnRhdGlvbkVsZW1lbnRzID0ge1xuICAgICdhJzogdHJ1ZSxcbiAgICAnYWx0R2x5cGgnOiB0cnVlLFxuICAgICdhbmltYXRlJzogdHJ1ZSxcbiAgICAnYW5pbWF0ZUNvbG9yJzogdHJ1ZSxcbiAgICAnY2lyY2xlJzogdHJ1ZSxcbiAgICAnY2xpcFBhdGgnOiB0cnVlLFxuICAgICdkZWZzJzogdHJ1ZSxcbiAgICAnZWxsaXBzZSc6IHRydWUsXG4gICAgJ2ZlQmxlbmQnOiB0cnVlLFxuICAgICdmZUNvbG9yTWF0cml4JzogdHJ1ZSxcbiAgICAnZmVDb21wb25lbnRUcmFuc2Zlcic6IHRydWUsXG4gICAgJ2ZlQ29tcG9zaXRlJzogdHJ1ZSxcbiAgICAnZmVDb252b2x2ZU1hdHJpeCc6IHRydWUsXG4gICAgJ2ZlRGlmZnVzZUxpZ2h0aW5nJzogdHJ1ZSxcbiAgICAnZmVEaXNwbGFjZW1lbnRNYXAnOiB0cnVlLFxuICAgICdmZUZsb29kJzogdHJ1ZSxcbiAgICAnZmVHYXVzc2lhbkJsdXInOiB0cnVlLFxuICAgICdmZUltYWdlJzogdHJ1ZSxcbiAgICAnZmVNZXJnZSc6IHRydWUsXG4gICAgJ2ZlTW9ycGhvbG9neSc6IHRydWUsXG4gICAgJ2ZlT2Zmc2V0JzogdHJ1ZSxcbiAgICAnZmVTcGVjdWxhckxpZ2h0aW5nJzogdHJ1ZSxcbiAgICAnZmVUaWxlJzogdHJ1ZSxcbiAgICAnZmVUdXJidWxlbmNlJzogdHJ1ZSxcbiAgICAnZmlsdGVyJzogdHJ1ZSxcbiAgICAnZm9udCc6IHRydWUsXG4gICAgJ2ZvcmVpZ25PYmplY3QnOiB0cnVlLFxuICAgICdnJzogdHJ1ZSxcbiAgICAnZ2x5cGgnOiB0cnVlLFxuICAgICdnbHlwaFJlZic6IHRydWUsXG4gICAgJ2ltYWdlJzogdHJ1ZSxcbiAgICAnbGluZSc6IHRydWUsXG4gICAgJ2xpbmVhckdyYWRpZW50JzogdHJ1ZSxcbiAgICAnbWFya2VyJzogdHJ1ZSxcbiAgICAnbWFzayc6IHRydWUsXG4gICAgJ21pc3NpbmctZ2x5cGgnOiB0cnVlLFxuICAgICdwYXRoJzogdHJ1ZSxcbiAgICAncGF0dGVybic6IHRydWUsXG4gICAgJ3BvbHlnb24nOiB0cnVlLFxuICAgICdwb2x5bGluZSc6IHRydWUsXG4gICAgJ3JhZGlhbEdyYWRpZW50JzogdHJ1ZSxcbiAgICAncmVjdCc6IHRydWUsXG4gICAgJ3N0b3AnOiB0cnVlLFxuICAgICdzdmcnOiB0cnVlLFxuICAgICdzd2l0Y2gnOiB0cnVlLFxuICAgICdzeW1ib2wnOiB0cnVlLFxuICAgICd0ZXh0JzogdHJ1ZSxcbiAgICAndGV4dFBhdGgnOiB0cnVlLFxuICAgICd0cmVmJzogdHJ1ZSxcbiAgICAndHNwYW4nOiB0cnVlLFxuICAgICd1c2UnOiB0cnVlXG4gIH07XG5cbiAgc3ZnUHJlc2VudGF0aW9uQXR0cmlidXRlcyA9IHtcbiAgICAnYWxpZ25tZW50LWJhc2VsaW5lJzogdHJ1ZSxcbiAgICAnYmFzZWxpbmUtc2hpZnQnOiB0cnVlLFxuICAgICdjbGlwLXBhdGgnOiB0cnVlLFxuICAgICdjbGlwLXJ1bGUnOiB0cnVlLFxuICAgICdjbGlwJzogdHJ1ZSxcbiAgICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogdHJ1ZSxcbiAgICAnY29sb3ItaW50ZXJwb2xhdGlvbic6IHRydWUsXG4gICAgJ2NvbG9yLXByb2ZpbGUnOiB0cnVlLFxuICAgICdjb2xvci1yZW5kZXJpbmcnOiB0cnVlLFxuICAgICdjb2xvcic6IHRydWUsXG4gICAgJ2N1cnNvcic6IHRydWUsXG4gICAgJ2RpcmVjdGlvbic6IHRydWUsXG4gICAgJ2Rpc3BsYXknOiB0cnVlLFxuICAgICdkb21pbmFudC1iYXNlbGluZSc6IHRydWUsXG4gICAgJ2VuYWJsZS1iYWNrZ3JvdW5kJzogdHJ1ZSxcbiAgICAnZmlsbC1vcGFjaXR5JzogdHJ1ZSxcbiAgICAnZmlsbC1ydWxlJzogdHJ1ZSxcbiAgICAnZmlsbCc6IHRydWUsXG4gICAgJ2ZpbHRlcic6IHRydWUsXG4gICAgJ2Zsb29kLWNvbG9yJzogdHJ1ZSxcbiAgICAnZmxvb2Qtb3BhY2l0eSc6IHRydWUsXG4gICAgJ2ZvbnQtZmFtaWx5JzogdHJ1ZSxcbiAgICAnZm9udC1zaXplLWFkanVzdCc6IHRydWUsXG4gICAgJ2ZvbnQtc2l6ZSc6IHRydWUsXG4gICAgJ2ZvbnQtc3RyZXRjaCc6IHRydWUsXG4gICAgJ2ZvbnQtc3R5bGUnOiB0cnVlLFxuICAgICdmb250LXZhcmlhbnQnOiB0cnVlLFxuICAgICdmb250LXdlaWdodCc6IHRydWUsXG4gICAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiB0cnVlLFxuICAgICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCc6IHRydWUsXG4gICAgJ2ltYWdlLXJlbmRlcmluZyc6IHRydWUsXG4gICAgJ2tlcm5pbmcnOiB0cnVlLFxuICAgICdsZXR0ZXItc3BhY2luZyc6IHRydWUsXG4gICAgJ2xpZ2h0aW5nLWNvbG9yJzogdHJ1ZSxcbiAgICAnbWFya2VyLWVuZCc6IHRydWUsXG4gICAgJ21hcmtlci1taWQnOiB0cnVlLFxuICAgICdtYXJrZXItc3RhcnQnOiB0cnVlLFxuICAgICdtYXNrJzogdHJ1ZSxcbiAgICAnb3BhY2l0eSc6IHRydWUsXG4gICAgJ292ZXJmbG93JzogdHJ1ZSxcbiAgICAncG9pbnRlci1ldmVudHMnOiB0cnVlLFxuICAgICdzaGFwZS1yZW5kZXJpbmcnOiB0cnVlLFxuICAgICdzdG9wLWNvbG9yJzogdHJ1ZSxcbiAgICAnc3RvcC1vcGFjaXR5JzogdHJ1ZSxcbiAgICAnc3Ryb2tlLWRhc2hhcnJheSc6IHRydWUsXG4gICAgJ3N0cm9rZS1kYXNob2Zmc2V0JzogdHJ1ZSxcbiAgICAnc3Ryb2tlLWxpbmVjYXAnOiB0cnVlLFxuICAgICdzdHJva2UtbGluZWpvaW4nOiB0cnVlLFxuICAgICdzdHJva2UtbWl0ZXJsaW1pdCc6IHRydWUsXG4gICAgJ3N0cm9rZS1vcGFjaXR5JzogdHJ1ZSxcbiAgICAnc3Ryb2tlLXdpZHRoJzogdHJ1ZSxcbiAgICAnc3Ryb2tlJzogdHJ1ZSxcbiAgICAndGV4dC1hbmNob3InOiB0cnVlLFxuICAgICd0ZXh0LWRlY29yYXRpb24nOiB0cnVlLFxuICAgICd0ZXh0LXJlbmRlcmluZyc6IHRydWUsXG4gICAgJ3VuaWNvZGUtYmlkaSc6IHRydWUsXG4gICAgJ3Zpc2liaWxpdHknOiB0cnVlLFxuICAgICd3b3JkLXNwYWNpbmcnOiB0cnVlLFxuICAgICd3cml0aW5nLW1vZGUnOiB0cnVlXG4gIH07XG5cbiAgdmFyIGNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KGh0bWwpIHtcbiAgICB2YXIgZGl2ID0gRE9NLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZDtcbiAgfTtcblxuICBzdmdBbmFseXplciA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTVkdBbmFseXplcigpIHtcbiAgICAgIFxuXG4gICAgICBpZiAoY3JlYXRlRWxlbWVudCgnPHN2Zz48YWx0R2x5cGggLz48L3N2Zz4nKS5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZSA9PT0gJ2FsdGdseXBoJyAmJiBlbGVtZW50cy5hbHRHbHlwaCkge1xuICAgICAgICBlbGVtZW50cy5hbHRnbHlwaCA9IGVsZW1lbnRzLmFsdEdseXBoO1xuICAgICAgICBkZWxldGUgZWxlbWVudHMuYWx0R2x5cGg7XG4gICAgICAgIGVsZW1lbnRzLmFsdGdseXBoZGVmID0gZWxlbWVudHMuYWx0R2x5cGhEZWY7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50cy5hbHRHbHlwaERlZjtcbiAgICAgICAgZWxlbWVudHMuYWx0Z2x5cGhpdGVtID0gZWxlbWVudHMuYWx0R2x5cGhJdGVtO1xuICAgICAgICBkZWxldGUgZWxlbWVudHMuYWx0R2x5cGhJdGVtO1xuICAgICAgICBlbGVtZW50cy5nbHlwaHJlZiA9IGVsZW1lbnRzLmdseXBoUmVmO1xuICAgICAgICBkZWxldGUgZWxlbWVudHMuZ2x5cGhSZWY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU1ZHQW5hbHl6ZXIucHJvdG90eXBlLmlzU3RhbmRhcmRTdmdBdHRyaWJ1dGUgPSBmdW5jdGlvbiBpc1N0YW5kYXJkU3ZnQXR0cmlidXRlKG5vZGVOYW1lLCBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICByZXR1cm4gcHJlc2VudGF0aW9uRWxlbWVudHNbbm9kZU5hbWVdICYmIHByZXNlbnRhdGlvbkF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gfHwgZWxlbWVudHNbbm9kZU5hbWVdICYmIGVsZW1lbnRzW25vZGVOYW1lXS5pbmRleE9mKGF0dHJpYnV0ZU5hbWUpICE9PSAtMTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNWR0FuYWx5emVyO1xuICB9KCk7XG59XG5cbmV4cG9ydCB2YXIgZWxlbWVudHMgPSBzdmdFbGVtZW50cztcbmV4cG9ydCB2YXIgcHJlc2VudGF0aW9uRWxlbWVudHMgPSBzdmdQcmVzZW50YXRpb25FbGVtZW50cztcbmV4cG9ydCB2YXIgcHJlc2VudGF0aW9uQXR0cmlidXRlcyA9IHN2Z1ByZXNlbnRhdGlvbkF0dHJpYnV0ZXM7XG5leHBvcnQgdmFyIFNWR0FuYWx5emVyID0gc3ZnQW5hbHl6ZXIgfHwgZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBfY2xhc3MxMSgpIHtcbiAgICBcbiAgfVxuXG4gIF9jbGFzczExLnByb3RvdHlwZS5pc1N0YW5kYXJkU3ZnQXR0cmlidXRlID0gZnVuY3Rpb24gaXNTdGFuZGFyZFN2Z0F0dHJpYnV0ZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmV0dXJuIF9jbGFzczExO1xufSgpO1xuXG5leHBvcnQgdmFyIE9ic2VydmVyTG9jYXRvciA9IChfdGVtcCA9IF9jbGFzczEyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYnNlcnZlckxvY2F0b3IodGFza1F1ZXVlLCBldmVudE1hbmFnZXIsIGRpcnR5Q2hlY2tlciwgc3ZnQW5hbHl6ZXIsIHBhcnNlcikge1xuICAgIFxuXG4gICAgdGhpcy50YXNrUXVldWUgPSB0YXNrUXVldWU7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudE1hbmFnZXI7XG4gICAgdGhpcy5kaXJ0eUNoZWNrZXIgPSBkaXJ0eUNoZWNrZXI7XG4gICAgdGhpcy5zdmdBbmFseXplciA9IHN2Z0FuYWx5emVyO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuXG4gICAgdGhpcy5hZGFwdGVycyA9IFtdO1xuICAgIHRoaXMubG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ29ic2VydmVyLWxvY2F0b3InKTtcbiAgfVxuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuZ2V0T2JzZXJ2ZXIgPSBmdW5jdGlvbiBnZXRPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSkge1xuICAgIHZhciBvYnNlcnZlcnNMb29rdXAgPSBvYmouX19vYnNlcnZlcnNfXztcbiAgICB2YXIgb2JzZXJ2ZXIgPSB2b2lkIDA7XG5cbiAgICBpZiAob2JzZXJ2ZXJzTG9va3VwICYmIHByb3BlcnR5TmFtZSBpbiBvYnNlcnZlcnNMb29rdXApIHtcbiAgICAgIHJldHVybiBvYnNlcnZlcnNMb29rdXBbcHJvcGVydHlOYW1lXTtcbiAgICB9XG5cbiAgICBvYnNlcnZlciA9IHRoaXMuY3JlYXRlUHJvcGVydHlPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSk7XG5cbiAgICBpZiAoIW9ic2VydmVyLmRvTm90Q2FjaGUpIHtcbiAgICAgIGlmIChvYnNlcnZlcnNMb29rdXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvYnNlcnZlcnNMb29rdXAgPSB0aGlzLmdldE9yQ3JlYXRlT2JzZXJ2ZXJzTG9va3VwKG9iaik7XG4gICAgICB9XG5cbiAgICAgIG9ic2VydmVyc0xvb2t1cFtwcm9wZXJ0eU5hbWVdID0gb2JzZXJ2ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9ic2VydmVyO1xuICB9O1xuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuZ2V0T3JDcmVhdGVPYnNlcnZlcnNMb29rdXAgPSBmdW5jdGlvbiBnZXRPckNyZWF0ZU9ic2VydmVyc0xvb2t1cChvYmopIHtcbiAgICByZXR1cm4gb2JqLl9fb2JzZXJ2ZXJzX18gfHwgdGhpcy5jcmVhdGVPYnNlcnZlcnNMb29rdXAob2JqKTtcbiAgfTtcblxuICBPYnNlcnZlckxvY2F0b3IucHJvdG90eXBlLmNyZWF0ZU9ic2VydmVyc0xvb2t1cCA9IGZ1bmN0aW9uIGNyZWF0ZU9ic2VydmVyc0xvb2t1cChvYmopIHtcbiAgICB2YXIgdmFsdWUgPSB7fTtcblxuICAgIGlmICghUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdfX29ic2VydmVyc19fJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfSkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Nhbm5vdCBhZGQgb2JzZXJ2ZXJzIHRvIG9iamVjdCcsIG9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuYWRkQWRhcHRlciA9IGZ1bmN0aW9uIGFkZEFkYXB0ZXIoYWRhcHRlcikge1xuICAgIHRoaXMuYWRhcHRlcnMucHVzaChhZGFwdGVyKTtcbiAgfTtcblxuICBPYnNlcnZlckxvY2F0b3IucHJvdG90eXBlLmdldEFkYXB0ZXJPYnNlcnZlciA9IGZ1bmN0aW9uIGdldEFkYXB0ZXJPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikge1xuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuYWRhcHRlcnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJzW2ldO1xuICAgICAgdmFyIG9ic2VydmVyID0gYWRhcHRlci5nZXRPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBPYnNlcnZlckxvY2F0b3IucHJvdG90eXBlLmNyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIgPSBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eU9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSB2b2lkIDA7XG4gICAgdmFyIGhhbmRsZXIgPSB2b2lkIDA7XG4gICAgdmFyIHhsaW5rUmVzdWx0ID0gdm9pZCAwO1xuXG4gICAgaWYgKCEob2JqIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgcmV0dXJuIG5ldyBQcmltaXRpdmVPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERPTS5FbGVtZW50KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2xhc3NPYnNlcnZlcihvYmopO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3N0eWxlJyB8fCBwcm9wZXJ0eU5hbWUgPT09ICdjc3MnKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3R5bGVPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSk7XG4gICAgICB9XG4gICAgICBoYW5kbGVyID0gdGhpcy5ldmVudE1hbmFnZXIuZ2V0RWxlbWVudEhhbmRsZXIob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3ZhbHVlJyAmJiBvYmoudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2VsZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFZhbHVlT2JzZXJ2ZXIob2JqLCBoYW5kbGVyLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdjaGVja2VkJyAmJiBvYmoudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2hlY2tlZE9ic2VydmVyKG9iaiwgaGFuZGxlciwgdGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gbmV3IFZhbHVlQXR0cmlidXRlT2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUsIGhhbmRsZXIpO1xuICAgICAgfVxuICAgICAgeGxpbmtSZXN1bHQgPSAvXnhsaW5rOiguKykkLy5leGVjKHByb3BlcnR5TmFtZSk7XG4gICAgICBpZiAoeGxpbmtSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBYTGlua0F0dHJpYnV0ZU9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lLCB4bGlua1Jlc3VsdFsxXSk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAncm9sZScgJiYgKG9iaiBpbnN0YW5jZW9mIERPTS5FbGVtZW50IHx8IG9iaiBpbnN0YW5jZW9mIERPTS5TVkdFbGVtZW50KSB8fCAvXlxcdys6fF5kYXRhLXxeYXJpYS0vLnRlc3QocHJvcGVydHlOYW1lKSB8fCBvYmogaW5zdGFuY2VvZiBET00uU1ZHRWxlbWVudCAmJiB0aGlzLnN2Z0FuYWx5emVyLmlzU3RhbmRhcmRTdmdBdHRyaWJ1dGUob2JqLm5vZGVOYW1lLCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUF0dHJpYnV0ZU9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZXNjcmlwdG9yID0gT2JqZWN0LmdldFByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3BlcnR5TmFtZSk7XG5cbiAgICBpZiAoaGFzRGVjbGFyZWREZXBlbmRlbmNpZXMoZGVzY3JpcHRvcikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVDb21wdXRlZE9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgdmFyIGV4aXN0aW5nR2V0dGVyT3JTZXR0ZXIgPSBkZXNjcmlwdG9yLmdldCB8fCBkZXNjcmlwdG9yLnNldDtcbiAgICAgIGlmIChleGlzdGluZ0dldHRlck9yU2V0dGVyKSB7XG4gICAgICAgIGlmIChleGlzdGluZ0dldHRlck9yU2V0dGVyLmdldE9ic2VydmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nR2V0dGVyT3JTZXR0ZXIuZ2V0T2JzZXJ2ZXIob2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhZGFwdGVyT2JzZXJ2ZXIgPSB0aGlzLmdldEFkYXB0ZXJPYnNlcnZlcihvYmosIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG4gICAgICAgIGlmIChhZGFwdGVyT2JzZXJ2ZXIpIHtcbiAgICAgICAgICByZXR1cm4gYWRhcHRlck9ic2VydmVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRGlydHlDaGVja1Byb3BlcnR5KHRoaXMuZGlydHlDaGVja2VyLCBvYmosIHByb3BlcnR5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnbGVuZ3RoJykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcnJheU9ic2VydmVyKG9iaikuZ2V0TGVuZ3RoT2JzZXJ2ZXIoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEaXJ0eUNoZWNrUHJvcGVydHkodGhpcy5kaXJ0eUNoZWNrZXIsIG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3NpemUnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1hcE9ic2VydmVyKG9iaikuZ2V0TGVuZ3RoT2JzZXJ2ZXIoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEaXJ0eUNoZWNrUHJvcGVydHkodGhpcy5kaXJ0eUNoZWNrZXIsIG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3NpemUnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldE9ic2VydmVyKG9iaikuZ2V0TGVuZ3RoT2JzZXJ2ZXIoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEaXJ0eUNoZWNrUHJvcGVydHkodGhpcy5kaXJ0eUNoZWNrZXIsIG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNldHRlck9ic2VydmVyKHRoaXMudGFza1F1ZXVlLCBvYmosIHByb3BlcnR5TmFtZSk7XG4gIH07XG5cbiAgT2JzZXJ2ZXJMb2NhdG9yLnByb3RvdHlwZS5nZXRBY2Nlc3NvciA9IGZ1bmN0aW9uIGdldEFjY2Vzc29yKG9iaiwgcHJvcGVydHlOYW1lKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERPTS5FbGVtZW50KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnY2xhc3MnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ3N0eWxlJyB8fCBwcm9wZXJ0eU5hbWUgPT09ICdjc3MnIHx8IHByb3BlcnR5TmFtZSA9PT0gJ3ZhbHVlJyAmJiAob2JqLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fCBvYmoudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2VsZWN0JykgfHwgcHJvcGVydHlOYW1lID09PSAnY2hlY2tlZCcgJiYgb2JqLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fCBwcm9wZXJ0eU5hbWUgPT09ICdtb2RlbCcgJiYgb2JqLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fCAvXnhsaW5rOi4rJC8uZXhlYyhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmICgvXlxcdys6fF5kYXRhLXxeYXJpYS0vLnRlc3QocHJvcGVydHlOYW1lKSB8fCBvYmogaW5zdGFuY2VvZiBET00uU1ZHRWxlbWVudCAmJiB0aGlzLnN2Z0FuYWx5emVyLmlzU3RhbmRhcmRTdmdBdHRyaWJ1dGUob2JqLm5vZGVOYW1lLCBwcm9wZXJ0eU5hbWUpIHx8IG9iai50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbWcnICYmIHByb3BlcnR5TmFtZSA9PT0gJ3NyYycgfHwgb2JqLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnICYmIHByb3BlcnR5TmFtZSA9PT0gJ2hyZWYnKSB7XG4gICAgICAgIHJldHVybiBkYXRhQXR0cmlidXRlQWNjZXNzb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc29yO1xuICB9O1xuXG4gIE9ic2VydmVyTG9jYXRvci5wcm90b3R5cGUuZ2V0QXJyYXlPYnNlcnZlciA9IGZ1bmN0aW9uIGdldEFycmF5T2JzZXJ2ZXIoYXJyYXkpIHtcbiAgICByZXR1cm4gX2dldEFycmF5T2JzZXJ2ZXIodGhpcy50YXNrUXVldWUsIGFycmF5KTtcbiAgfTtcblxuICBPYnNlcnZlckxvY2F0b3IucHJvdG90eXBlLmdldE1hcE9ic2VydmVyID0gZnVuY3Rpb24gZ2V0TWFwT2JzZXJ2ZXIobWFwKSB7XG4gICAgcmV0dXJuIF9nZXRNYXBPYnNlcnZlcih0aGlzLnRhc2tRdWV1ZSwgbWFwKTtcbiAgfTtcblxuICBPYnNlcnZlckxvY2F0b3IucHJvdG90eXBlLmdldFNldE9ic2VydmVyID0gZnVuY3Rpb24gZ2V0U2V0T2JzZXJ2ZXIoc2V0KSB7XG4gICAgcmV0dXJuIF9nZXRTZXRPYnNlcnZlcih0aGlzLnRhc2tRdWV1ZSwgc2V0KTtcbiAgfTtcblxuICByZXR1cm4gT2JzZXJ2ZXJMb2NhdG9yO1xufSgpLCBfY2xhc3MxMi5pbmplY3QgPSBbVGFza1F1ZXVlLCBFdmVudE1hbmFnZXIsIERpcnR5Q2hlY2tlciwgU1ZHQW5hbHl6ZXIsIFBhcnNlcl0sIF90ZW1wKTtcblxuZXhwb3J0IHZhciBPYmplY3RPYnNlcnZhdGlvbkFkYXB0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE9iamVjdE9ic2VydmF0aW9uQWRhcHRlcigpIHtcbiAgICBcbiAgfVxuXG4gIE9iamVjdE9ic2VydmF0aW9uQWRhcHRlci5wcm90b3R5cGUuZ2V0T2JzZXJ2ZXIgPSBmdW5jdGlvbiBnZXRPYnNlcnZlcihvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikge1xuICAgIHRocm93IG5ldyBFcnJvcignQmluZGluZ0FkYXB0ZXJzIG11c3QgaW1wbGVtZW50IGdldE9ic2VydmVyKG9iamVjdCwgcHJvcGVydHlOYW1lKS4nKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0T2JzZXJ2YXRpb25BZGFwdGVyO1xufSgpO1xuXG5leHBvcnQgdmFyIEJpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCaW5kaW5nRXhwcmVzc2lvbihvYnNlcnZlckxvY2F0b3IsIHRhcmdldFByb3BlcnR5LCBzb3VyY2VFeHByZXNzaW9uLCBtb2RlLCBsb29rdXBGdW5jdGlvbnMsIGF0dHJpYnV0ZSkge1xuICAgIFxuXG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XG4gICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFByb3BlcnR5O1xuICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbiA9IHNvdXJjZUV4cHJlc3Npb247XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLmxvb2t1cEZ1bmN0aW9ucyA9IGxvb2t1cEZ1bmN0aW9ucztcbiAgICB0aGlzLmF0dHJpYnV0ZSA9IGF0dHJpYnV0ZTtcbiAgICB0aGlzLmRpc2NyZXRlID0gZmFsc2U7XG4gIH1cblxuICBCaW5kaW5nRXhwcmVzc2lvbi5wcm90b3R5cGUuY3JlYXRlQmluZGluZyA9IGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmcodGFyZ2V0KSB7XG4gICAgcmV0dXJuIG5ldyBCaW5kaW5nKHRoaXMub2JzZXJ2ZXJMb2NhdG9yLCB0aGlzLnNvdXJjZUV4cHJlc3Npb24sIHRhcmdldCwgdGhpcy50YXJnZXRQcm9wZXJ0eSwgdGhpcy5tb2RlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIEJpbmRpbmdFeHByZXNzaW9uO1xufSgpO1xuXG5leHBvcnQgdmFyIEJpbmRpbmcgPSAoX2RlYzEwID0gY29ubmVjdGFibGUoKSwgX2RlYzEwKF9jbGFzczEzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCaW5kaW5nKG9ic2VydmVyTG9jYXRvciwgc291cmNlRXhwcmVzc2lvbiwgdGFyZ2V0LCB0YXJnZXRQcm9wZXJ0eSwgbW9kZSwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgXG5cbiAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcbiAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMudGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xuICB9XG5cbiAgQmluZGluZy5wcm90b3R5cGUudXBkYXRlVGFyZ2V0ID0gZnVuY3Rpb24gdXBkYXRlVGFyZ2V0KHZhbHVlKSB7XG4gICAgdGhpcy50YXJnZXRPYnNlcnZlci5zZXRWYWx1ZSh2YWx1ZSwgdGhpcy50YXJnZXQsIHRoaXMudGFyZ2V0UHJvcGVydHkpO1xuICB9O1xuXG4gIEJpbmRpbmcucHJvdG90eXBlLnVwZGF0ZVNvdXJjZSA9IGZ1bmN0aW9uIHVwZGF0ZVNvdXJjZSh2YWx1ZSkge1xuICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5hc3NpZ24odGhpcy5zb3VyY2UsIHZhbHVlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgQmluZGluZy5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIGNhbGwoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgaWYgKCF0aGlzLmlzQm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQgPT09IHNvdXJjZUNvbnRleHQpIHtcbiAgICAgIG9sZFZhbHVlID0gdGhpcy50YXJnZXRPYnNlcnZlci5nZXRWYWx1ZSh0aGlzLnRhcmdldCwgdGhpcy50YXJnZXRQcm9wZXJ0eSk7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuc291cmNlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLnNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldChuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tb2RlICE9PSBiaW5kaW5nTW9kZS5vbmVUaW1lKSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICAgICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uLmNvbm5lY3QodGhpcywgdGhpcy5zb3VyY2UpO1xuICAgICAgICB0aGlzLnVub2JzZXJ2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb250ZXh0ID09PSB0YXJnZXRDb250ZXh0KSB7XG4gICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuc291cmNlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLnNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU291cmNlKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGNhbGwgY29udGV4dCAnICsgY29udGV4dCk7XG4gIH07XG5cbiAgQmluZGluZy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQoc291cmNlKSB7XG4gICAgaWYgKHRoaXMuaXNCb3VuZCkge1xuICAgICAgaWYgKHRoaXMuc291cmNlID09PSBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy51bmJpbmQoKTtcbiAgICB9XG4gICAgdGhpcy5pc0JvdW5kID0gdHJ1ZTtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcblxuICAgIGlmICh0aGlzLnNvdXJjZUV4cHJlc3Npb24uYmluZCkge1xuICAgICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uLmJpbmQodGhpcywgc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgfVxuXG4gICAgdmFyIG1vZGUgPSB0aGlzLm1vZGU7XG4gICAgaWYgKCF0aGlzLnRhcmdldE9ic2VydmVyKSB7XG4gICAgICB2YXIgbWV0aG9kID0gbW9kZSA9PT0gYmluZGluZ01vZGUudHdvV2F5IHx8IG1vZGUgPT09IGJpbmRpbmdNb2RlLmZyb21WaWV3ID8gJ2dldE9ic2VydmVyJyA6ICdnZXRBY2Nlc3Nvcic7XG4gICAgICB0aGlzLnRhcmdldE9ic2VydmVyID0gdGhpcy5vYnNlcnZlckxvY2F0b3JbbWV0aG9kXSh0aGlzLnRhcmdldCwgdGhpcy50YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgaWYgKCdiaW5kJyBpbiB0aGlzLnRhcmdldE9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRhcmdldE9ic2VydmVyLmJpbmQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSAhPT0gYmluZGluZ01vZGUuZnJvbVZpZXcpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc291cmNlRXhwcmVzc2lvbi5ldmFsdWF0ZShzb3VyY2UsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgICAgIHRoaXMudXBkYXRlVGFyZ2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAobW9kZSA9PT0gYmluZGluZ01vZGUub25lVGltZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gYmluZGluZ01vZGUudG9WaWV3KSB7XG4gICAgICBlbnF1ZXVlQmluZGluZ0Nvbm5lY3QodGhpcyk7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBiaW5kaW5nTW9kZS50d29XYXkpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5jb25uZWN0KHRoaXMsIHNvdXJjZSk7XG4gICAgICB0aGlzLnRhcmdldE9ic2VydmVyLnN1YnNjcmliZSh0YXJnZXRDb250ZXh0LCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09IGJpbmRpbmdNb2RlLmZyb21WaWV3KSB7XG4gICAgICB0aGlzLnRhcmdldE9ic2VydmVyLnN1YnNjcmliZSh0YXJnZXRDb250ZXh0LCB0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgQmluZGluZy5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgIGlmICghdGhpcy5pc0JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKSB7XG4gICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKHRoaXMsIHRoaXMuc291cmNlKTtcbiAgICB9XG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICAgIGlmICgndW5iaW5kJyBpbiB0aGlzLnRhcmdldE9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRhcmdldE9ic2VydmVyLnVuYmluZCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXJnZXRPYnNlcnZlci51bnN1YnNjcmliZSkge1xuICAgICAgdGhpcy50YXJnZXRPYnNlcnZlci51bnN1YnNjcmliZSh0YXJnZXRDb250ZXh0LCB0aGlzKTtcbiAgICB9XG4gICAgdGhpcy51bm9ic2VydmUodHJ1ZSk7XG4gIH07XG5cbiAgQmluZGluZy5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIGNvbm5lY3QoZXZhbHVhdGUpIHtcbiAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZhbHVhdGUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc291cmNlRXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLnNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICAgICAgdGhpcy51cGRhdGVUYXJnZXQodmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24uY29ubmVjdCh0aGlzLCB0aGlzLnNvdXJjZSk7XG4gIH07XG5cbiAgcmV0dXJuIEJpbmRpbmc7XG59KCkpIHx8IF9jbGFzczEzKTtcblxuZXhwb3J0IHZhciBDYWxsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2FsbEV4cHJlc3Npb24ob2JzZXJ2ZXJMb2NhdG9yLCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlRXhwcmVzc2lvbiwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgXG5cbiAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcbiAgICB0aGlzLnRhcmdldFByb3BlcnR5ID0gdGFyZ2V0UHJvcGVydHk7XG4gICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbjtcbiAgICB0aGlzLmxvb2t1cEZ1bmN0aW9ucyA9IGxvb2t1cEZ1bmN0aW9ucztcbiAgfVxuXG4gIENhbGxFeHByZXNzaW9uLnByb3RvdHlwZS5jcmVhdGVCaW5kaW5nID0gZnVuY3Rpb24gY3JlYXRlQmluZGluZyh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IENhbGwodGhpcy5vYnNlcnZlckxvY2F0b3IsIHRoaXMuc291cmNlRXhwcmVzc2lvbiwgdGFyZ2V0LCB0aGlzLnRhcmdldFByb3BlcnR5LCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIENhbGxFeHByZXNzaW9uO1xufSgpO1xuXG5leHBvcnQgdmFyIENhbGwgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENhbGwob2JzZXJ2ZXJMb2NhdG9yLCBzb3VyY2VFeHByZXNzaW9uLCB0YXJnZXQsIHRhcmdldFByb3BlcnR5LCBsb29rdXBGdW5jdGlvbnMpIHtcbiAgICBcblxuICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbiA9IHNvdXJjZUV4cHJlc3Npb247XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IG9ic2VydmVyTG9jYXRvci5nZXRPYnNlcnZlcih0YXJnZXQsIHRhcmdldFByb3BlcnR5KTtcbiAgICB0aGlzLmxvb2t1cEZ1bmN0aW9ucyA9IGxvb2t1cEZ1bmN0aW9ucztcbiAgfVxuXG4gIENhbGwucHJvdG90eXBlLmNhbGxTb3VyY2UgPSBmdW5jdGlvbiBjYWxsU291cmNlKCRldmVudCkge1xuICAgIHZhciBvdmVycmlkZUNvbnRleHQgPSB0aGlzLnNvdXJjZS5vdmVycmlkZUNvbnRleHQ7XG4gICAgT2JqZWN0LmFzc2lnbihvdmVycmlkZUNvbnRleHQsICRldmVudCk7XG4gICAgb3ZlcnJpZGVDb250ZXh0LiRldmVudCA9ICRldmVudDtcbiAgICB2YXIgbXVzdEV2YWx1YXRlID0gdHJ1ZTtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucywgbXVzdEV2YWx1YXRlKTtcbiAgICBkZWxldGUgb3ZlcnJpZGVDb250ZXh0LiRldmVudDtcbiAgICBmb3IgKHZhciBwcm9wIGluICRldmVudCkge1xuICAgICAgZGVsZXRlIG92ZXJyaWRlQ29udGV4dFtwcm9wXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBDYWxsLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZChzb3VyY2UpIHtcbiAgICB2YXIgX3RoaXMyNiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5pc0JvdW5kKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09IHNvdXJjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnVuYmluZCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlRXhwcmVzc2lvbi5iaW5kKSB7XG4gICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24uYmluZCh0aGlzLCBzb3VyY2UsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXRQcm9wZXJ0eS5zZXRWYWx1ZShmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICByZXR1cm4gX3RoaXMyNi5jYWxsU291cmNlKCRldmVudCk7XG4gICAgfSk7XG4gIH07XG5cbiAgQ2FsbC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgIGlmICghdGhpcy5pc0JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKSB7XG4gICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKHRoaXMsIHRoaXMuc291cmNlKTtcbiAgICB9XG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICAgIHRoaXMudGFyZ2V0UHJvcGVydHkuc2V0VmFsdWUobnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIENhbGw7XG59KCk7XG5cbmV4cG9ydCB2YXIgVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZShuYW1lKSB7XG4gICAgXG5cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZS5jb252ZW50aW9uID0gZnVuY3Rpb24gY29udmVudGlvbihuYW1lKSB7XG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoJ1ZhbHVlQ29udmVydGVyJykpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZShjYW1lbENhc2UobmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggLSAxNCkpKTtcbiAgICB9XG4gIH07XG5cbiAgVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIGluaXRpYWxpemUoY29udGFpbmVyLCB0YXJnZXQpIHtcbiAgICB0aGlzLmluc3RhbmNlID0gY29udGFpbmVyLmdldCh0YXJnZXQpO1xuICB9O1xuXG4gIFZhbHVlQ29udmVydGVyUmVzb3VyY2UucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIocmVnaXN0cnksIG5hbWUpIHtcbiAgICByZWdpc3RyeS5yZWdpc3RlclZhbHVlQ29udmVydGVyKG5hbWUgfHwgdGhpcy5uYW1lLCB0aGlzLmluc3RhbmNlKTtcbiAgfTtcblxuICBWYWx1ZUNvbnZlcnRlclJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gbG9hZChjb250YWluZXIsIHRhcmdldCkge307XG5cbiAgcmV0dXJuIFZhbHVlQ29udmVydGVyUmVzb3VyY2U7XG59KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUNvbnZlcnRlcihuYW1lT3JUYXJnZXQpIHtcbiAgaWYgKG5hbWVPclRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBuYW1lT3JUYXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5yZXNvdXJjZSwgbmV3IFZhbHVlQ29udmVydGVyUmVzb3VyY2UobmFtZU9yVGFyZ2V0KSwgdGFyZ2V0KTtcbiAgICB9O1xuICB9XG5cbiAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBuZXcgVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZSgpLCBuYW1lT3JUYXJnZXQpO1xufVxuXG5leHBvcnQgdmFyIEJpbmRpbmdCZWhhdmlvclJlc291cmNlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZShuYW1lKSB7XG4gICAgXG5cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgQmluZGluZ0JlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbiA9IGZ1bmN0aW9uIGNvbnZlbnRpb24obmFtZSkge1xuICAgIGlmIChuYW1lLmVuZHNXaXRoKCdCaW5kaW5nQmVoYXZpb3InKSkge1xuICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZShjYW1lbENhc2UobmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggLSAxNSkpKTtcbiAgICB9XG4gIH07XG5cbiAgQmluZGluZ0JlaGF2aW9yUmVzb3VyY2UucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGNvbnRhaW5lciwgdGFyZ2V0KSB7XG4gICAgdGhpcy5pbnN0YW5jZSA9IGNvbnRhaW5lci5nZXQodGFyZ2V0KTtcbiAgfTtcblxuICBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZS5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3RlcihyZWdpc3RyeSwgbmFtZSkge1xuICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQmluZGluZ0JlaGF2aW9yKG5hbWUgfHwgdGhpcy5uYW1lLCB0aGlzLmluc3RhbmNlKTtcbiAgfTtcblxuICBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQoY29udGFpbmVyLCB0YXJnZXQpIHt9O1xuXG4gIHJldHVybiBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZTtcbn0oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdCZWhhdmlvcihuYW1lT3JUYXJnZXQpIHtcbiAgaWYgKG5hbWVPclRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBuYW1lT3JUYXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5yZXNvdXJjZSwgbmV3IEJpbmRpbmdCZWhhdmlvclJlc291cmNlKG5hbWVPclRhcmdldCksIHRhcmdldCk7XG4gICAgfTtcbiAgfVxuXG4gIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5yZXNvdXJjZSwgbmV3IEJpbmRpbmdCZWhhdmlvclJlc291cmNlKCksIG5hbWVPclRhcmdldCk7XG59XG5cbmV4cG9ydCB2YXIgTGlzdGVuZXJFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMaXN0ZW5lckV4cHJlc3Npb24oZXZlbnRNYW5hZ2VyLCB0YXJnZXRFdmVudCwgc291cmNlRXhwcmVzc2lvbiwgZGVsZWdhdGlvblN0cmF0ZWd5LCBwcmV2ZW50RGVmYXVsdCwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgXG5cbiAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGV2ZW50TWFuYWdlcjtcbiAgICB0aGlzLnRhcmdldEV2ZW50ID0gdGFyZ2V0RXZlbnQ7XG4gICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbjtcbiAgICB0aGlzLmRlbGVnYXRpb25TdHJhdGVneSA9IGRlbGVnYXRpb25TdHJhdGVneTtcbiAgICB0aGlzLmRpc2NyZXRlID0gdHJ1ZTtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0ID0gcHJldmVudERlZmF1bHQ7XG4gICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSBsb29rdXBGdW5jdGlvbnM7XG4gIH1cblxuICBMaXN0ZW5lckV4cHJlc3Npb24ucHJvdG90eXBlLmNyZWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgTGlzdGVuZXIodGhpcy5ldmVudE1hbmFnZXIsIHRoaXMudGFyZ2V0RXZlbnQsIHRoaXMuZGVsZWdhdGlvblN0cmF0ZWd5LCB0aGlzLnNvdXJjZUV4cHJlc3Npb24sIHRhcmdldCwgdGhpcy5wcmV2ZW50RGVmYXVsdCwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIHJldHVybiBMaXN0ZW5lckV4cHJlc3Npb247XG59KCk7XG5cbmV4cG9ydCB2YXIgTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExpc3RlbmVyKGV2ZW50TWFuYWdlciwgdGFyZ2V0RXZlbnQsIGRlbGVnYXRpb25TdHJhdGVneSwgc291cmNlRXhwcmVzc2lvbiwgdGFyZ2V0LCBwcmV2ZW50RGVmYXVsdCwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgXG5cbiAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGV2ZW50TWFuYWdlcjtcbiAgICB0aGlzLnRhcmdldEV2ZW50ID0gdGFyZ2V0RXZlbnQ7XG4gICAgdGhpcy5kZWxlZ2F0aW9uU3RyYXRlZ3kgPSBkZWxlZ2F0aW9uU3RyYXRlZ3k7XG4gICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbjtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0ID0gcHJldmVudERlZmF1bHQ7XG4gICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSBsb29rdXBGdW5jdGlvbnM7XG4gIH1cblxuICBMaXN0ZW5lci5wcm90b3R5cGUuY2FsbFNvdXJjZSA9IGZ1bmN0aW9uIGNhbGxTb3VyY2UoZXZlbnQpIHtcbiAgICB2YXIgb3ZlcnJpZGVDb250ZXh0ID0gdGhpcy5zb3VyY2Uub3ZlcnJpZGVDb250ZXh0O1xuICAgIG92ZXJyaWRlQ29udGV4dC4kZXZlbnQgPSBldmVudDtcbiAgICB2YXIgbXVzdEV2YWx1YXRlID0gdHJ1ZTtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucywgbXVzdEV2YWx1YXRlKTtcbiAgICBkZWxldGUgb3ZlcnJpZGVDb250ZXh0LiRldmVudDtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmIHRoaXMucHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgTGlzdGVuZXIucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICB0aGlzLmNhbGxTb3VyY2UoZXZlbnQpO1xuICB9O1xuXG4gIExpc3RlbmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZChzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5pc0JvdW5kKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09IHNvdXJjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnVuYmluZCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlRXhwcmVzc2lvbi5iaW5kKSB7XG4gICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24uYmluZCh0aGlzLCBzb3VyY2UsIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgICB9XG4gICAgdGhpcy5faGFuZGxlciA9IHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy50YXJnZXQsIHRoaXMudGFyZ2V0RXZlbnQsIHRoaXMsIHRoaXMuZGVsZWdhdGlvblN0cmF0ZWd5LCB0cnVlKTtcbiAgfTtcblxuICBMaXN0ZW5lci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgIGlmICghdGhpcy5pc0JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKSB7XG4gICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKHRoaXMsIHRoaXMuc291cmNlKTtcbiAgICB9XG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2hhbmRsZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2hhbmRsZXIgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBMaXN0ZW5lcjtcbn0oKTtcblxuZnVuY3Rpb24gZ2V0QVUoZWxlbWVudCkge1xuICB2YXIgYXUgPSBlbGVtZW50LmF1O1xuXG4gIGlmIChhdSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBBdXJlbGlhIEFQSXMgYXJlIGRlZmluZWQgZm9yIHRoZSBlbGVtZW50OiBcIicgKyBlbGVtZW50LnRhZ05hbWUgKyAnXCIuJyk7XG4gIH1cblxuICByZXR1cm4gYXU7XG59XG5cbmV4cG9ydCB2YXIgTmFtZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5hbWVFeHByZXNzaW9uKHNvdXJjZUV4cHJlc3Npb24sIGFwaU5hbWUsIGxvb2t1cEZ1bmN0aW9ucykge1xuICAgIFxuXG4gICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbjtcbiAgICB0aGlzLmFwaU5hbWUgPSBhcGlOYW1lO1xuICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xuICAgIHRoaXMuZGlzY3JldGUgPSB0cnVlO1xuICB9XG5cbiAgTmFtZUV4cHJlc3Npb24ucHJvdG90eXBlLmNyZWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgTmFtZUJpbmRlcih0aGlzLnNvdXJjZUV4cHJlc3Npb24sIE5hbWVFeHByZXNzaW9uLmxvY2F0ZUFQSSh0YXJnZXQsIHRoaXMuYXBpTmFtZSksIHRoaXMubG9va3VwRnVuY3Rpb25zKTtcbiAgfTtcblxuICBOYW1lRXhwcmVzc2lvbi5sb2NhdGVBUEkgPSBmdW5jdGlvbiBsb2NhdGVBUEkoZWxlbWVudCwgYXBpTmFtZSkge1xuICAgIHN3aXRjaCAoYXBpTmFtZSkge1xuICAgICAgY2FzZSAnZWxlbWVudCc6XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgY2FzZSAnY29udHJvbGxlcic6XG4gICAgICAgIHJldHVybiBnZXRBVShlbGVtZW50KS5jb250cm9sbGVyO1xuICAgICAgY2FzZSAndmlldy1tb2RlbCc6XG4gICAgICAgIHJldHVybiBnZXRBVShlbGVtZW50KS5jb250cm9sbGVyLnZpZXdNb2RlbDtcbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICByZXR1cm4gZ2V0QVUoZWxlbWVudCkuY29udHJvbGxlci52aWV3O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIHRhcmdldCA9IGdldEFVKGVsZW1lbnQpW2FwaU5hbWVdO1xuXG4gICAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHJlZmVyZW5jZSBcIicgKyBhcGlOYW1lICsgJ1wiLCBidXQgaXQgd2FzIG5vdCBmb3VuZCBhbW9uZ3N0IHRoZSB0YXJnZXRcXCdzIEFQSS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQudmlld01vZGVsO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gTmFtZUV4cHJlc3Npb247XG59KCk7XG5cbnZhciBOYW1lQmluZGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBOYW1lQmluZGVyKHNvdXJjZUV4cHJlc3Npb24sIHRhcmdldCwgbG9va3VwRnVuY3Rpb25zKSB7XG4gICAgXG5cbiAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMubG9va3VwRnVuY3Rpb25zID0gbG9va3VwRnVuY3Rpb25zO1xuICB9XG5cbiAgTmFtZUJpbmRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQoc291cmNlKSB7XG4gICAgaWYgKHRoaXMuaXNCb3VuZCkge1xuICAgICAgaWYgKHRoaXMuc291cmNlID09PSBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy51bmJpbmQoKTtcbiAgICB9XG4gICAgdGhpcy5pc0JvdW5kID0gdHJ1ZTtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICBpZiAodGhpcy5zb3VyY2VFeHByZXNzaW9uLmJpbmQpIHtcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5iaW5kKHRoaXMsIHNvdXJjZSwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24uYXNzaWduKHRoaXMuc291cmNlLCB0aGlzLnRhcmdldCwgdGhpcy5sb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIE5hbWVCaW5kZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIHVuYmluZCgpIHtcbiAgICBpZiAoIXRoaXMuaXNCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzQm91bmQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuc291cmNlLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucykgPT09IHRoaXMudGFyZ2V0KSB7XG4gICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24uYXNzaWduKHRoaXMuc291cmNlLCBudWxsLCB0aGlzLmxvb2t1cEZ1bmN0aW9ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKSB7XG4gICAgICB0aGlzLnNvdXJjZUV4cHJlc3Npb24udW5iaW5kKHRoaXMsIHRoaXMuc291cmNlKTtcbiAgICB9XG4gICAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBOYW1lQmluZGVyO1xufSgpO1xuXG52YXIgTG9va3VwRnVuY3Rpb25zID0ge1xuICBiaW5kaW5nQmVoYXZpb3JzOiBmdW5jdGlvbiBiaW5kaW5nQmVoYXZpb3JzKG5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgdmFsdWVDb252ZXJ0ZXJzOiBmdW5jdGlvbiB2YWx1ZUNvbnZlcnRlcnMobmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIEJpbmRpbmdFbmdpbmUgPSAoX3RlbXAyID0gX2NsYXNzMTQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJpbmRpbmdFbmdpbmUob2JzZXJ2ZXJMb2NhdG9yLCBwYXJzZXIpIHtcbiAgICBcblxuICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yID0gb2JzZXJ2ZXJMb2NhdG9yO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICB9XG5cbiAgQmluZGluZ0VuZ2luZS5wcm90b3R5cGUuY3JlYXRlQmluZGluZ0V4cHJlc3Npb24gPSBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nRXhwcmVzc2lvbih0YXJnZXRQcm9wZXJ0eSwgc291cmNlRXhwcmVzc2lvbikge1xuICAgIHZhciBtb2RlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBiaW5kaW5nTW9kZS50b1ZpZXc7XG4gICAgdmFyIGxvb2t1cEZ1bmN0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogTG9va3VwRnVuY3Rpb25zO1xuXG4gICAgcmV0dXJuIG5ldyBCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm9ic2VydmVyTG9jYXRvciwgdGFyZ2V0UHJvcGVydHksIHRoaXMucGFyc2VyLnBhcnNlKHNvdXJjZUV4cHJlc3Npb24pLCBtb2RlLCBsb29rdXBGdW5jdGlvbnMpO1xuICB9O1xuXG4gIEJpbmRpbmdFbmdpbmUucHJvdG90eXBlLnByb3BlcnR5T2JzZXJ2ZXIgPSBmdW5jdGlvbiBwcm9wZXJ0eU9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIF90aGlzMjcgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBvYnNlcnZlciA9IF90aGlzMjcub2JzZXJ2ZXJMb2NhdG9yLmdldE9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgb2JzZXJ2ZXIuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLnVuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBCaW5kaW5nRW5naW5lLnByb3RvdHlwZS5jb2xsZWN0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiBjb2xsZWN0aW9uT2JzZXJ2ZXIoY29sbGVjdGlvbikge1xuICAgIHZhciBfdGhpczI4ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgICB2YXIgb2JzZXJ2ZXIgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICBvYnNlcnZlciA9IF90aGlzMjgub2JzZXJ2ZXJMb2NhdG9yLmdldEFycmF5T2JzZXJ2ZXIoY29sbGVjdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgIG9ic2VydmVyID0gX3RoaXMyOC5vYnNlcnZlckxvY2F0b3IuZ2V0TWFwT2JzZXJ2ZXIoY29sbGVjdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgIG9ic2VydmVyID0gX3RoaXMyOC5vYnNlcnZlckxvY2F0b3IuZ2V0U2V0T2JzZXJ2ZXIoY29sbGVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgQXJyYXksIE1hcCBvciBTZXQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgb2JzZXJ2ZXIuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLnVuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBCaW5kaW5nRW5naW5lLnByb3RvdHlwZS5leHByZXNzaW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiBleHByZXNzaW9uT2JzZXJ2ZXIoYmluZGluZ0NvbnRleHQsIGV4cHJlc3Npb24pIHtcbiAgICB2YXIgc2NvcGUgPSB7IGJpbmRpbmdDb250ZXh0OiBiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0OiBjcmVhdGVPdmVycmlkZUNvbnRleHQoYmluZGluZ0NvbnRleHQpIH07XG4gICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uT2JzZXJ2ZXIoc2NvcGUsIHRoaXMucGFyc2VyLnBhcnNlKGV4cHJlc3Npb24pLCB0aGlzLm9ic2VydmVyTG9jYXRvciwgTG9va3VwRnVuY3Rpb25zKTtcbiAgfTtcblxuICBCaW5kaW5nRW5naW5lLnByb3RvdHlwZS5wYXJzZUV4cHJlc3Npb24gPSBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5wYXJzZShleHByZXNzaW9uKTtcbiAgfTtcblxuICBCaW5kaW5nRW5naW5lLnByb3RvdHlwZS5yZWdpc3RlckFkYXB0ZXIgPSBmdW5jdGlvbiByZWdpc3RlckFkYXB0ZXIoYWRhcHRlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yLmFkZEFkYXB0ZXIoYWRhcHRlcik7XG4gIH07XG5cbiAgcmV0dXJuIEJpbmRpbmdFbmdpbmU7XG59KCksIF9jbGFzczE0LmluamVjdCA9IFtPYnNlcnZlckxvY2F0b3IsIFBhcnNlcl0sIF90ZW1wMik7XG5cbnZhciBzZXRQcm90byA9IFNldC5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIF9nZXRTZXRPYnNlcnZlcih0YXNrUXVldWUsIHNldCkge1xuICByZXR1cm4gTW9kaWZ5U2V0T2JzZXJ2ZXIuZm9yKHRhc2tRdWV1ZSwgc2V0KTtcbn1cblxudmFyIE1vZGlmeVNldE9ic2VydmVyID0gZnVuY3Rpb24gKF9Nb2RpZnlDb2xsZWN0aW9uT2JzZTMpIHtcbiAgX2luaGVyaXRzKE1vZGlmeVNldE9ic2VydmVyLCBfTW9kaWZ5Q29sbGVjdGlvbk9ic2UzKTtcblxuICBmdW5jdGlvbiBNb2RpZnlTZXRPYnNlcnZlcih0YXNrUXVldWUsIHNldCkge1xuICAgIFxuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9Nb2RpZnlDb2xsZWN0aW9uT2JzZTMuY2FsbCh0aGlzLCB0YXNrUXVldWUsIHNldCkpO1xuICB9XG5cbiAgTW9kaWZ5U2V0T2JzZXJ2ZXIuZm9yID0gZnVuY3Rpb24gX2Zvcih0YXNrUXVldWUsIHNldCkge1xuICAgIGlmICghKCdfX3NldF9vYnNlcnZlcl9fJyBpbiBzZXQpKSB7XG4gICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHNldCwgJ19fc2V0X29ic2VydmVyX18nLCB7XG4gICAgICAgIHZhbHVlOiBNb2RpZnlTZXRPYnNlcnZlci5jcmVhdGUodGFza1F1ZXVlLCBzZXQpLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZXQuX19zZXRfb2JzZXJ2ZXJfXztcbiAgfTtcblxuICBNb2RpZnlTZXRPYnNlcnZlci5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUodGFza1F1ZXVlLCBzZXQpIHtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTW9kaWZ5U2V0T2JzZXJ2ZXIodGFza1F1ZXVlLCBzZXQpO1xuXG4gICAgdmFyIHByb3RvID0gc2V0UHJvdG87XG4gICAgaWYgKHByb3RvLmFkZCAhPT0gc2V0LmFkZCB8fCBwcm90by5kZWxldGUgIT09IHNldC5kZWxldGUgfHwgcHJvdG8uY2xlYXIgIT09IHNldC5jbGVhcikge1xuICAgICAgcHJvdG8gPSB7XG4gICAgICAgIGFkZDogc2V0LmFkZCxcbiAgICAgICAgZGVsZXRlOiBzZXQuZGVsZXRlLFxuICAgICAgICBjbGVhcjogc2V0LmNsZWFyXG4gICAgICB9O1xuICAgIH1cblxuICAgIHNldC5hZGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdHlwZSA9ICdhZGQnO1xuICAgICAgdmFyIG9sZFNpemUgPSBzZXQuc2l6ZTtcbiAgICAgIHZhciBtZXRob2RDYWxsUmVzdWx0ID0gcHJvdG8uYWRkLmFwcGx5KHNldCwgYXJndW1lbnRzKTtcbiAgICAgIHZhciBoYXNWYWx1ZSA9IHNldC5zaXplID09PSBvbGRTaXplO1xuICAgICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgICBvYnNlcnZlci5hZGRDaGFuZ2VSZWNvcmQoe1xuICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgb2JqZWN0OiBzZXQsXG4gICAgICAgICAgdmFsdWU6IEFycmF5LmZyb20oc2V0KS5wb3AoKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXRob2RDYWxsUmVzdWx0O1xuICAgIH07XG5cbiAgICBzZXQuZGVsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGhhc1ZhbHVlID0gc2V0Lmhhcyhhcmd1bWVudHNbMF0pO1xuICAgICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSBwcm90by5kZWxldGUuYXBwbHkoc2V0LCBhcmd1bWVudHMpO1xuICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgIG9ic2VydmVyLmFkZENoYW5nZVJlY29yZCh7XG4gICAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgICAgb2JqZWN0OiBzZXQsXG4gICAgICAgICAgdmFsdWU6IGFyZ3VtZW50c1swXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXRob2RDYWxsUmVzdWx0O1xuICAgIH07XG5cbiAgICBzZXQuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHByb3RvLmNsZWFyLmFwcGx5KHNldCwgYXJndW1lbnRzKTtcbiAgICAgIG9ic2VydmVyLmFkZENoYW5nZVJlY29yZCh7XG4gICAgICAgIHR5cGU6ICdjbGVhcicsXG4gICAgICAgIG9iamVjdDogc2V0XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBtZXRob2RDYWxsUmVzdWx0O1xuICAgIH07XG5cbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG4gIH07XG5cbiAgcmV0dXJuIE1vZGlmeVNldE9ic2VydmVyO1xufShNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIpO1xuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2YWJsZSh0YXJnZXRPckNvbmZpZywga2V5LCBkZXNjcmlwdG9yKSB7XG4gIGZ1bmN0aW9uIGRlY28odGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IsIGNvbmZpZykge1xuICAgIHZhciBpc0NsYXNzRGVjb3JhdG9yID0ga2V5ID09PSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzQ2xhc3NEZWNvcmF0b3IpIHtcbiAgICAgIHRhcmdldCA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICBrZXkgPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IGNvbmZpZy5uYW1lO1xuICAgIH1cblxuICAgIHZhciBpbm5lclByb3BlcnR5TmFtZSA9ICdfJyArIGtleTtcbiAgICB2YXIgaW5uZXJQcm9wZXJ0eURlc2NyaXB0b3IgPSB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfTtcblxuICAgIHZhciBjYWxsYmFja05hbWUgPSBjb25maWcgJiYgY29uZmlnLmNoYW5nZUhhbmRsZXIgfHwga2V5ICsgJ0NoYW5nZWQnO1xuXG4gICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5pbml0aWFsaXplciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbm5lclByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSA9IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVzY3JpcHRvciA9IHt9O1xuICAgIH1cblxuICAgIGlmICghKCdlbnVtZXJhYmxlJyBpbiBkZXNjcmlwdG9yKSkge1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZWxldGUgZGVzY3JpcHRvci52YWx1ZTtcbiAgICBkZWxldGUgZGVzY3JpcHRvci53cml0YWJsZTtcbiAgICBkZWxldGUgZGVzY3JpcHRvci5pbml0aWFsaXplcjtcblxuICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBpbm5lclByb3BlcnR5TmFtZSwgaW5uZXJQcm9wZXJ0eURlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpc1tpbm5lclByb3BlcnR5TmFtZV07XG4gICAgfTtcbiAgICBkZXNjcmlwdG9yLnNldCA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpc1tpbm5lclByb3BlcnR5TmFtZV07XG4gICAgICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpc1tpbm5lclByb3BlcnR5TmFtZV0gPSBuZXdWYWx1ZTtcbiAgICAgIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaW5uZXJQcm9wZXJ0eU5hbWUsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgICAgIGlmICh0aGlzW2NhbGxiYWNrTmFtZV0pIHtcbiAgICAgICAgdGhpc1tjYWxsYmFja05hbWVdKG5ld1ZhbHVlLCBvbGRWYWx1ZSwga2V5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVzY3JpcHRvci5nZXQuZGVwZW5kZW5jaWVzID0gW2lubmVyUHJvcGVydHlOYW1lXTtcblxuICAgIGlmIChpc0NsYXNzRGVjb3JhdG9yKSB7XG4gICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuICB9XG5cbiAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0LCBrLCBkKSB7XG4gICAgICByZXR1cm4gZGVjbyh0LCBrLCBkLCB0YXJnZXRPckNvbmZpZyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZGVjbyh0YXJnZXRPckNvbmZpZywga2V5LCBkZXNjcmlwdG9yKTtcbn1cblxudmFyIHNpZ25hbHMgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RCaW5kaW5nVG9TaWduYWwoYmluZGluZywgbmFtZSkge1xuICBpZiAoIXNpZ25hbHMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICBzaWduYWxzW25hbWVdID0gMDtcbiAgfVxuICBiaW5kaW5nLm9ic2VydmVQcm9wZXJ0eShzaWduYWxzLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hbEJpbmRpbmdzKG5hbWUpIHtcbiAgaWYgKHNpZ25hbHMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICBzaWduYWxzW25hbWVdKys7XG4gIH1cbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aurelia-binding/dist/native-modules/aurelia-binding.js\n"); /***/ }), /***/ "./node_modules/aurelia-bootstrapper/dist/native-modules/aurelia-bootstrapper.js": /*!***************************************************************************************!*\ !*** ./node_modules/aurelia-bootstrapper/dist/native-modules/aurelia-bootstrapper.js ***! \***************************************************************************************/ /*! exports provided: bootstrap, starting */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(Promise, process) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bootstrap\", function() { return bootstrap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"starting\", function() { return starting; });\n/* harmony import */ var aurelia_polyfills__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-polyfills */ \"./node_modules/aurelia-polyfills/dist/native-modules/aurelia-polyfills.js\");\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\n\nvar bootstrapPromises = [];\nvar startResolve = void 0;\n\nvar startPromise = new Promise(function (resolve) {\n return startResolve = resolve;\n});\nvar host = aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"PLATFORM\"].global;\nvar isNodeLike = typeof process !== 'undefined' && !process.browser;\n\nfunction ready() {\n if (!host.document || host.document.readyState === 'complete') {\n return Promise.resolve();\n }\n\n return new Promise(function (resolve) {\n host.document.addEventListener('DOMContentLoaded', completed);\n host.addEventListener('load', completed);\n\n function completed() {\n host.document.removeEventListener('DOMContentLoaded', completed);\n host.removeEventListener('load', completed);\n resolve();\n }\n });\n}\n\nfunction createLoader() {\n if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"PLATFORM\"].Loader) {\n return Promise.resolve(new aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"PLATFORM\"].Loader());\n }\n\n if (false) { var _m, m; }\n\n return Promise.reject('No PLATFORM.Loader is defined and there is neither a System API (ES6) or a Require API (AMD) globally available to load your app.');\n}\n\nfunction initializePal(loader) {\n if (aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"isInitialized\"]) return Promise.resolve();\n\n var type = void 0;\n\n var isRenderer = isNodeLike && (process.type === 'renderer' || process.versions['node-webkit']);\n\n if (isNodeLike && !isRenderer) {\n type = 'nodejs';\n } else if (typeof window !== 'undefined') {\n type = 'browser';\n } else if (typeof self !== 'undefined') {\n type = 'worker';\n } else {\n throw new Error('Could not determine platform implementation to load.');\n }\n\n return loader.loadModule('aurelia-pal-' + type).then(function (palModule) {\n return type === 'nodejs' && !aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"isInitialized\"] && palModule.globalize() || palModule.initialize();\n });\n}\n\nfunction preparePlatform(loader) {\n var map = function map(moduleId, relativeTo) {\n return loader.normalize(moduleId, relativeTo).then(function (normalized) {\n loader.map(moduleId, normalized);\n return normalized;\n });\n };\n\n return initializePal(loader).then(function () {\n return loader.normalize('aurelia-bootstrapper');\n }).then(function (bootstrapperName) {\n var frameworkPromise = map('aurelia-framework', bootstrapperName);\n\n return Promise.all([frameworkPromise, frameworkPromise.then(function (frameworkName) {\n return map('aurelia-dependency-injection', frameworkName);\n }), map('aurelia-router', bootstrapperName), map('aurelia-logging-console', bootstrapperName)]);\n }).then(function (_ref) {\n var frameworkName = _ref[0];\n return loader.loadModule(frameworkName);\n }).then(function (fx) {\n return startResolve(function () {\n return new fx.Aurelia(loader);\n });\n });\n}\n\nfunction config(appHost, configModuleId, aurelia) {\n aurelia.host = appHost;\n aurelia.configModuleId = configModuleId || null;\n\n if (configModuleId) {\n return aurelia.loader.loadModule(configModuleId).then(function (customConfig) {\n if (!customConfig.configure) {\n throw new Error('Cannot initialize module \\'' + configModuleId + '\\' without a configure function.');\n }\n\n return customConfig.configure(aurelia);\n });\n }\n\n aurelia.use.standardConfiguration().developmentLogging();\n\n return aurelia.start().then(function () {\n return aurelia.setRoot();\n });\n}\n\nfunction run() {\n return ready().then(createLoader).then(preparePlatform).then(function () {\n var appHosts = host.document.querySelectorAll('[aurelia-app],[data-aurelia-app]');\n for (var i = 0, ii = appHosts.length; i < ii; ++i) {\n var appHost = appHosts[i];\n var moduleId = appHost.getAttribute('aurelia-app') || appHost.getAttribute('data-aurelia-app');\n bootstrap(config.bind(null, appHost, moduleId));\n }\n\n var toConsole = console.error.bind(console);\n var bootstraps = bootstrapPromises.map(function (p) {\n return p.catch(toConsole);\n });\n bootstrapPromises = null;\n return Promise.all(bootstraps);\n });\n}\n\nfunction bootstrap(configure) {\n var p = startPromise.then(function (factory) {\n return configure(factory());\n });\n if (bootstrapPromises) bootstrapPromises.push(p);\n return p;\n}\n\nvar starting = run();\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! bluebird */ \"./node_modules/bluebird/js/browser/bluebird.js-exposed\"), __webpack_require__(/*! ./../../../process/browser.js */ \"./node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1ib290c3RyYXBwZXIvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWJvb3RzdHJhcHBlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hdXJlbGlhLWJvb3RzdHJhcHBlci9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtYm9vdHN0cmFwcGVyLmpzPzZmZDkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5pbXBvcnQgJ2F1cmVsaWEtcG9seWZpbGxzJztcbmltcG9ydCB7IFBMQVRGT1JNLCBpc0luaXRpYWxpemVkIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG52YXIgYm9vdHN0cmFwUHJvbWlzZXMgPSBbXTtcbnZhciBzdGFydFJlc29sdmUgPSB2b2lkIDA7XG5cbnZhciBzdGFydFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICByZXR1cm4gc3RhcnRSZXNvbHZlID0gcmVzb2x2ZTtcbn0pO1xudmFyIGhvc3QgPSBQTEFURk9STS5nbG9iYWw7XG52YXIgaXNOb2RlTGlrZSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAhcHJvY2Vzcy5icm93c2VyO1xuXG5mdW5jdGlvbiByZWFkeSgpIHtcbiAgaWYgKCFob3N0LmRvY3VtZW50IHx8IGhvc3QuZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIGhvc3QuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNvbXBsZXRlZCk7XG4gICAgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29tcGxldGVkKTtcblxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcbiAgICAgIGhvc3QuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNvbXBsZXRlZCk7XG4gICAgICBob3N0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb21wbGV0ZWQpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvYWRlcigpIHtcbiAgaWYgKFBMQVRGT1JNLkxvYWRlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IFBMQVRGT1JNLkxvYWRlcigpKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgQVVSRUxJQV9XRUJQQUNLXzJfMCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIF9fd2VicGFja19yZXF1aXJlX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbSA9IF9fd2VicGFja19yZXF1aXJlX18ocmVxdWlyZS5yZXNvbHZlKCdhdXJlbGlhLWxvYWRlci13ZWJwYWNrJykpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgbS5XZWJwYWNrTG9hZGVyKCkpO1xuICAgIH1cblxuICAgIGlmIChob3N0LlN5c3RlbSAmJiB0eXBlb2YgaG9zdC5TeXN0ZW0uY29uZmlnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaG9zdC5TeXN0ZW0ubm9ybWFsaXplKCdhdXJlbGlhLWJvb3RzdHJhcHBlcicpLnRoZW4oZnVuY3Rpb24gKGJzbikge1xuICAgICAgICByZXR1cm4gaG9zdC5TeXN0ZW0ubm9ybWFsaXplKCdhdXJlbGlhLWxvYWRlci1kZWZhdWx0JywgYnNuKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGxvYWRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGhvc3QuU3lzdGVtLmltcG9ydChsb2FkZXJOYW1lKS50aGVuKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBtLkRlZmF1bHRMb2FkZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhvc3QucmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaG9zdC5kZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgX3R5cGVvZihob3N0LmRlZmluZS5hbWQpID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcmV0dXJuIGhvc3QucmVxdWlyZShbJ2F1cmVsaWEtbG9hZGVyLWRlZmF1bHQnXSwgZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShuZXcgbS5EZWZhdWx0TG9hZGVyKCkpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzTm9kZUxpa2UgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG1vZHVsZS5yZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIF9tID0gbW9kdWxlLnJlcXVpcmUoJ2F1cmVsaWEtbG9hZGVyLW5vZGVqcycpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgX20uTm9kZUpzTG9hZGVyKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gUExBVEZPUk0uTG9hZGVyIGlzIGRlZmluZWQgYW5kIHRoZXJlIGlzIG5laXRoZXIgYSBTeXN0ZW0gQVBJIChFUzYpIG9yIGEgUmVxdWlyZSBBUEkgKEFNRCkgZ2xvYmFsbHkgYXZhaWxhYmxlIHRvIGxvYWQgeW91ciBhcHAuJyk7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVQYWwobG9hZGVyKSB7XG4gIGlmIChpc0luaXRpYWxpemVkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgdmFyIHR5cGUgPSB2b2lkIDA7XG5cbiAgdmFyIGlzUmVuZGVyZXIgPSBpc05vZGVMaWtlICYmIChwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy52ZXJzaW9uc1snbm9kZS13ZWJraXQnXSk7XG5cbiAgaWYgKGlzTm9kZUxpa2UgJiYgIWlzUmVuZGVyZXIpIHtcbiAgICB0eXBlID0gJ25vZGVqcyc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0eXBlID0gJ2Jyb3dzZXInO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgIHR5cGUgPSAnd29ya2VyJztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gdG8gbG9hZC4nKTtcbiAgfVxuXG4gIHJldHVybiBsb2FkZXIubG9hZE1vZHVsZSgnYXVyZWxpYS1wYWwtJyArIHR5cGUpLnRoZW4oZnVuY3Rpb24gKHBhbE1vZHVsZSkge1xuICAgIHJldHVybiB0eXBlID09PSAnbm9kZWpzJyAmJiAhaXNJbml0aWFsaXplZCAmJiBwYWxNb2R1bGUuZ2xvYmFsaXplKCkgfHwgcGFsTW9kdWxlLmluaXRpYWxpemUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVQbGF0Zm9ybShsb2FkZXIpIHtcbiAgdmFyIG1hcCA9IGZ1bmN0aW9uIG1hcChtb2R1bGVJZCwgcmVsYXRpdmVUbykge1xuICAgIHJldHVybiBsb2FkZXIubm9ybWFsaXplKG1vZHVsZUlkLCByZWxhdGl2ZVRvKS50aGVuKGZ1bmN0aW9uIChub3JtYWxpemVkKSB7XG4gICAgICBsb2FkZXIubWFwKG1vZHVsZUlkLCBub3JtYWxpemVkKTtcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBpbml0aWFsaXplUGFsKGxvYWRlcikudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvYWRlci5ub3JtYWxpemUoJ2F1cmVsaWEtYm9vdHN0cmFwcGVyJyk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGJvb3RzdHJhcHBlck5hbWUpIHtcbiAgICB2YXIgZnJhbWV3b3JrUHJvbWlzZSA9IG1hcChQTEFURk9STS5tb2R1bGVOYW1lKCdhdXJlbGlhLWZyYW1ld29yaycsIHsgZXhwb3J0czogWydBdXJlbGlhJ10gfSksIGJvb3RzdHJhcHBlck5hbWUpO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtmcmFtZXdvcmtQcm9taXNlLCBmcmFtZXdvcmtQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGZyYW1ld29ya05hbWUpIHtcbiAgICAgIHJldHVybiBtYXAoJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nLCBmcmFtZXdvcmtOYW1lKTtcbiAgICB9KSwgbWFwKCdhdXJlbGlhLXJvdXRlcicsIGJvb3RzdHJhcHBlck5hbWUpLCBtYXAoJ2F1cmVsaWEtbG9nZ2luZy1jb25zb2xlJywgYm9vdHN0cmFwcGVyTmFtZSldKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBmcmFtZXdvcmtOYW1lID0gX3JlZlswXTtcbiAgICByZXR1cm4gbG9hZGVyLmxvYWRNb2R1bGUoZnJhbWV3b3JrTmFtZSk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGZ4KSB7XG4gICAgcmV0dXJuIHN0YXJ0UmVzb2x2ZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IGZ4LkF1cmVsaWEobG9hZGVyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZyhhcHBIb3N0LCBjb25maWdNb2R1bGVJZCwgYXVyZWxpYSkge1xuICBhdXJlbGlhLmhvc3QgPSBhcHBIb3N0O1xuICBhdXJlbGlhLmNvbmZpZ01vZHVsZUlkID0gY29uZmlnTW9kdWxlSWQgfHwgbnVsbDtcblxuICBpZiAoY29uZmlnTW9kdWxlSWQpIHtcbiAgICByZXR1cm4gYXVyZWxpYS5sb2FkZXIubG9hZE1vZHVsZShjb25maWdNb2R1bGVJZCkudGhlbihmdW5jdGlvbiAoY3VzdG9tQ29uZmlnKSB7XG4gICAgICBpZiAoIWN1c3RvbUNvbmZpZy5jb25maWd1cmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5pdGlhbGl6ZSBtb2R1bGUgXFwnJyArIGNvbmZpZ01vZHVsZUlkICsgJ1xcJyB3aXRob3V0IGEgY29uZmlndXJlIGZ1bmN0aW9uLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VzdG9tQ29uZmlnLmNvbmZpZ3VyZShhdXJlbGlhKTtcbiAgICB9KTtcbiAgfVxuXG4gIGF1cmVsaWEudXNlLnN0YW5kYXJkQ29uZmlndXJhdGlvbigpLmRldmVsb3BtZW50TG9nZ2luZygpO1xuXG4gIHJldHVybiBhdXJlbGlhLnN0YXJ0KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGF1cmVsaWEuc2V0Um9vdCgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuKCkge1xuICByZXR1cm4gcmVhZHkoKS50aGVuKGNyZWF0ZUxvYWRlcikudGhlbihwcmVwYXJlUGxhdGZvcm0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcHBIb3N0cyA9IGhvc3QuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2F1cmVsaWEtYXBwXSxbZGF0YS1hdXJlbGlhLWFwcF0nKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcHBIb3N0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgYXBwSG9zdCA9IGFwcEhvc3RzW2ldO1xuICAgICAgdmFyIG1vZHVsZUlkID0gYXBwSG9zdC5nZXRBdHRyaWJ1dGUoJ2F1cmVsaWEtYXBwJykgfHwgYXBwSG9zdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYXVyZWxpYS1hcHAnKTtcbiAgICAgIGJvb3RzdHJhcChjb25maWcuYmluZChudWxsLCBhcHBIb3N0LCBtb2R1bGVJZCkpO1xuICAgIH1cblxuICAgIHZhciB0b0NvbnNvbGUgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG4gICAgdmFyIGJvb3RzdHJhcHMgPSBib290c3RyYXBQcm9taXNlcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBwLmNhdGNoKHRvQ29uc29sZSk7XG4gICAgfSk7XG4gICAgYm9vdHN0cmFwUHJvbWlzZXMgPSBudWxsO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChib290c3RyYXBzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXAoY29uZmlndXJlKSB7XG4gIHZhciBwID0gc3RhcnRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gY29uZmlndXJlKGZhY3RvcnkoKSk7XG4gIH0pO1xuICBpZiAoYm9vdHN0cmFwUHJvbWlzZXMpIGJvb3RzdHJhcFByb21pc2VzLnB1c2gocCk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIHN0YXJ0aW5nID0gcnVuKCk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aurelia-bootstrapper/dist/native-modules/aurelia-bootstrapper.js\n"); /***/ }), /***/ "./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js": /*!*******************************************************************************************************!*\ !*** ./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js ***! \*******************************************************************************************************/ /*! exports provided: _emptyParameters, InvocationHandler, Container, autoinject, inject, invoker, invokeAsFactory, FactoryInvoker, registration, transient, singleton, TransientRegistration, SingletonRegistration, resolver, Strategy, StrategyResolver, Lazy, All, Optional, Parent, Factory, NewInstance, getDecoratorDependencies, lazy, all, optional, parent, factory, newInstance */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_emptyParameters\", function() { return _emptyParameters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"InvocationHandler\", function() { return InvocationHandler; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Container\", function() { return Container; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"autoinject\", function() { return autoinject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"inject\", function() { return inject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"invoker\", function() { return invoker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"invokeAsFactory\", function() { return invokeAsFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FactoryInvoker\", function() { return FactoryInvoker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registration\", function() { return registration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"transient\", function() { return transient; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"singleton\", function() { return singleton; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TransientRegistration\", function() { return TransientRegistration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SingletonRegistration\", function() { return SingletonRegistration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"resolver\", function() { return resolver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Strategy\", function() { return Strategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StrategyResolver\", function() { return StrategyResolver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Lazy\", function() { return Lazy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"All\", function() { return All; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Optional\", function() { return Optional; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Parent\", function() { return Parent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Factory\", function() { return Factory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NewInstance\", function() { return NewInstance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getDecoratorDependencies\", function() { return getDecoratorDependencies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lazy\", function() { return lazy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"all\", function() { return all; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"optional\", function() { return optional; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parent\", function() { return parent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"factory\", function() { return factory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"newInstance\", function() { return newInstance; });\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-metadata */ \"./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js\");\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\n\nfunction isInjectable(potentialTarget) {\r\n return !!potentialTarget;\r\n}\r\nfunction autoinject(potentialTarget) {\r\n var deco = function (target) {\r\n if (!target.hasOwnProperty('inject')) {\r\n target.inject = (aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].paramTypes, target) ||\r\n _emptyParameters).slice();\r\n if (target.inject && target.inject.length > 0) {\r\n if (target.inject[target.inject.length - 1] === Object) {\r\n target.inject.splice(-1, 1);\r\n }\r\n }\r\n }\r\n };\r\n if (isInjectable(potentialTarget)) {\r\n return deco(potentialTarget);\r\n }\r\n return deco;\r\n}\r\nfunction inject() {\r\n var rest = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n rest[_i] = arguments[_i];\r\n }\r\n return function (target, _key, descriptor) {\r\n if (typeof descriptor === 'number') {\r\n autoinject(target);\r\n if (rest.length === 1) {\r\n target.inject[descriptor] = rest[0];\r\n }\r\n return;\r\n }\r\n if (descriptor) {\r\n var fn = descriptor.value;\r\n fn.inject = rest;\r\n }\r\n else {\r\n target.inject = rest;\r\n }\r\n };\r\n}\n\nvar resolver = aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"protocol\"].create('aurelia:resolver', function (target) {\r\n if (!(typeof target.get === 'function')) {\r\n return 'Resolvers must implement: get(container: Container, key: any): any';\r\n }\r\n return true;\r\n});\r\nvar Strategy;\r\n(function (Strategy) {\r\n Strategy[Strategy[\"instance\"] = 0] = \"instance\";\r\n Strategy[Strategy[\"singleton\"] = 1] = \"singleton\";\r\n Strategy[Strategy[\"transient\"] = 2] = \"transient\";\r\n Strategy[Strategy[\"function\"] = 3] = \"function\";\r\n Strategy[Strategy[\"array\"] = 4] = \"array\";\r\n Strategy[Strategy[\"alias\"] = 5] = \"alias\";\r\n})(Strategy || (Strategy = {}));\r\nfunction isStrategy(actual, expected, state) {\r\n return actual === expected;\r\n}\r\nvar StrategyResolver = (function () {\r\n function StrategyResolver(strategy, state) {\r\n this.strategy = strategy;\r\n this.state = state;\r\n }\r\n StrategyResolver.prototype.get = function (container, key) {\r\n if (isStrategy(this.strategy, Strategy.instance, this.state)) {\r\n return this.state;\r\n }\r\n if (isStrategy(this.strategy, Strategy.singleton, this.state)) {\r\n var singleton = container.invoke(this.state);\r\n this.state = singleton;\r\n this.strategy = 0;\r\n return singleton;\r\n }\r\n if (isStrategy(this.strategy, Strategy.transient, this.state)) {\r\n return container.invoke(this.state);\r\n }\r\n if (isStrategy(this.strategy, Strategy.function, this.state)) {\r\n return this.state(container, key, this);\r\n }\r\n if (isStrategy(this.strategy, Strategy.array, this.state)) {\r\n return this.state[0].get(container, key);\r\n }\r\n if (isStrategy(this.strategy, Strategy.alias, this.state)) {\r\n return container.get(this.state);\r\n }\r\n throw new Error('Invalid strategy: ' + this.strategy);\r\n };\r\n StrategyResolver = __decorate([\r\n resolver(),\r\n __metadata(\"design:paramtypes\", [Number, Object])\r\n ], StrategyResolver);\r\n return StrategyResolver;\r\n}());\r\nvar Lazy = (function () {\r\n function Lazy(key) {\r\n this._key = key;\r\n }\r\n Lazy_1 = Lazy;\r\n Lazy.prototype.get = function (container) {\r\n var _this = this;\r\n return function () { return container.get(_this._key); };\r\n };\r\n Lazy.of = function (key) {\r\n return new Lazy_1(key);\r\n };\r\n var Lazy_1;\r\n Lazy = Lazy_1 = __decorate([\r\n resolver(),\r\n __metadata(\"design:paramtypes\", [Object])\r\n ], Lazy);\r\n return Lazy;\r\n}());\r\nvar All = (function () {\r\n function All(key) {\r\n this._key = key;\r\n }\r\n All_1 = All;\r\n All.prototype.get = function (container) {\r\n return container.getAll(this._key);\r\n };\r\n All.of = function (key) {\r\n return new All_1(key);\r\n };\r\n var All_1;\r\n All = All_1 = __decorate([\r\n resolver(),\r\n __metadata(\"design:paramtypes\", [Object])\r\n ], All);\r\n return All;\r\n}());\r\nvar Optional = (function () {\r\n function Optional(key, checkParent) {\r\n if (checkParent === void 0) { checkParent = true; }\r\n this._key = key;\r\n this._checkParent = checkParent;\r\n }\r\n Optional_1 = Optional;\r\n Optional.prototype.get = function (container) {\r\n if (container.hasResolver(this._key, this._checkParent)) {\r\n return container.get(this._key);\r\n }\r\n return null;\r\n };\r\n Optional.of = function (key, checkParent) {\r\n if (checkParent === void 0) { checkParent = true; }\r\n return new Optional_1(key, checkParent);\r\n };\r\n var Optional_1;\r\n Optional = Optional_1 = __decorate([\r\n resolver(),\r\n __metadata(\"design:paramtypes\", [Object, Boolean])\r\n ], Optional);\r\n return Optional;\r\n}());\r\nvar Parent = (function () {\r\n function Parent(key) {\r\n this._key = key;\r\n }\r\n Parent_1 = Parent;\r\n Parent.prototype.get = function (container) {\r\n return container.parent ? container.parent.get(this._key) : null;\r\n };\r\n Parent.of = function (key) {\r\n return new Parent_1(key);\r\n };\r\n var Parent_1;\r\n Parent = Parent_1 = __decorate([\r\n resolver(),\r\n __metadata(\"design:paramtypes\", [Object])\r\n ], Parent);\r\n return Parent;\r\n}());\r\nvar Factory = (function () {\r\n function Factory(key) {\r\n this._key = key;\r\n }\r\n Factory_1 = Factory;\r\n Factory.prototype.get = function (container) {\r\n var fn = this._key;\r\n var resolver = container.getResolver(fn);\r\n if (resolver && resolver.strategy === Strategy.function) {\r\n fn = resolver.state;\r\n }\r\n return function () {\r\n var rest = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n rest[_i] = arguments[_i];\r\n }\r\n return container.invoke(fn, rest);\r\n };\r\n };\r\n Factory.of = function (key) {\r\n return new Factory_1(key);\r\n };\r\n var Factory_1;\r\n Factory = Factory_1 = __decorate([\r\n resolver(),\r\n __metadata(\"design:paramtypes\", [Object])\r\n ], Factory);\r\n return Factory;\r\n}());\r\nvar NewInstance = (function () {\r\n function NewInstance(key) {\r\n var dynamicDependencies = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n dynamicDependencies[_i - 1] = arguments[_i];\r\n }\r\n this.key = key;\r\n this.asKey = key;\r\n this.dynamicDependencies = dynamicDependencies;\r\n }\r\n NewInstance_1 = NewInstance;\r\n NewInstance.prototype.get = function (container) {\r\n var dynamicDependencies = this.dynamicDependencies.length > 0\r\n ? this.dynamicDependencies.map(function (dependency) {\r\n return dependency['protocol:aurelia:resolver']\r\n ? dependency.get(container)\r\n : container.get(dependency);\r\n })\r\n : undefined;\r\n var fn = this.key;\r\n var resolver = container.getResolver(fn);\r\n if (resolver && resolver.strategy === 3) {\r\n fn = resolver.state;\r\n }\r\n var instance = container.invoke(fn, dynamicDependencies);\r\n container.registerInstance(this.asKey, instance);\r\n return instance;\r\n };\r\n NewInstance.prototype.as = function (key) {\r\n this.asKey = key;\r\n return this;\r\n };\r\n NewInstance.of = function (key) {\r\n var dynamicDependencies = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n dynamicDependencies[_i - 1] = arguments[_i];\r\n }\r\n return new (NewInstance_1.bind.apply(NewInstance_1, [void 0, key].concat(dynamicDependencies)))();\r\n };\r\n var NewInstance_1;\r\n NewInstance = NewInstance_1 = __decorate([\r\n resolver(),\r\n __metadata(\"design:paramtypes\", [Object, Object])\r\n ], NewInstance);\r\n return NewInstance;\r\n}());\r\nfunction getDecoratorDependencies(target) {\r\n autoinject(target);\r\n return target.inject;\r\n}\r\nfunction lazy(keyValue) {\r\n return function (target, _key, index) {\r\n var inject$$1 = getDecoratorDependencies(target);\r\n inject$$1[index] = Lazy.of(keyValue);\r\n };\r\n}\r\nfunction all(keyValue) {\r\n return function (target, _key, index) {\r\n var inject$$1 = getDecoratorDependencies(target);\r\n inject$$1[index] = All.of(keyValue);\r\n };\r\n}\r\nfunction optional(checkParentOrTarget) {\r\n if (checkParentOrTarget === void 0) { checkParentOrTarget = true; }\r\n var deco = function (checkParent) {\r\n return function (target, _key, index) {\r\n var inject$$1 = getDecoratorDependencies(target);\r\n inject$$1[index] = Optional.of(inject$$1[index], checkParent);\r\n };\r\n };\r\n if (typeof checkParentOrTarget === 'boolean') {\r\n return deco(checkParentOrTarget);\r\n }\r\n return deco(true);\r\n}\r\nfunction parent(target, _key, index) {\r\n var inject$$1 = getDecoratorDependencies(target);\r\n inject$$1[index] = Parent.of(inject$$1[index]);\r\n}\r\nfunction factory(keyValue) {\r\n return function (target, _key, index) {\r\n var inject$$1 = getDecoratorDependencies(target);\r\n inject$$1[index] = Factory.of(keyValue);\r\n };\r\n}\r\nfunction newInstance(asKeyOrTarget) {\r\n var dynamicDependencies = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n dynamicDependencies[_i - 1] = arguments[_i];\r\n }\r\n var deco = function (asKey) {\r\n return function (target, _key, index) {\r\n var inject$$1 = getDecoratorDependencies(target);\r\n inject$$1[index] = NewInstance.of.apply(NewInstance, [inject$$1[index]].concat(dynamicDependencies));\r\n if (!!asKey) {\r\n inject$$1[index].as(asKey);\r\n }\r\n };\r\n };\r\n if (arguments.length >= 1) {\r\n return deco(asKeyOrTarget);\r\n }\r\n return deco();\r\n}\n\nfunction validateKey(key) {\r\n if (key === null || key === undefined) {\r\n throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\\'t exist with DI?');\r\n }\r\n}\r\nvar _emptyParameters = Object.freeze([]);\r\naurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].registration = 'aurelia:registration';\r\naurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].invoker = 'aurelia:invoker';\r\nvar resolverDecorates = resolver.decorates;\r\nvar InvocationHandler = (function () {\r\n function InvocationHandler(fn, invoker, dependencies) {\r\n this.fn = fn;\r\n this.invoker = invoker;\r\n this.dependencies = dependencies;\r\n }\r\n InvocationHandler.prototype.invoke = function (container, dynamicDependencies) {\r\n return dynamicDependencies !== undefined\r\n ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies)\r\n : this.invoker.invoke(container, this.fn, this.dependencies);\r\n };\r\n return InvocationHandler;\r\n}());\r\nfunction invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) {\r\n var i = staticDependencies.length;\r\n var args = new Array(i);\r\n var lookup;\r\n while (i--) {\r\n lookup = staticDependencies[i];\r\n if (lookup === null || lookup === undefined) {\r\n throw new Error('Constructor Parameter with index ' +\r\n i +\r\n ' cannot be null or undefined. Are you trying to inject/register something that doesn\\'t exist with DI?');\r\n }\r\n else {\r\n args[i] = container.get(lookup);\r\n }\r\n }\r\n if (dynamicDependencies !== undefined) {\r\n args = args.concat(dynamicDependencies);\r\n }\r\n return Reflect.construct(fn, args);\r\n}\r\nvar classInvoker = {\r\n invoke: function (container, Type, deps) {\r\n var instances = deps.map(function (dep) { return container.get(dep); });\r\n return Reflect.construct(Type, instances);\r\n },\r\n invokeWithDynamicDependencies: invokeWithDynamicDependencies\r\n};\r\nfunction getDependencies(f) {\r\n if (!f.hasOwnProperty('inject')) {\r\n return [];\r\n }\r\n if (typeof f.inject === 'function') {\r\n return f.inject();\r\n }\r\n return f.inject;\r\n}\r\nvar Container = (function () {\r\n function Container(configuration) {\r\n if (configuration === undefined) {\r\n configuration = {};\r\n }\r\n this._configuration = configuration;\r\n this._onHandlerCreated = configuration.onHandlerCreated;\r\n this._handlers =\r\n configuration.handlers || (configuration.handlers = new Map());\r\n this._resolvers = new Map();\r\n this.root = this;\r\n this.parent = null;\r\n }\r\n Container.prototype.makeGlobal = function () {\r\n Container.instance = this;\r\n return this;\r\n };\r\n Container.prototype.setHandlerCreatedCallback = function (onHandlerCreated) {\r\n this._onHandlerCreated = onHandlerCreated;\r\n this._configuration.onHandlerCreated = onHandlerCreated;\r\n };\r\n Container.prototype.registerInstance = function (key, instance) {\r\n return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance));\r\n };\r\n Container.prototype.registerSingleton = function (key, fn) {\r\n return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn));\r\n };\r\n Container.prototype.registerTransient = function (key, fn) {\r\n return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn));\r\n };\r\n Container.prototype.registerHandler = function (key, handler) {\r\n return this.registerResolver(key, new StrategyResolver(3, handler));\r\n };\r\n Container.prototype.registerAlias = function (originalKey, aliasKey) {\r\n return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey));\r\n };\r\n Container.prototype.registerResolver = function (key, resolver$$1) {\r\n validateKey(key);\r\n var allResolvers = this._resolvers;\r\n var result = allResolvers.get(key);\r\n if (result === undefined) {\r\n allResolvers.set(key, resolver$$1);\r\n }\r\n else if (result.strategy === 4) {\r\n result.state.push(resolver$$1);\r\n }\r\n else {\r\n allResolvers.set(key, new StrategyResolver(4, [result, resolver$$1]));\r\n }\r\n return resolver$$1;\r\n };\r\n Container.prototype.autoRegister = function (key, fn) {\r\n fn = fn === undefined ? key : fn;\r\n if (typeof fn === 'function') {\r\n var registration = aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].registration, fn);\r\n if (registration === undefined) {\r\n return this.registerResolver(key, new StrategyResolver(1, fn));\r\n }\r\n return registration.registerResolver(this, key, fn);\r\n }\r\n return this.registerResolver(key, new StrategyResolver(0, fn));\r\n };\r\n Container.prototype.autoRegisterAll = function (fns) {\r\n var i = fns.length;\r\n while (i--) {\r\n this.autoRegister(fns[i]);\r\n }\r\n };\r\n Container.prototype.unregister = function (key) {\r\n this._resolvers.delete(key);\r\n };\r\n Container.prototype.hasResolver = function (key, checkParent) {\r\n if (checkParent === void 0) { checkParent = false; }\r\n validateKey(key);\r\n return (this._resolvers.has(key) ||\r\n (checkParent &&\r\n this.parent !== null &&\r\n this.parent.hasResolver(key, checkParent)));\r\n };\r\n Container.prototype.getResolver = function (key) {\r\n return this._resolvers.get(key);\r\n };\r\n Container.prototype.get = function (key) {\r\n validateKey(key);\r\n if (key === Container) {\r\n return this;\r\n }\r\n if (resolverDecorates(key)) {\r\n return key.get(this, key);\r\n }\r\n var resolver$$1 = this._resolvers.get(key);\r\n if (resolver$$1 === undefined) {\r\n if (this.parent === null) {\r\n return this.autoRegister(key).get(this, key);\r\n }\r\n var registration = aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].registration, key);\r\n if (registration === undefined) {\r\n return this.parent._get(key);\r\n }\r\n return registration.registerResolver(this, key, key).get(this, key);\r\n }\r\n return resolver$$1.get(this, key);\r\n };\r\n Container.prototype._get = function (key) {\r\n var resolver$$1 = this._resolvers.get(key);\r\n if (resolver$$1 === undefined) {\r\n if (this.parent === null) {\r\n return this.autoRegister(key).get(this, key);\r\n }\r\n return this.parent._get(key);\r\n }\r\n return resolver$$1.get(this, key);\r\n };\r\n Container.prototype.getAll = function (key) {\r\n validateKey(key);\r\n var resolver$$1 = this._resolvers.get(key);\r\n if (resolver$$1 === undefined) {\r\n if (this.parent === null) {\r\n return _emptyParameters;\r\n }\r\n return this.parent.getAll(key);\r\n }\r\n if (resolver$$1.strategy === 4) {\r\n var state = resolver$$1.state;\r\n var i = state.length;\r\n var results = new Array(i);\r\n while (i--) {\r\n results[i] = state[i].get(this, key);\r\n }\r\n return results;\r\n }\r\n return [resolver$$1.get(this, key)];\r\n };\r\n Container.prototype.createChild = function () {\r\n var child = new Container(this._configuration);\r\n child.root = this.root;\r\n child.parent = this;\r\n return child;\r\n };\r\n Container.prototype.invoke = function (fn, dynamicDependencies) {\r\n try {\r\n var handler = this._handlers.get(fn);\r\n if (handler === undefined) {\r\n handler = this._createInvocationHandler(fn);\r\n this._handlers.set(fn, handler);\r\n }\r\n return handler.invoke(this, dynamicDependencies);\r\n }\r\n catch (e) {\r\n throw new aurelia_pal__WEBPACK_IMPORTED_MODULE_1__[\"AggregateError\"](\"Error invoking \" + fn.name + \". Check the inner error for details.\", e, true);\r\n }\r\n };\r\n Container.prototype._createInvocationHandler = function (fn) {\r\n var dependencies;\r\n if (fn.inject === undefined) {\r\n dependencies =\r\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].paramTypes, fn) || _emptyParameters;\r\n }\r\n else {\r\n dependencies = [];\r\n var ctor = fn;\r\n while (typeof ctor === 'function') {\r\n dependencies.push.apply(dependencies, getDependencies(ctor));\r\n ctor = Object.getPrototypeOf(ctor);\r\n }\r\n }\r\n var invoker = aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].invoker, fn) || classInvoker;\r\n var handler = new InvocationHandler(fn, invoker, dependencies);\r\n return this._onHandlerCreated !== undefined\r\n ? this._onHandlerCreated(handler)\r\n : handler;\r\n };\r\n return Container;\r\n}());\n\nfunction invoker(value) {\r\n return function (target) {\r\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].invoker, value, target);\r\n };\r\n}\r\nfunction invokeAsFactory(potentialTarget) {\r\n var deco = function (target) {\r\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].invoker, FactoryInvoker.instance, target);\r\n };\r\n return potentialTarget ? deco(potentialTarget) : deco;\r\n}\r\nvar FactoryInvoker = (function () {\r\n function FactoryInvoker() {\r\n }\r\n FactoryInvoker.prototype.invoke = function (container, fn, dependencies) {\r\n var i = dependencies.length;\r\n var args = new Array(i);\r\n while (i--) {\r\n args[i] = container.get(dependencies[i]);\r\n }\r\n return fn.apply(undefined, args);\r\n };\r\n FactoryInvoker.prototype.invokeWithDynamicDependencies = function (container, fn, staticDependencies, dynamicDependencies) {\r\n var i = staticDependencies.length;\r\n var args = new Array(i);\r\n while (i--) {\r\n args[i] = container.get(staticDependencies[i]);\r\n }\r\n if (dynamicDependencies !== undefined) {\r\n args = args.concat(dynamicDependencies);\r\n }\r\n return fn.apply(undefined, args);\r\n };\r\n return FactoryInvoker;\r\n}());\r\nFactoryInvoker.instance = new FactoryInvoker();\n\nfunction registration(value) {\r\n return function (target) {\r\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"metadata\"].registration, value, target);\r\n };\r\n}\r\nfunction transient(key) {\r\n return registration(new TransientRegistration(key));\r\n}\r\nfunction singleton(keyOrRegisterInChild, registerInChild) {\r\n if (registerInChild === void 0) { registerInChild = false; }\r\n return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild));\r\n}\r\nvar TransientRegistration = (function () {\r\n function TransientRegistration(key) {\r\n this._key = key;\r\n }\r\n TransientRegistration.prototype.registerResolver = function (container, key, fn) {\r\n var existingResolver = container.getResolver(this._key || key);\r\n return existingResolver === undefined\r\n ? container.registerTransient((this._key || key), fn)\r\n : existingResolver;\r\n };\r\n return TransientRegistration;\r\n}());\r\nvar SingletonRegistration = (function () {\r\n function SingletonRegistration(keyOrRegisterInChild, registerInChild) {\r\n if (registerInChild === void 0) { registerInChild = false; }\r\n if (typeof keyOrRegisterInChild === 'boolean') {\r\n this._registerInChild = keyOrRegisterInChild;\r\n }\r\n else {\r\n this._key = keyOrRegisterInChild;\r\n this._registerInChild = registerInChild;\r\n }\r\n }\r\n SingletonRegistration.prototype.registerResolver = function (container, key, fn) {\r\n var targetContainer = this._registerInChild ? container : container.root;\r\n var existingResolver = targetContainer.getResolver(this._key || key);\r\n return existingResolver === undefined\r\n ? targetContainer.registerSingleton(this._key || key, fn)\r\n : existingResolver;\r\n };\r\n return SingletonRegistration;\r\n}());\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1kZXBlbmRlbmN5LWluamVjdGlvbi9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1kZXBlbmRlbmN5LWluamVjdGlvbi9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24uanM/ZGQ0ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXRhZGF0YSwgcHJvdG9jb2wgfSBmcm9tICdhdXJlbGlhLW1ldGFkYXRhJztcbmltcG9ydCB7IEFnZ3JlZ2F0ZUVycm9yIH0gZnJvbSAnYXVyZWxpYS1wYWwnO1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxuXG5mdW5jdGlvbiBpc0luamVjdGFibGUocG90ZW50aWFsVGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gISFwb3RlbnRpYWxUYXJnZXQ7XHJcbn1cclxuZnVuY3Rpb24gYXV0b2luamVjdChwb3RlbnRpYWxUYXJnZXQpIHtcclxuICAgIHZhciBkZWNvID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KCdpbmplY3QnKSkge1xyXG4gICAgICAgICAgICB0YXJnZXQuaW5qZWN0ID0gKG1ldGFkYXRhLmdldE93bihtZXRhZGF0YS5wYXJhbVR5cGVzLCB0YXJnZXQpIHx8XHJcbiAgICAgICAgICAgICAgICBfZW1wdHlQYXJhbWV0ZXJzKS5zbGljZSgpO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmluamVjdCAmJiB0YXJnZXQuaW5qZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuaW5qZWN0W3RhcmdldC5pbmplY3QubGVuZ3RoIC0gMV0gPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5pbmplY3Quc3BsaWNlKC0xLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAoaXNJbmplY3RhYmxlKHBvdGVudGlhbFRhcmdldCkpIHtcclxuICAgICAgICByZXR1cm4gZGVjbyhwb3RlbnRpYWxUYXJnZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlY287XHJcbn1cclxuZnVuY3Rpb24gaW5qZWN0KCkge1xyXG4gICAgdmFyIHJlc3QgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgcmVzdFtfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIF9rZXksIGRlc2NyaXB0b3IpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGF1dG9pbmplY3QodGFyZ2V0KTtcclxuICAgICAgICAgICAgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaW5qZWN0W2Rlc2NyaXB0b3JdID0gcmVzdFswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgIHZhciBmbiA9IGRlc2NyaXB0b3IudmFsdWU7XHJcbiAgICAgICAgICAgIGZuLmluamVjdCA9IHJlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0YXJnZXQuaW5qZWN0ID0gcmVzdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XG5cbnZhciByZXNvbHZlciA9IHByb3RvY29sLmNyZWF0ZSgnYXVyZWxpYTpyZXNvbHZlcicsIGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgIGlmICghKHR5cGVvZiB0YXJnZXQuZ2V0ID09PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICAgIHJldHVybiAnUmVzb2x2ZXJzIG11c3QgaW1wbGVtZW50OiBnZXQoY29udGFpbmVyOiBDb250YWluZXIsIGtleTogYW55KTogYW55JztcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59KTtcclxudmFyIFN0cmF0ZWd5O1xyXG4oZnVuY3Rpb24gKFN0cmF0ZWd5KSB7XHJcbiAgICBTdHJhdGVneVtTdHJhdGVneVtcImluc3RhbmNlXCJdID0gMF0gPSBcImluc3RhbmNlXCI7XHJcbiAgICBTdHJhdGVneVtTdHJhdGVneVtcInNpbmdsZXRvblwiXSA9IDFdID0gXCJzaW5nbGV0b25cIjtcclxuICAgIFN0cmF0ZWd5W1N0cmF0ZWd5W1widHJhbnNpZW50XCJdID0gMl0gPSBcInRyYW5zaWVudFwiO1xyXG4gICAgU3RyYXRlZ3lbU3RyYXRlZ3lbXCJmdW5jdGlvblwiXSA9IDNdID0gXCJmdW5jdGlvblwiO1xyXG4gICAgU3RyYXRlZ3lbU3RyYXRlZ3lbXCJhcnJheVwiXSA9IDRdID0gXCJhcnJheVwiO1xyXG4gICAgU3RyYXRlZ3lbU3RyYXRlZ3lbXCJhbGlhc1wiXSA9IDVdID0gXCJhbGlhc1wiO1xyXG59KShTdHJhdGVneSB8fCAoU3RyYXRlZ3kgPSB7fSkpO1xyXG5mdW5jdGlvbiBpc1N0cmF0ZWd5KGFjdHVhbCwgZXhwZWN0ZWQsIHN0YXRlKSB7XHJcbiAgICByZXR1cm4gYWN0dWFsID09PSBleHBlY3RlZDtcclxufVxyXG52YXIgU3RyYXRlZ3lSZXNvbHZlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTdHJhdGVneVJlc29sdmVyKHN0cmF0ZWd5LCBzdGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3RyYXRlZ3kgPSBzdHJhdGVneTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICB9XHJcbiAgICBTdHJhdGVneVJlc29sdmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBrZXkpIHtcclxuICAgICAgICBpZiAoaXNTdHJhdGVneSh0aGlzLnN0cmF0ZWd5LCBTdHJhdGVneS5pbnN0YW5jZSwgdGhpcy5zdGF0ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0cmF0ZWd5KHRoaXMuc3RyYXRlZ3ksIFN0cmF0ZWd5LnNpbmdsZXRvbiwgdGhpcy5zdGF0ZSkpIHtcclxuICAgICAgICAgICAgdmFyIHNpbmdsZXRvbiA9IGNvbnRhaW5lci5pbnZva2UodGhpcy5zdGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzaW5nbGV0b247XHJcbiAgICAgICAgICAgIHRoaXMuc3RyYXRlZ3kgPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gc2luZ2xldG9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTdHJhdGVneSh0aGlzLnN0cmF0ZWd5LCBTdHJhdGVneS50cmFuc2llbnQsIHRoaXMuc3RhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuaW52b2tlKHRoaXMuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTdHJhdGVneSh0aGlzLnN0cmF0ZWd5LCBTdHJhdGVneS5mdW5jdGlvbiwgdGhpcy5zdGF0ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUoY29udGFpbmVyLCBrZXksIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTdHJhdGVneSh0aGlzLnN0cmF0ZWd5LCBTdHJhdGVneS5hcnJheSwgdGhpcy5zdGF0ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVbMF0uZ2V0KGNvbnRhaW5lciwga2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyYXRlZ3kodGhpcy5zdHJhdGVneSwgU3RyYXRlZ3kuYWxpYXMsIHRoaXMuc3RhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuZ2V0KHRoaXMuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyYXRlZ3k6ICcgKyB0aGlzLnN0cmF0ZWd5KTtcclxuICAgIH07XHJcbiAgICBTdHJhdGVneVJlc29sdmVyID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgcmVzb2x2ZXIoKSxcclxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW051bWJlciwgT2JqZWN0XSlcclxuICAgIF0sIFN0cmF0ZWd5UmVzb2x2ZXIpO1xyXG4gICAgcmV0dXJuIFN0cmF0ZWd5UmVzb2x2ZXI7XHJcbn0oKSk7XHJcbnZhciBMYXp5ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIExhenkoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgTGF6eV8xID0gTGF6eTtcclxuICAgIExhenkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb250YWluZXIuZ2V0KF90aGlzLl9rZXkpOyB9O1xyXG4gICAgfTtcclxuICAgIExhenkub2YgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5XzEoa2V5KTtcclxuICAgIH07XHJcbiAgICB2YXIgTGF6eV8xO1xyXG4gICAgTGF6eSA9IExhenlfMSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIHJlc29sdmVyKCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxyXG4gICAgXSwgTGF6eSk7XHJcbiAgICByZXR1cm4gTGF6eTtcclxufSgpKTtcclxudmFyIEFsbCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBBbGwoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgQWxsXzEgPSBBbGw7XHJcbiAgICBBbGwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICByZXR1cm4gY29udGFpbmVyLmdldEFsbCh0aGlzLl9rZXkpO1xyXG4gICAgfTtcclxuICAgIEFsbC5vZiA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEFsbF8xKGtleSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIEFsbF8xO1xyXG4gICAgQWxsID0gQWxsXzEgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICByZXNvbHZlcigpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcclxuICAgIF0sIEFsbCk7XHJcbiAgICByZXR1cm4gQWxsO1xyXG59KCkpO1xyXG52YXIgT3B0aW9uYWwgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gT3B0aW9uYWwoa2V5LCBjaGVja1BhcmVudCkge1xyXG4gICAgICAgIGlmIChjaGVja1BhcmVudCA9PT0gdm9pZCAwKSB7IGNoZWNrUGFyZW50ID0gdHJ1ZTsgfVxyXG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcclxuICAgICAgICB0aGlzLl9jaGVja1BhcmVudCA9IGNoZWNrUGFyZW50O1xyXG4gICAgfVxyXG4gICAgT3B0aW9uYWxfMSA9IE9wdGlvbmFsO1xyXG4gICAgT3B0aW9uYWwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICBpZiAoY29udGFpbmVyLmhhc1Jlc29sdmVyKHRoaXMuX2tleSwgdGhpcy5fY2hlY2tQYXJlbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuZ2V0KHRoaXMuX2tleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIE9wdGlvbmFsLm9mID0gZnVuY3Rpb24gKGtleSwgY2hlY2tQYXJlbnQpIHtcclxuICAgICAgICBpZiAoY2hlY2tQYXJlbnQgPT09IHZvaWQgMCkgeyBjaGVja1BhcmVudCA9IHRydWU7IH1cclxuICAgICAgICByZXR1cm4gbmV3IE9wdGlvbmFsXzEoa2V5LCBjaGVja1BhcmVudCk7XHJcbiAgICB9O1xyXG4gICAgdmFyIE9wdGlvbmFsXzE7XHJcbiAgICBPcHRpb25hbCA9IE9wdGlvbmFsXzEgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICByZXNvbHZlcigpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0LCBCb29sZWFuXSlcclxuICAgIF0sIE9wdGlvbmFsKTtcclxuICAgIHJldHVybiBPcHRpb25hbDtcclxufSgpKTtcclxudmFyIFBhcmVudCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBQYXJlbnQoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgUGFyZW50XzEgPSBQYXJlbnQ7XHJcbiAgICBQYXJlbnQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICByZXR1cm4gY29udGFpbmVyLnBhcmVudCA/IGNvbnRhaW5lci5wYXJlbnQuZ2V0KHRoaXMuX2tleSkgOiBudWxsO1xyXG4gICAgfTtcclxuICAgIFBhcmVudC5vZiA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFBhcmVudF8xKGtleSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIFBhcmVudF8xO1xyXG4gICAgUGFyZW50ID0gUGFyZW50XzEgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICByZXNvbHZlcigpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcclxuICAgIF0sIFBhcmVudCk7XHJcbiAgICByZXR1cm4gUGFyZW50O1xyXG59KCkpO1xyXG52YXIgRmFjdG9yeSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGYWN0b3J5KGtleSkge1xyXG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcclxuICAgIH1cclxuICAgIEZhY3RvcnlfMSA9IEZhY3Rvcnk7XHJcbiAgICBGYWN0b3J5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgdmFyIGZuID0gdGhpcy5fa2V5O1xyXG4gICAgICAgIHZhciByZXNvbHZlciA9IGNvbnRhaW5lci5nZXRSZXNvbHZlcihmbik7XHJcbiAgICAgICAgaWYgKHJlc29sdmVyICYmIHJlc29sdmVyLnN0cmF0ZWd5ID09PSBTdHJhdGVneS5mdW5jdGlvbikge1xyXG4gICAgICAgICAgICBmbiA9IHJlc29sdmVyLnN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgcmVzdFtfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuaW52b2tlKGZuLCByZXN0KTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIEZhY3Rvcnkub2YgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGYWN0b3J5XzEoa2V5KTtcclxuICAgIH07XHJcbiAgICB2YXIgRmFjdG9yeV8xO1xyXG4gICAgRmFjdG9yeSA9IEZhY3RvcnlfMSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIHJlc29sdmVyKCksXHJcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxyXG4gICAgXSwgRmFjdG9yeSk7XHJcbiAgICByZXR1cm4gRmFjdG9yeTtcclxufSgpKTtcclxudmFyIE5ld0luc3RhbmNlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE5ld0luc3RhbmNlKGtleSkge1xyXG4gICAgICAgIHZhciBkeW5hbWljRGVwZW5kZW5jaWVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgZHluYW1pY0RlcGVuZGVuY2llc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5hc0tleSA9IGtleTtcclxuICAgICAgICB0aGlzLmR5bmFtaWNEZXBlbmRlbmNpZXMgPSBkeW5hbWljRGVwZW5kZW5jaWVzO1xyXG4gICAgfVxyXG4gICAgTmV3SW5zdGFuY2VfMSA9IE5ld0luc3RhbmNlO1xyXG4gICAgTmV3SW5zdGFuY2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcclxuICAgICAgICB2YXIgZHluYW1pY0RlcGVuZGVuY2llcyA9IHRoaXMuZHluYW1pY0RlcGVuZGVuY2llcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5keW5hbWljRGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVuY3lbJ3Byb3RvY29sOmF1cmVsaWE6cmVzb2x2ZXInXVxyXG4gICAgICAgICAgICAgICAgICAgID8gZGVwZW5kZW5jeS5nZXQoY29udGFpbmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIDogY29udGFpbmVyLmdldChkZXBlbmRlbmN5KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGZuID0gdGhpcy5rZXk7XHJcbiAgICAgICAgdmFyIHJlc29sdmVyID0gY29udGFpbmVyLmdldFJlc29sdmVyKGZuKTtcclxuICAgICAgICBpZiAocmVzb2x2ZXIgJiYgcmVzb2x2ZXIuc3RyYXRlZ3kgPT09IDMpIHtcclxuICAgICAgICAgICAgZm4gPSByZXNvbHZlci5zdGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY29udGFpbmVyLmludm9rZShmbiwgZHluYW1pY0RlcGVuZGVuY2llcyk7XHJcbiAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UodGhpcy5hc0tleSwgaW5zdGFuY2UpO1xyXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcclxuICAgIH07XHJcbiAgICBOZXdJbnN0YW5jZS5wcm90b3R5cGUuYXMgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5hc0tleSA9IGtleTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBOZXdJbnN0YW5jZS5vZiA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgZHluYW1pY0RlcGVuZGVuY2llcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGR5bmFtaWNEZXBlbmRlbmNpZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKE5ld0luc3RhbmNlXzEuYmluZC5hcHBseShOZXdJbnN0YW5jZV8xLCBbdm9pZCAwLCBrZXldLmNvbmNhdChkeW5hbWljRGVwZW5kZW5jaWVzKSkpKCk7XHJcbiAgICB9O1xyXG4gICAgdmFyIE5ld0luc3RhbmNlXzE7XHJcbiAgICBOZXdJbnN0YW5jZSA9IE5ld0luc3RhbmNlXzEgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICByZXNvbHZlcigpLFxyXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0LCBPYmplY3RdKVxyXG4gICAgXSwgTmV3SW5zdGFuY2UpO1xyXG4gICAgcmV0dXJuIE5ld0luc3RhbmNlO1xyXG59KCkpO1xyXG5mdW5jdGlvbiBnZXREZWNvcmF0b3JEZXBlbmRlbmNpZXModGFyZ2V0KSB7XHJcbiAgICBhdXRvaW5qZWN0KHRhcmdldCk7XHJcbiAgICByZXR1cm4gdGFyZ2V0LmluamVjdDtcclxufVxyXG5mdW5jdGlvbiBsYXp5KGtleVZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgX2tleSwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgaW5qZWN0JCQxID0gZ2V0RGVjb3JhdG9yRGVwZW5kZW5jaWVzKHRhcmdldCk7XHJcbiAgICAgICAgaW5qZWN0JCQxW2luZGV4XSA9IExhenkub2Yoa2V5VmFsdWUpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBhbGwoa2V5VmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBfa2V5LCBpbmRleCkge1xyXG4gICAgICAgIHZhciBpbmplY3QkJDEgPSBnZXREZWNvcmF0b3JEZXBlbmRlbmNpZXModGFyZ2V0KTtcclxuICAgICAgICBpbmplY3QkJDFbaW5kZXhdID0gQWxsLm9mKGtleVZhbHVlKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gb3B0aW9uYWwoY2hlY2tQYXJlbnRPclRhcmdldCkge1xyXG4gICAgaWYgKGNoZWNrUGFyZW50T3JUYXJnZXQgPT09IHZvaWQgMCkgeyBjaGVja1BhcmVudE9yVGFyZ2V0ID0gdHJ1ZTsgfVxyXG4gICAgdmFyIGRlY28gPSBmdW5jdGlvbiAoY2hlY2tQYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgX2tleSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgdmFyIGluamVjdCQkMSA9IGdldERlY29yYXRvckRlcGVuZGVuY2llcyh0YXJnZXQpO1xyXG4gICAgICAgICAgICBpbmplY3QkJDFbaW5kZXhdID0gT3B0aW9uYWwub2YoaW5qZWN0JCQxW2luZGV4XSwgY2hlY2tQYXJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgaWYgKHR5cGVvZiBjaGVja1BhcmVudE9yVGFyZ2V0ID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXR1cm4gZGVjbyhjaGVja1BhcmVudE9yVGFyZ2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZWNvKHRydWUpO1xyXG59XHJcbmZ1bmN0aW9uIHBhcmVudCh0YXJnZXQsIF9rZXksIGluZGV4KSB7XHJcbiAgICB2YXIgaW5qZWN0JCQxID0gZ2V0RGVjb3JhdG9yRGVwZW5kZW5jaWVzKHRhcmdldCk7XHJcbiAgICBpbmplY3QkJDFbaW5kZXhdID0gUGFyZW50Lm9mKGluamVjdCQkMVtpbmRleF0pO1xyXG59XHJcbmZ1bmN0aW9uIGZhY3Rvcnkoa2V5VmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBfa2V5LCBpbmRleCkge1xyXG4gICAgICAgIHZhciBpbmplY3QkJDEgPSBnZXREZWNvcmF0b3JEZXBlbmRlbmNpZXModGFyZ2V0KTtcclxuICAgICAgICBpbmplY3QkJDFbaW5kZXhdID0gRmFjdG9yeS5vZihrZXlWYWx1ZSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIG5ld0luc3RhbmNlKGFzS2V5T3JUYXJnZXQpIHtcclxuICAgIHZhciBkeW5hbWljRGVwZW5kZW5jaWVzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGR5bmFtaWNEZXBlbmRlbmNpZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgZGVjbyA9IGZ1bmN0aW9uIChhc0tleSkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBfa2V5LCBpbmRleCkge1xyXG4gICAgICAgICAgICB2YXIgaW5qZWN0JCQxID0gZ2V0RGVjb3JhdG9yRGVwZW5kZW5jaWVzKHRhcmdldCk7XHJcbiAgICAgICAgICAgIGluamVjdCQkMVtpbmRleF0gPSBOZXdJbnN0YW5jZS5vZi5hcHBseShOZXdJbnN0YW5jZSwgW2luamVjdCQkMVtpbmRleF1dLmNvbmNhdChkeW5hbWljRGVwZW5kZW5jaWVzKSk7XHJcbiAgICAgICAgICAgIGlmICghIWFzS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpbmplY3QkJDFbaW5kZXhdLmFzKGFzS2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIHJldHVybiBkZWNvKGFzS2V5T3JUYXJnZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlY28oKTtcclxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUtleShrZXkpIHtcclxuICAgIGlmIChrZXkgPT09IG51bGwgfHwga2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleS92YWx1ZSBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIEFyZSB5b3UgdHJ5aW5nIHRvIGluamVjdC9yZWdpc3RlciBzb21ldGhpbmcgdGhhdCBkb2VzblxcJ3QgZXhpc3Qgd2l0aCBEST8nKTtcclxuICAgIH1cclxufVxyXG52YXIgX2VtcHR5UGFyYW1ldGVycyA9IE9iamVjdC5mcmVlemUoW10pO1xyXG5tZXRhZGF0YS5yZWdpc3RyYXRpb24gPSAnYXVyZWxpYTpyZWdpc3RyYXRpb24nO1xyXG5tZXRhZGF0YS5pbnZva2VyID0gJ2F1cmVsaWE6aW52b2tlcic7XHJcbnZhciByZXNvbHZlckRlY29yYXRlcyA9IHJlc29sdmVyLmRlY29yYXRlcztcclxudmFyIEludm9jYXRpb25IYW5kbGVyID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEludm9jYXRpb25IYW5kbGVyKGZuLCBpbnZva2VyLCBkZXBlbmRlbmNpZXMpIHtcclxuICAgICAgICB0aGlzLmZuID0gZm47XHJcbiAgICAgICAgdGhpcy5pbnZva2VyID0gaW52b2tlcjtcclxuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcztcclxuICAgIH1cclxuICAgIEludm9jYXRpb25IYW5kbGVyLnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBkeW5hbWljRGVwZW5kZW5jaWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGR5bmFtaWNEZXBlbmRlbmNpZXMgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHRoaXMuaW52b2tlci5pbnZva2VXaXRoRHluYW1pY0RlcGVuZGVuY2llcyhjb250YWluZXIsIHRoaXMuZm4sIHRoaXMuZGVwZW5kZW5jaWVzLCBkeW5hbWljRGVwZW5kZW5jaWVzKVxyXG4gICAgICAgICAgICA6IHRoaXMuaW52b2tlci5pbnZva2UoY29udGFpbmVyLCB0aGlzLmZuLCB0aGlzLmRlcGVuZGVuY2llcyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEludm9jYXRpb25IYW5kbGVyO1xyXG59KCkpO1xyXG5mdW5jdGlvbiBpbnZva2VXaXRoRHluYW1pY0RlcGVuZGVuY2llcyhjb250YWluZXIsIGZuLCBzdGF0aWNEZXBlbmRlbmNpZXMsIGR5bmFtaWNEZXBlbmRlbmNpZXMpIHtcclxuICAgIHZhciBpID0gc3RhdGljRGVwZW5kZW5jaWVzLmxlbmd0aDtcclxuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGkpO1xyXG4gICAgdmFyIGxvb2t1cDtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICBsb29rdXAgPSBzdGF0aWNEZXBlbmRlbmNpZXNbaV07XHJcbiAgICAgICAgaWYgKGxvb2t1cCA9PT0gbnVsbCB8fCBsb29rdXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnN0cnVjdG9yIFBhcmFtZXRlciB3aXRoIGluZGV4ICcgK1xyXG4gICAgICAgICAgICAgICAgaSArXHJcbiAgICAgICAgICAgICAgICAnIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4gQXJlIHlvdSB0cnlpbmcgdG8gaW5qZWN0L3JlZ2lzdGVyIHNvbWV0aGluZyB0aGF0IGRvZXNuXFwndCBleGlzdCB3aXRoIERJPycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYXJnc1tpXSA9IGNvbnRhaW5lci5nZXQobG9va3VwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZHluYW1pY0RlcGVuZGVuY2llcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGR5bmFtaWNEZXBlbmRlbmNpZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KGZuLCBhcmdzKTtcclxufVxyXG52YXIgY2xhc3NJbnZva2VyID0ge1xyXG4gICAgaW52b2tlOiBmdW5jdGlvbiAoY29udGFpbmVyLCBUeXBlLCBkZXBzKSB7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlcyA9IGRlcHMubWFwKGZ1bmN0aW9uIChkZXApIHsgcmV0dXJuIGNvbnRhaW5lci5nZXQoZGVwKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KFR5cGUsIGluc3RhbmNlcyk7XHJcbiAgICB9LFxyXG4gICAgaW52b2tlV2l0aER5bmFtaWNEZXBlbmRlbmNpZXM6IGludm9rZVdpdGhEeW5hbWljRGVwZW5kZW5jaWVzXHJcbn07XHJcbmZ1bmN0aW9uIGdldERlcGVuZGVuY2llcyhmKSB7XHJcbiAgICBpZiAoIWYuaGFzT3duUHJvcGVydHkoJ2luamVjdCcpKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBmLmluamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBmLmluamVjdCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGYuaW5qZWN0O1xyXG59XHJcbnZhciBDb250YWluZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ29udGFpbmVyKGNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgdGhpcy5fb25IYW5kbGVyQ3JlYXRlZCA9IGNvbmZpZ3VyYXRpb24ub25IYW5kbGVyQ3JlYXRlZDtcclxuICAgICAgICB0aGlzLl9oYW5kbGVycyA9XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uaGFuZGxlcnMgfHwgKGNvbmZpZ3VyYXRpb24uaGFuZGxlcnMgPSBuZXcgTWFwKCkpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmVycyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcclxuICAgIH1cclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUubWFrZUdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBDb250YWluZXIuaW5zdGFuY2UgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuc2V0SGFuZGxlckNyZWF0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uIChvbkhhbmRsZXJDcmVhdGVkKSB7XHJcbiAgICAgICAgdGhpcy5fb25IYW5kbGVyQ3JlYXRlZCA9IG9uSGFuZGxlckNyZWF0ZWQ7XHJcbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbi5vbkhhbmRsZXJDcmVhdGVkID0gb25IYW5kbGVyQ3JlYXRlZDtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLnJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAoa2V5LCBpbnN0YW5jZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyUmVzb2x2ZXIoa2V5LCBuZXcgU3RyYXRlZ3lSZXNvbHZlcigwLCBpbnN0YW5jZSA9PT0gdW5kZWZpbmVkID8ga2V5IDogaW5zdGFuY2UpKTtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLnJlZ2lzdGVyU2luZ2xldG9uID0gZnVuY3Rpb24gKGtleSwgZm4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlclJlc29sdmVyKGtleSwgbmV3IFN0cmF0ZWd5UmVzb2x2ZXIoMSwgZm4gPT09IHVuZGVmaW5lZCA/IGtleSA6IGZuKSk7XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5yZWdpc3RlclRyYW5zaWVudCA9IGZ1bmN0aW9uIChrZXksIGZuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJSZXNvbHZlcihrZXksIG5ldyBTdHJhdGVneVJlc29sdmVyKDIsIGZuID09PSB1bmRlZmluZWQgPyBrZXkgOiBmbikpO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUucmVnaXN0ZXJIYW5kbGVyID0gZnVuY3Rpb24gKGtleSwgaGFuZGxlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyUmVzb2x2ZXIoa2V5LCBuZXcgU3RyYXRlZ3lSZXNvbHZlcigzLCBoYW5kbGVyKSk7XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5yZWdpc3RlckFsaWFzID0gZnVuY3Rpb24gKG9yaWdpbmFsS2V5LCBhbGlhc0tleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyUmVzb2x2ZXIoYWxpYXNLZXksIG5ldyBTdHJhdGVneVJlc29sdmVyKDUsIG9yaWdpbmFsS2V5KSk7XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5yZWdpc3RlclJlc29sdmVyID0gZnVuY3Rpb24gKGtleSwgcmVzb2x2ZXIkJDEpIHtcclxuICAgICAgICB2YWxpZGF0ZUtleShrZXkpO1xyXG4gICAgICAgIHZhciBhbGxSZXNvbHZlcnMgPSB0aGlzLl9yZXNvbHZlcnM7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFsbFJlc29sdmVycy5nZXQoa2V5KTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgYWxsUmVzb2x2ZXJzLnNldChrZXksIHJlc29sdmVyJCQxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LnN0cmF0ZWd5ID09PSA0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0ZS5wdXNoKHJlc29sdmVyJCQxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFsbFJlc29sdmVycy5zZXQoa2V5LCBuZXcgU3RyYXRlZ3lSZXNvbHZlcig0LCBbcmVzdWx0LCByZXNvbHZlciQkMV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyJCQxO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuYXV0b1JlZ2lzdGVyID0gZnVuY3Rpb24gKGtleSwgZm4pIHtcclxuICAgICAgICBmbiA9IGZuID09PSB1bmRlZmluZWQgPyBrZXkgOiBmbjtcclxuICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhciByZWdpc3RyYXRpb24gPSBtZXRhZGF0YS5nZXQobWV0YWRhdGEucmVnaXN0cmF0aW9uLCBmbik7XHJcbiAgICAgICAgICAgIGlmIChyZWdpc3RyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJSZXNvbHZlcihrZXksIG5ldyBTdHJhdGVneVJlc29sdmVyKDEsIGZuKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvbi5yZWdpc3RlclJlc29sdmVyKHRoaXMsIGtleSwgZm4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlclJlc29sdmVyKGtleSwgbmV3IFN0cmF0ZWd5UmVzb2x2ZXIoMCwgZm4pKTtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLmF1dG9SZWdpc3RlckFsbCA9IGZ1bmN0aW9uIChmbnMpIHtcclxuICAgICAgICB2YXIgaSA9IGZucy5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9SZWdpc3RlcihmbnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLnVucmVnaXN0ZXIgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZXJzLmRlbGV0ZShrZXkpO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuaGFzUmVzb2x2ZXIgPSBmdW5jdGlvbiAoa2V5LCBjaGVja1BhcmVudCkge1xyXG4gICAgICAgIGlmIChjaGVja1BhcmVudCA9PT0gdm9pZCAwKSB7IGNoZWNrUGFyZW50ID0gZmFsc2U7IH1cclxuICAgICAgICB2YWxpZGF0ZUtleShrZXkpO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fcmVzb2x2ZXJzLmhhcyhrZXkpIHx8XHJcbiAgICAgICAgICAgIChjaGVja1BhcmVudCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Lmhhc1Jlc29sdmVyKGtleSwgY2hlY2tQYXJlbnQpKSk7XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5nZXRSZXNvbHZlciA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZXJzLmdldChrZXkpO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzb2x2ZXJEZWNvcmF0ZXMoa2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5LmdldCh0aGlzLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzb2x2ZXIkJDEgPSB0aGlzLl9yZXNvbHZlcnMuZ2V0KGtleSk7XHJcbiAgICAgICAgaWYgKHJlc29sdmVyJCQxID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRvUmVnaXN0ZXIoa2V5KS5nZXQodGhpcywga2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVnaXN0cmF0aW9uID0gbWV0YWRhdGEuZ2V0KG1ldGFkYXRhLnJlZ2lzdHJhdGlvbiwga2V5KTtcclxuICAgICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuX2dldChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZWdpc3RyYXRpb24ucmVnaXN0ZXJSZXNvbHZlcih0aGlzLCBrZXksIGtleSkuZ2V0KHRoaXMsIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNvbHZlciQkMS5nZXQodGhpcywga2V5KTtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLl9nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIHJlc29sdmVyJCQxID0gdGhpcy5fcmVzb2x2ZXJzLmdldChrZXkpO1xyXG4gICAgICAgIGlmIChyZXNvbHZlciQkMSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0b1JlZ2lzdGVyKGtleSkuZ2V0KHRoaXMsIGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Ll9nZXQoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyJCQxLmdldCh0aGlzLCBrZXkpO1xyXG4gICAgfTtcclxuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XHJcbiAgICAgICAgdmFyIHJlc29sdmVyJCQxID0gdGhpcy5fcmVzb2x2ZXJzLmdldChrZXkpO1xyXG4gICAgICAgIGlmIChyZXNvbHZlciQkMSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9lbXB0eVBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldEFsbChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzb2x2ZXIkJDEuc3RyYXRlZ3kgPT09IDQpIHtcclxuICAgICAgICAgICAgdmFyIHN0YXRlID0gcmVzb2x2ZXIkJDEuc3RhdGU7XHJcbiAgICAgICAgICAgIHZhciBpID0gc3RhdGUubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBBcnJheShpKTtcclxuICAgICAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IHN0YXRlW2ldLmdldCh0aGlzLCBrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW3Jlc29sdmVyJCQxLmdldCh0aGlzLCBrZXkpXTtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLmNyZWF0ZUNoaWxkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGlsZCA9IG5ldyBDb250YWluZXIodGhpcy5fY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgY2hpbGQucm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgIH07XHJcbiAgICBDb250YWluZXIucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uIChmbiwgZHluYW1pY0RlcGVuZGVuY2llcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5faGFuZGxlcnMuZ2V0KGZuKTtcclxuICAgICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IHRoaXMuX2NyZWF0ZUludm9jYXRpb25IYW5kbGVyKGZuKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZXJzLnNldChmbiwgaGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIuaW52b2tlKHRoaXMsIGR5bmFtaWNEZXBlbmRlbmNpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXCJFcnJvciBpbnZva2luZyBcIiArIGZuLm5hbWUgKyBcIi4gQ2hlY2sgdGhlIGlubmVyIGVycm9yIGZvciBkZXRhaWxzLlwiLCBlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5fY3JlYXRlSW52b2NhdGlvbkhhbmRsZXIgPSBmdW5jdGlvbiAoZm4pIHtcclxuICAgICAgICB2YXIgZGVwZW5kZW5jaWVzO1xyXG4gICAgICAgIGlmIChmbi5pbmplY3QgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXMgPVxyXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEuZ2V0T3duKG1ldGFkYXRhLnBhcmFtVHlwZXMsIGZuKSB8fCBfZW1wdHlQYXJhbWV0ZXJzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzID0gW107XHJcbiAgICAgICAgICAgIHZhciBjdG9yID0gZm47XHJcbiAgICAgICAgICAgIHdoaWxlICh0eXBlb2YgY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2guYXBwbHkoZGVwZW5kZW5jaWVzLCBnZXREZXBlbmRlbmNpZXMoY3RvcikpO1xyXG4gICAgICAgICAgICAgICAgY3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW52b2tlciA9IG1ldGFkYXRhLmdldE93bihtZXRhZGF0YS5pbnZva2VyLCBmbikgfHwgY2xhc3NJbnZva2VyO1xyXG4gICAgICAgIHZhciBoYW5kbGVyID0gbmV3IEludm9jYXRpb25IYW5kbGVyKGZuLCBpbnZva2VyLCBkZXBlbmRlbmNpZXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vbkhhbmRsZXJDcmVhdGVkICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyB0aGlzLl9vbkhhbmRsZXJDcmVhdGVkKGhhbmRsZXIpXHJcbiAgICAgICAgICAgIDogaGFuZGxlcjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ29udGFpbmVyO1xyXG59KCkpO1xuXG5mdW5jdGlvbiBpbnZva2VyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5pbnZva2VyLCB2YWx1ZSwgdGFyZ2V0KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaW52b2tlQXNGYWN0b3J5KHBvdGVudGlhbFRhcmdldCkge1xyXG4gICAgdmFyIGRlY28gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLmludm9rZXIsIEZhY3RvcnlJbnZva2VyLmluc3RhbmNlLCB0YXJnZXQpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBwb3RlbnRpYWxUYXJnZXQgPyBkZWNvKHBvdGVudGlhbFRhcmdldCkgOiBkZWNvO1xyXG59XHJcbnZhciBGYWN0b3J5SW52b2tlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGYWN0b3J5SW52b2tlcigpIHtcclxuICAgIH1cclxuICAgIEZhY3RvcnlJbnZva2VyLnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBmbiwgZGVwZW5kZW5jaWVzKSB7XHJcbiAgICAgICAgdmFyIGkgPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGkpO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgYXJnc1tpXSA9IGNvbnRhaW5lci5nZXQoZGVwZW5kZW5jaWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XHJcbiAgICB9O1xyXG4gICAgRmFjdG9yeUludm9rZXIucHJvdG90eXBlLmludm9rZVdpdGhEeW5hbWljRGVwZW5kZW5jaWVzID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgZm4sIHN0YXRpY0RlcGVuZGVuY2llcywgZHluYW1pY0RlcGVuZGVuY2llcykge1xyXG4gICAgICAgIHZhciBpID0gc3RhdGljRGVwZW5kZW5jaWVzLmxlbmd0aDtcclxuICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShpKTtcclxuICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbaV0gPSBjb250YWluZXIuZ2V0KHN0YXRpY0RlcGVuZGVuY2llc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkeW5hbWljRGVwZW5kZW5jaWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGR5bmFtaWNEZXBlbmRlbmNpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRmFjdG9yeUludm9rZXI7XHJcbn0oKSk7XHJcbkZhY3RvcnlJbnZva2VyLmluc3RhbmNlID0gbmV3IEZhY3RvcnlJbnZva2VyKCk7XG5cbmZ1bmN0aW9uIHJlZ2lzdHJhdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBtZXRhZGF0YS5kZWZpbmUobWV0YWRhdGEucmVnaXN0cmF0aW9uLCB2YWx1ZSwgdGFyZ2V0KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdHJhbnNpZW50KGtleSkge1xyXG4gICAgcmV0dXJuIHJlZ2lzdHJhdGlvbihuZXcgVHJhbnNpZW50UmVnaXN0cmF0aW9uKGtleSkpO1xyXG59XHJcbmZ1bmN0aW9uIHNpbmdsZXRvbihrZXlPclJlZ2lzdGVySW5DaGlsZCwgcmVnaXN0ZXJJbkNoaWxkKSB7XHJcbiAgICBpZiAocmVnaXN0ZXJJbkNoaWxkID09PSB2b2lkIDApIHsgcmVnaXN0ZXJJbkNoaWxkID0gZmFsc2U7IH1cclxuICAgIHJldHVybiByZWdpc3RyYXRpb24obmV3IFNpbmdsZXRvblJlZ2lzdHJhdGlvbihrZXlPclJlZ2lzdGVySW5DaGlsZCwgcmVnaXN0ZXJJbkNoaWxkKSk7XHJcbn1cclxudmFyIFRyYW5zaWVudFJlZ2lzdHJhdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUcmFuc2llbnRSZWdpc3RyYXRpb24oa2V5KSB7XHJcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xyXG4gICAgfVxyXG4gICAgVHJhbnNpZW50UmVnaXN0cmF0aW9uLnByb3RvdHlwZS5yZWdpc3RlclJlc29sdmVyID0gZnVuY3Rpb24gKGNvbnRhaW5lciwga2V5LCBmbikge1xyXG4gICAgICAgIHZhciBleGlzdGluZ1Jlc29sdmVyID0gY29udGFpbmVyLmdldFJlc29sdmVyKHRoaXMuX2tleSB8fCBrZXkpO1xyXG4gICAgICAgIHJldHVybiBleGlzdGluZ1Jlc29sdmVyID09PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBjb250YWluZXIucmVnaXN0ZXJUcmFuc2llbnQoKHRoaXMuX2tleSB8fCBrZXkpLCBmbilcclxuICAgICAgICAgICAgOiBleGlzdGluZ1Jlc29sdmVyO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBUcmFuc2llbnRSZWdpc3RyYXRpb247XHJcbn0oKSk7XHJcbnZhciBTaW5nbGV0b25SZWdpc3RyYXRpb24gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU2luZ2xldG9uUmVnaXN0cmF0aW9uKGtleU9yUmVnaXN0ZXJJbkNoaWxkLCByZWdpc3RlckluQ2hpbGQpIHtcclxuICAgICAgICBpZiAocmVnaXN0ZXJJbkNoaWxkID09PSB2b2lkIDApIHsgcmVnaXN0ZXJJbkNoaWxkID0gZmFsc2U7IH1cclxuICAgICAgICBpZiAodHlwZW9mIGtleU9yUmVnaXN0ZXJJbkNoaWxkID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJJbkNoaWxkID0ga2V5T3JSZWdpc3RlckluQ2hpbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9rZXkgPSBrZXlPclJlZ2lzdGVySW5DaGlsZDtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJJbkNoaWxkID0gcmVnaXN0ZXJJbkNoaWxkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFNpbmdsZXRvblJlZ2lzdHJhdGlvbi5wcm90b3R5cGUucmVnaXN0ZXJSZXNvbHZlciA9IGZ1bmN0aW9uIChjb250YWluZXIsIGtleSwgZm4pIHtcclxuICAgICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGhpcy5fcmVnaXN0ZXJJbkNoaWxkID8gY29udGFpbmVyIDogY29udGFpbmVyLnJvb3Q7XHJcbiAgICAgICAgdmFyIGV4aXN0aW5nUmVzb2x2ZXIgPSB0YXJnZXRDb250YWluZXIuZ2V0UmVzb2x2ZXIodGhpcy5fa2V5IHx8IGtleSk7XHJcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nUmVzb2x2ZXIgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHRhcmdldENvbnRhaW5lci5yZWdpc3RlclNpbmdsZXRvbih0aGlzLl9rZXkgfHwga2V5LCBmbilcclxuICAgICAgICAgICAgOiBleGlzdGluZ1Jlc29sdmVyO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBTaW5nbGV0b25SZWdpc3RyYXRpb247XHJcbn0oKSk7XG5cbmV4cG9ydCB7IF9lbXB0eVBhcmFtZXRlcnMsIEludm9jYXRpb25IYW5kbGVyLCBDb250YWluZXIsIGF1dG9pbmplY3QsIGluamVjdCwgaW52b2tlciwgaW52b2tlQXNGYWN0b3J5LCBGYWN0b3J5SW52b2tlciwgcmVnaXN0cmF0aW9uLCB0cmFuc2llbnQsIHNpbmdsZXRvbiwgVHJhbnNpZW50UmVnaXN0cmF0aW9uLCBTaW5nbGV0b25SZWdpc3RyYXRpb24sIHJlc29sdmVyLCBTdHJhdGVneSwgU3RyYXRlZ3lSZXNvbHZlciwgTGF6eSwgQWxsLCBPcHRpb25hbCwgUGFyZW50LCBGYWN0b3J5LCBOZXdJbnN0YW5jZSwgZ2V0RGVjb3JhdG9yRGVwZW5kZW5jaWVzLCBsYXp5LCBhbGwsIG9wdGlvbmFsLCBwYXJlbnQsIGZhY3RvcnksIG5ld0luc3RhbmNlIH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js\n"); /***/ }), /***/ "./node_modules/aurelia-history/dist/native-modules/aurelia-history.js": /*!*****************************************************************************!*\ !*** ./node_modules/aurelia-history/dist/native-modules/aurelia-history.js ***! \*****************************************************************************/ /*! exports provided: History */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"History\", function() { return History; });\n\n\nfunction mi(name) {\n throw new Error('History must implement ' + name + '().');\n}\n\nvar History = function () {\n function History() {\n \n }\n\n History.prototype.activate = function activate(options) {\n mi('activate');\n };\n\n History.prototype.deactivate = function deactivate() {\n mi('deactivate');\n };\n\n History.prototype.getAbsoluteRoot = function getAbsoluteRoot() {\n mi('getAbsoluteRoot');\n };\n\n History.prototype.navigate = function navigate(fragment, options) {\n mi('navigate');\n };\n\n History.prototype.navigateBack = function navigateBack() {\n mi('navigateBack');\n };\n\n History.prototype.setTitle = function setTitle(title) {\n mi('setTitle');\n };\n\n History.prototype.setState = function setState(key, value) {\n mi('setState');\n };\n\n History.prototype.getState = function getState(key) {\n mi('getState');\n };\n\n History.prototype.getHistoryIndex = function getHistoryIndex() {\n mi('getHistoryIndex');\n };\n\n History.prototype.go = function go(movement) {\n mi('go');\n };\n\n return History;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1oaXN0b3J5L2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1oaXN0b3J5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtaGlzdG9yeS9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtaGlzdG9yeS5qcz83OGZkIl0sInNvdXJjZXNDb250ZW50IjpbIlxuXG5mdW5jdGlvbiBtaShuYW1lKSB7XG4gIHRocm93IG5ldyBFcnJvcignSGlzdG9yeSBtdXN0IGltcGxlbWVudCAnICsgbmFtZSArICcoKS4nKTtcbn1cblxuZXhwb3J0IHZhciBIaXN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBIaXN0b3J5KCkge1xuICAgIFxuICB9XG5cbiAgSGlzdG9yeS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiBhY3RpdmF0ZShvcHRpb25zKSB7XG4gICAgbWkoJ2FjdGl2YXRlJyk7XG4gIH07XG5cbiAgSGlzdG9yeS5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uIGRlYWN0aXZhdGUoKSB7XG4gICAgbWkoJ2RlYWN0aXZhdGUnKTtcbiAgfTtcblxuICBIaXN0b3J5LnByb3RvdHlwZS5nZXRBYnNvbHV0ZVJvb3QgPSBmdW5jdGlvbiBnZXRBYnNvbHV0ZVJvb3QoKSB7XG4gICAgbWkoJ2dldEFic29sdXRlUm9vdCcpO1xuICB9O1xuXG4gIEhpc3RvcnkucHJvdG90eXBlLm5hdmlnYXRlID0gZnVuY3Rpb24gbmF2aWdhdGUoZnJhZ21lbnQsIG9wdGlvbnMpIHtcbiAgICBtaSgnbmF2aWdhdGUnKTtcbiAgfTtcblxuICBIaXN0b3J5LnByb3RvdHlwZS5uYXZpZ2F0ZUJhY2sgPSBmdW5jdGlvbiBuYXZpZ2F0ZUJhY2soKSB7XG4gICAgbWkoJ25hdmlnYXRlQmFjaycpO1xuICB9O1xuXG4gIEhpc3RvcnkucHJvdG90eXBlLnNldFRpdGxlID0gZnVuY3Rpb24gc2V0VGl0bGUodGl0bGUpIHtcbiAgICBtaSgnc2V0VGl0bGUnKTtcbiAgfTtcblxuICBIaXN0b3J5LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKGtleSwgdmFsdWUpIHtcbiAgICBtaSgnc2V0U3RhdGUnKTtcbiAgfTtcblxuICBIaXN0b3J5LnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uIGdldFN0YXRlKGtleSkge1xuICAgIG1pKCdnZXRTdGF0ZScpO1xuICB9O1xuXG4gIEhpc3RvcnkucHJvdG90eXBlLmdldEhpc3RvcnlJbmRleCA9IGZ1bmN0aW9uIGdldEhpc3RvcnlJbmRleCgpIHtcbiAgICBtaSgnZ2V0SGlzdG9yeUluZGV4Jyk7XG4gIH07XG5cbiAgSGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyhtb3ZlbWVudCkge1xuICAgIG1pKCdnbycpO1xuICB9O1xuXG4gIHJldHVybiBIaXN0b3J5O1xufSgpOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/aurelia-history/dist/native-modules/aurelia-history.js\n"); /***/ }), /***/ "./node_modules/aurelia-loader-webpack/dist/native-modules/aurelia-loader-webpack.js": /*!*******************************************************************************************!*\ !*** ./node_modules/aurelia-loader-webpack/dist/native-modules/aurelia-loader-webpack.js ***! \*******************************************************************************************/ /*! exports provided: TextTemplateLoader, ensureOriginOnExports, WebpackLoader */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(Promise, module) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextTemplateLoader\", function() { return TextTemplateLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ensureOriginOnExports\", function() { return ensureOriginOnExports; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WebpackLoader\", function() { return WebpackLoader; });\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-metadata */ \"./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js\");\n/* harmony import */ var aurelia_loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aurelia-loader */ \"./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js\");\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\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 = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\n\n\n/**\n* An implementation of the TemplateLoader interface implemented with text-based loading.\n*/\nvar TextTemplateLoader = /** @class */ (function () {\n function TextTemplateLoader() {\n }\n /**\n * Loads a template.\n * @param loader The loader that is requesting the template load.\n * @param entry The TemplateRegistryEntry to load and populate with a template.\n * @return A promise which resolves when the TemplateRegistryEntry is loaded with a template.\n */\n TextTemplateLoader.prototype.loadTemplate = function (loader, entry) {\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, loader.loadText(entry.address)];\n case 1:\n text = _a.sent();\n entry.template = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createTemplateFromMarkup(text);\n return [2 /*return*/];\n }\n });\n });\n };\n return TextTemplateLoader;\n}());\n\nfunction ensureOriginOnExports(moduleExports, moduleId) {\n var target = moduleExports;\n var key;\n var exportedValue;\n if (target.__useDefault) {\n target = target.default;\n }\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"Origin\"].set(target, new aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"Origin\"](moduleId, 'default'));\n if (typeof target === 'object') {\n for (key in target) {\n exportedValue = target[key];\n if (typeof exportedValue === 'function') {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"Origin\"].set(exportedValue, new aurelia_metadata__WEBPACK_IMPORTED_MODULE_0__[\"Origin\"](moduleId, key));\n }\n }\n }\n return moduleExports;\n}\n/**\n* A default implementation of the Loader abstraction which works with webpack (extended common-js style).\n*/\nvar WebpackLoader = /** @class */ (function (_super) {\n __extends(WebpackLoader, _super);\n function WebpackLoader() {\n var _this = _super.call(this) || this;\n _this.moduleRegistry = Object.create(null);\n _this.loaderPlugins = Object.create(null);\n _this.modulesBeingLoaded = new Map();\n _this.useTemplateLoader(new TextTemplateLoader());\n _this.addPlugin('template-registry-entry', {\n fetch: function (moduleId) { return __awaiter(_this, void 0, void 0, function () {\n var HmrContext, entry;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // HMR:\n if (false) {}\n entry = this.getOrCreateTemplateRegistryEntry(moduleId);\n if (!!entry.templateIsLoaded) return [3 /*break*/, 2];\n return [4 /*yield*/, this.templateLoader.loadTemplate(this, entry)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/, entry];\n }\n });\n }); }\n });\n aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"PLATFORM\"].eachModule = function (callback) {\n var registry = __webpack_require__.c;\n var cachedModuleIds = Object.getOwnPropertyNames(registry);\n cachedModuleIds\n // Note: we use .some here like a .forEach that can be \"break\"ed out of.\n // It will stop iterating only when a truthy value is returned.\n // Even though the docs say \"true\" explicitly, loader-default also goes by truthy\n // and this is to keep it consistent with that.\n .some(function (moduleId) {\n var moduleExports = registry[moduleId].exports;\n if (typeof moduleExports === 'object') {\n return callback(moduleId, moduleExports);\n }\n return false;\n });\n };\n return _this;\n }\n WebpackLoader.prototype._import = function (address, defaultHMR) {\n if (defaultHMR === void 0) { defaultHMR = true; }\n return __awaiter(this, void 0, void 0, function () {\n var addressParts, moduleId, loaderPlugin, plugin_1, asyncModuleId, callback;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n addressParts = address.split('!');\n moduleId = addressParts.splice(addressParts.length - 1, 1)[0];\n loaderPlugin = addressParts.length === 1 ? addressParts[0] : null;\n if (!loaderPlugin) return [3 /*break*/, 2];\n plugin_1 = this.loaderPlugins[loaderPlugin];\n if (!plugin_1) {\n throw new Error(\"Plugin \" + loaderPlugin + \" is not registered in the loader.\");\n }\n if (false) {}\n return [4 /*yield*/, plugin_1.fetch(moduleId)];\n case 1: return [2 /*return*/, _a.sent()];\n case 2:\n if (__webpack_require__.m[moduleId]) {\n if (defaultHMR && module.hot && this.hmrContext) {\n module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n }\n return [2 /*return*/, __webpack_require__(moduleId)];\n }\n asyncModuleId = \"async!\" + moduleId;\n if (!__webpack_require__.m[asyncModuleId]) return [3 /*break*/, 4];\n if (defaultHMR && module.hot && this.hmrContext) {\n module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n module.hot.accept(asyncModuleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n }\n callback = __webpack_require__(asyncModuleId);\n return [4 /*yield*/, new Promise(callback)];\n case 3: return [2 /*return*/, _a.sent()];\n case 4: throw new Error(\"Unable to find module with ID: \" + moduleId);\n }\n });\n });\n };\n /**\n * Maps a module id to a source.\n * @param id The module id.\n * @param source The source to map the module to.\n */\n WebpackLoader.prototype.map = function (id, source) { };\n /**\n * Normalizes a module id.\n * @param moduleId The module id to normalize.\n * @param relativeTo What the module id should be normalized relative to.\n * @return The normalized module id.\n */\n WebpackLoader.prototype.normalizeSync = function (moduleId, relativeTo) {\n return moduleId;\n };\n /**\n * Normalizes a module id.\n * @param moduleId The module id to normalize.\n * @param relativeTo What the module id should be normalized relative to.\n * @return The normalized module id.\n */\n WebpackLoader.prototype.normalize = function (moduleId, relativeTo) {\n return Promise.resolve(moduleId);\n };\n /**\n * Instructs the loader to use a specific TemplateLoader instance for loading templates\n * @param templateLoader The instance of TemplateLoader to use for loading templates.\n */\n WebpackLoader.prototype.useTemplateLoader = function (templateLoader) {\n this.templateLoader = templateLoader;\n };\n /**\n * Loads a collection of modules.\n * @param ids The set of module ids to load.\n * @return A Promise for an array of loaded modules.\n */\n WebpackLoader.prototype.loadAllModules = function (ids) {\n var _this = this;\n return Promise.all(ids.map(function (id) { return _this.loadModule(id); }));\n };\n /**\n * Loads a module.\n * @param moduleId The module ID to load.\n * @return A Promise for the loaded module.\n */\n WebpackLoader.prototype.loadModule = function (moduleId, defaultHMR) {\n if (defaultHMR === void 0) { defaultHMR = true; }\n return __awaiter(this, void 0, void 0, function () {\n var existing, beingLoaded, moduleExports;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n existing = this.moduleRegistry[moduleId];\n if (existing) {\n return [2 /*return*/, existing];\n }\n beingLoaded = this.modulesBeingLoaded.get(moduleId);\n if (beingLoaded) {\n return [2 /*return*/, beingLoaded];\n }\n beingLoaded = this._import(moduleId, defaultHMR);\n this.modulesBeingLoaded.set(moduleId, beingLoaded);\n return [4 /*yield*/, beingLoaded];\n case 1:\n moduleExports = _a.sent();\n this.moduleRegistry[moduleId] = ensureOriginOnExports(moduleExports, moduleId);\n this.modulesBeingLoaded.delete(moduleId);\n return [2 /*return*/, moduleExports];\n }\n });\n });\n };\n /**\n * Loads a template.\n * @param url The url of the template to load.\n * @return A Promise for a TemplateRegistryEntry containing the template.\n */\n WebpackLoader.prototype.loadTemplate = function (url) {\n return this.loadModule(this.applyPluginToUrl(url, 'template-registry-entry'), false);\n };\n /**\n * Loads a text-based resource.\n * @param url The url of the text file to load.\n * @return A Promise for text content.\n */\n WebpackLoader.prototype.loadText = function (url) {\n return __awaiter(this, void 0, void 0, function () {\n var result, defaultExport;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.loadModule(url, false)];\n case 1:\n result = _a.sent();\n defaultExport = result && result.__esModule ? result.default : result;\n if (defaultExport instanceof Array && defaultExport[0] instanceof Array && defaultExport.hasOwnProperty('toString')) {\n // we're dealing with a file loaded using the css-loader:\n return [2 /*return*/, defaultExport.toString()];\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n /**\n * Alters a module id so that it includes a plugin loader.\n * @param url The url of the module to load.\n * @param pluginName The plugin to apply to the module id.\n * @return The plugin-based module id.\n */\n WebpackLoader.prototype.applyPluginToUrl = function (url, pluginName) {\n return pluginName + \"!\" + url;\n };\n /**\n * Registers a plugin with the loader.\n * @param pluginName The name of the plugin.\n * @param implementation The plugin implementation.\n */\n WebpackLoader.prototype.addPlugin = function (pluginName, implementation) {\n this.loaderPlugins[pluginName] = implementation;\n };\n return WebpackLoader;\n}(aurelia_loader__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"]));\n\naurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"PLATFORM\"].Loader = WebpackLoader;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! bluebird */ \"./node_modules/bluebird/js/browser/bluebird.js-exposed\"), __webpack_require__(/*! ./../../../webpack/buildin/harmony-module.js */ \"./node_modules/webpack/buildin/harmony-module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1sb2FkZXItd2VicGFjay9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtbG9hZGVyLXdlYnBhY2suanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1sb2FkZXItd2VicGFjay9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtbG9hZGVyLXdlYnBhY2suanM/ZTYzYyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5pbXBvcnQgeyBPcmlnaW4gfSBmcm9tICdhdXJlbGlhLW1ldGFkYXRhJztcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJ2F1cmVsaWEtbG9hZGVyJztcbmltcG9ydCB7IERPTSwgUExBVEZPUk0gfSBmcm9tICdhdXJlbGlhLXBhbCc7XG4vKipcbiogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRlbXBsYXRlTG9hZGVyIGludGVyZmFjZSBpbXBsZW1lbnRlZCB3aXRoIHRleHQtYmFzZWQgbG9hZGluZy5cbiovXG52YXIgVGV4dFRlbXBsYXRlTG9hZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRleHRUZW1wbGF0ZUxvYWRlcigpIHtcbiAgICB9XG4gICAgLyoqXG4gICAgKiBMb2FkcyBhIHRlbXBsYXRlLlxuICAgICogQHBhcmFtIGxvYWRlciBUaGUgbG9hZGVyIHRoYXQgaXMgcmVxdWVzdGluZyB0aGUgdGVtcGxhdGUgbG9hZC5cbiAgICAqIEBwYXJhbSBlbnRyeSBUaGUgVGVtcGxhdGVSZWdpc3RyeUVudHJ5IHRvIGxvYWQgYW5kIHBvcHVsYXRlIHdpdGggYSB0ZW1wbGF0ZS5cbiAgICAqIEByZXR1cm4gQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gdGhlIFRlbXBsYXRlUmVnaXN0cnlFbnRyeSBpcyBsb2FkZWQgd2l0aCBhIHRlbXBsYXRlLlxuICAgICovXG4gICAgVGV4dFRlbXBsYXRlTG9hZGVyLnByb3RvdHlwZS5sb2FkVGVtcGxhdGUgPSBmdW5jdGlvbiAobG9hZGVyLCBlbnRyeSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGV4dDtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgbG9hZGVyLmxvYWRUZXh0KGVudHJ5LmFkZHJlc3MpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnRlbXBsYXRlID0gRE9NLmNyZWF0ZVRlbXBsYXRlRnJvbU1hcmt1cCh0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gVGV4dFRlbXBsYXRlTG9hZGVyO1xufSgpKTtcbmV4cG9ydCB7IFRleHRUZW1wbGF0ZUxvYWRlciB9O1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU9yaWdpbk9uRXhwb3J0cyhtb2R1bGVFeHBvcnRzLCBtb2R1bGVJZCkge1xuICAgIHZhciB0YXJnZXQgPSBtb2R1bGVFeHBvcnRzO1xuICAgIHZhciBrZXk7XG4gICAgdmFyIGV4cG9ydGVkVmFsdWU7XG4gICAgaWYgKHRhcmdldC5fX3VzZURlZmF1bHQpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmRlZmF1bHQ7XG4gICAgfVxuICAgIE9yaWdpbi5zZXQodGFyZ2V0LCBuZXcgT3JpZ2luKG1vZHVsZUlkLCAnZGVmYXVsdCcpKTtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydGVkVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBPcmlnaW4uc2V0KGV4cG9ydGVkVmFsdWUsIG5ldyBPcmlnaW4obW9kdWxlSWQsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xufVxuLyoqXG4qIEEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTG9hZGVyIGFic3RyYWN0aW9uIHdoaWNoIHdvcmtzIHdpdGggd2VicGFjayAoZXh0ZW5kZWQgY29tbW9uLWpzIHN0eWxlKS5cbiovXG52YXIgV2VicGFja0xvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoV2VicGFja0xvYWRlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBXZWJwYWNrTG9hZGVyKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5tb2R1bGVSZWdpc3RyeSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIF90aGlzLmxvYWRlclBsdWdpbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBfdGhpcy5tb2R1bGVzQmVpbmdMb2FkZWQgPSBuZXcgTWFwKCk7XG4gICAgICAgIF90aGlzLnVzZVRlbXBsYXRlTG9hZGVyKG5ldyBUZXh0VGVtcGxhdGVMb2FkZXIoKSk7XG4gICAgICAgIF90aGlzLmFkZFBsdWdpbigndGVtcGxhdGUtcmVnaXN0cnktZW50cnknLCB7XG4gICAgICAgICAgICBmZXRjaDogZnVuY3Rpb24gKG1vZHVsZUlkKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIEhtckNvbnRleHQsIGVudHJ5O1xuICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSE1SOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2R1bGUuaG90KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5obXJDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIbXJDb250ZXh0ID0gcmVxdWlyZSgnYXVyZWxpYS1ob3QtbW9kdWxlLXJlbG9hZCcpLkhtckNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhtckNvbnRleHQgPSBuZXcgSG1yQ29udGV4dCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuaG90LmFjY2VwdChtb2R1bGVJZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmhtckNvbnRleHQuaGFuZGxlVmlld0NoYW5nZShtb2R1bGVJZCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgPSB0aGlzLmdldE9yQ3JlYXRlVGVtcGxhdGVSZWdpc3RyeUVudHJ5KG1vZHVsZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFlbnRyeS50ZW1wbGF0ZUlzTG9hZGVkKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnRlbXBsYXRlTG9hZGVyLmxvYWRUZW1wbGF0ZSh0aGlzLCBlbnRyeSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBlbnRyeV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyB9XG4gICAgICAgIH0pO1xuICAgICAgICBQTEFURk9STS5lYWNoTW9kdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcmVnaXN0cnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmM7XG4gICAgICAgICAgICB2YXIgY2FjaGVkTW9kdWxlSWRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocmVnaXN0cnkpO1xuICAgICAgICAgICAgY2FjaGVkTW9kdWxlSWRzXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogd2UgdXNlIC5zb21lIGhlcmUgbGlrZSBhIC5mb3JFYWNoIHRoYXQgY2FuIGJlIFwiYnJlYWtcImVkIG91dCBvZi5cbiAgICAgICAgICAgICAgICAvLyBJdCB3aWxsIHN0b3AgaXRlcmF0aW5nIG9ubHkgd2hlbiBhIHRydXRoeSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCB0aGUgZG9jcyBzYXkgXCJ0cnVlXCIgZXhwbGljaXRseSwgbG9hZGVyLWRlZmF1bHQgYWxzbyBnb2VzIGJ5IHRydXRoeVxuICAgICAgICAgICAgICAgIC8vIGFuZCB0aGlzIGlzIHRvIGtlZXAgaXQgY29uc2lzdGVudCB3aXRoIHRoYXQuXG4gICAgICAgICAgICAgICAgLnNvbWUoZnVuY3Rpb24gKG1vZHVsZUlkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vZHVsZUV4cG9ydHMgPSByZWdpc3RyeVttb2R1bGVJZF0uZXhwb3J0cztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZUV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhtb2R1bGVJZCwgbW9kdWxlRXhwb3J0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFdlYnBhY2tMb2FkZXIucHJvdG90eXBlLl9pbXBvcnQgPSBmdW5jdGlvbiAoYWRkcmVzcywgZGVmYXVsdEhNUikge1xuICAgICAgICBpZiAoZGVmYXVsdEhNUiA9PT0gdm9pZCAwKSB7IGRlZmF1bHRITVIgPSB0cnVlOyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhZGRyZXNzUGFydHMsIG1vZHVsZUlkLCBsb2FkZXJQbHVnaW4sIHBsdWdpbl8xLCBhc3luY01vZHVsZUlkLCBjYWxsYmFjaztcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzUGFydHMgPSBhZGRyZXNzLnNwbGl0KCchJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVJZCA9IGFkZHJlc3NQYXJ0cy5zcGxpY2UoYWRkcmVzc1BhcnRzLmxlbmd0aCAtIDEsIDEpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyUGx1Z2luID0gYWRkcmVzc1BhcnRzLmxlbmd0aCA9PT0gMSA/IGFkZHJlc3NQYXJ0c1swXSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvYWRlclBsdWdpbikgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5fMSA9IHRoaXMubG9hZGVyUGx1Z2luc1tsb2FkZXJQbHVnaW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwbHVnaW5fMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsdWdpbiBcIiArIGxvYWRlclBsdWdpbiArIFwiIGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBsb2FkZXIuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZHVsZS5ob3QgJiYgcGx1Z2luXzEuaG90KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmhvdC5hY2NlcHQobW9kdWxlSWQsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsdWdpbl8xLmhvdChtb2R1bGVJZCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcGx1Z2luXzEuZmV0Y2gobW9kdWxlSWQpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Euc2VudCgpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdEhNUiAmJiBtb2R1bGUuaG90ICYmIHRoaXMuaG1yQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuaG90LmFjY2VwdChtb2R1bGVJZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuaG1yQ29udGV4dC5oYW5kbGVNb2R1bGVDaGFuZ2UobW9kdWxlSWQsIG1vZHVsZS5ob3QpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jTW9kdWxlSWQgPSBcImFzeW5jIVwiICsgbW9kdWxlSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fd2VicGFja19yZXF1aXJlX18ubVthc3luY01vZHVsZUlkXSkgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdEhNUiAmJiBtb2R1bGUuaG90ICYmIHRoaXMuaG1yQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5ob3QuYWNjZXB0KG1vZHVsZUlkLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5obXJDb250ZXh0LmhhbmRsZU1vZHVsZUNoYW5nZShtb2R1bGVJZCwgbW9kdWxlLmhvdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5ob3QuYWNjZXB0KGFzeW5jTW9kdWxlSWQsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmhtckNvbnRleHQuaGFuZGxlTW9kdWxlQ2hhbmdlKG1vZHVsZUlkLCBtb2R1bGUuaG90KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IF9fd2VicGFja19yZXF1aXJlX18oYXN5bmNNb2R1bGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBuZXcgUHJvbWlzZShjYWxsYmFjayldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovLCBfYS5zZW50KCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG1vZHVsZSB3aXRoIElEOiBcIiArIG1vZHVsZUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAqIE1hcHMgYSBtb2R1bGUgaWQgdG8gYSBzb3VyY2UuXG4gICAgKiBAcGFyYW0gaWQgVGhlIG1vZHVsZSBpZC5cbiAgICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSB0byBtYXAgdGhlIG1vZHVsZSB0by5cbiAgICAqL1xuICAgIFdlYnBhY2tMb2FkZXIucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChpZCwgc291cmNlKSB7IH07XG4gICAgLyoqXG4gICAgKiBOb3JtYWxpemVzIGEgbW9kdWxlIGlkLlxuICAgICogQHBhcmFtIG1vZHVsZUlkIFRoZSBtb2R1bGUgaWQgdG8gbm9ybWFsaXplLlxuICAgICogQHBhcmFtIHJlbGF0aXZlVG8gV2hhdCB0aGUgbW9kdWxlIGlkIHNob3VsZCBiZSBub3JtYWxpemVkIHJlbGF0aXZlIHRvLlxuICAgICogQHJldHVybiBUaGUgbm9ybWFsaXplZCBtb2R1bGUgaWQuXG4gICAgKi9cbiAgICBXZWJwYWNrTG9hZGVyLnByb3RvdHlwZS5ub3JtYWxpemVTeW5jID0gZnVuY3Rpb24gKG1vZHVsZUlkLCByZWxhdGl2ZVRvKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVJZDtcbiAgICB9O1xuICAgIC8qKlxuICAgICogTm9ybWFsaXplcyBhIG1vZHVsZSBpZC5cbiAgICAqIEBwYXJhbSBtb2R1bGVJZCBUaGUgbW9kdWxlIGlkIHRvIG5vcm1hbGl6ZS5cbiAgICAqIEBwYXJhbSByZWxhdGl2ZVRvIFdoYXQgdGhlIG1vZHVsZSBpZCBzaG91bGQgYmUgbm9ybWFsaXplZCByZWxhdGl2ZSB0by5cbiAgICAqIEByZXR1cm4gVGhlIG5vcm1hbGl6ZWQgbW9kdWxlIGlkLlxuICAgICovXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gKG1vZHVsZUlkLCByZWxhdGl2ZVRvKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobW9kdWxlSWQpO1xuICAgIH07XG4gICAgLyoqXG4gICAgKiBJbnN0cnVjdHMgdGhlIGxvYWRlciB0byB1c2UgYSBzcGVjaWZpYyBUZW1wbGF0ZUxvYWRlciBpbnN0YW5jZSBmb3IgbG9hZGluZyB0ZW1wbGF0ZXNcbiAgICAqIEBwYXJhbSB0ZW1wbGF0ZUxvYWRlciBUaGUgaW5zdGFuY2Ugb2YgVGVtcGxhdGVMb2FkZXIgdG8gdXNlIGZvciBsb2FkaW5nIHRlbXBsYXRlcy5cbiAgICAqL1xuICAgIFdlYnBhY2tMb2FkZXIucHJvdG90eXBlLnVzZVRlbXBsYXRlTG9hZGVyID0gZnVuY3Rpb24gKHRlbXBsYXRlTG9hZGVyKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVMb2FkZXIgPSB0ZW1wbGF0ZUxvYWRlcjtcbiAgICB9O1xuICAgIC8qKlxuICAgICogTG9hZHMgYSBjb2xsZWN0aW9uIG9mIG1vZHVsZXMuXG4gICAgKiBAcGFyYW0gaWRzIFRoZSBzZXQgb2YgbW9kdWxlIGlkcyB0byBsb2FkLlxuICAgICogQHJldHVybiBBIFByb21pc2UgZm9yIGFuIGFycmF5IG9mIGxvYWRlZCBtb2R1bGVzLlxuICAgICovXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUubG9hZEFsbE1vZHVsZXMgPSBmdW5jdGlvbiAoaWRzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChpZHMubWFwKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gX3RoaXMubG9hZE1vZHVsZShpZCk7IH0pKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICogTG9hZHMgYSBtb2R1bGUuXG4gICAgKiBAcGFyYW0gbW9kdWxlSWQgVGhlIG1vZHVsZSBJRCB0byBsb2FkLlxuICAgICogQHJldHVybiBBIFByb21pc2UgZm9yIHRoZSBsb2FkZWQgbW9kdWxlLlxuICAgICovXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUubG9hZE1vZHVsZSA9IGZ1bmN0aW9uIChtb2R1bGVJZCwgZGVmYXVsdEhNUikge1xuICAgICAgICBpZiAoZGVmYXVsdEhNUiA9PT0gdm9pZCAwKSB7IGRlZmF1bHRITVIgPSB0cnVlOyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBleGlzdGluZywgYmVpbmdMb2FkZWQsIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyA9IHRoaXMubW9kdWxlUmVnaXN0cnlbbW9kdWxlSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGV4aXN0aW5nXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nTG9hZGVkID0gdGhpcy5tb2R1bGVzQmVpbmdMb2FkZWQuZ2V0KG1vZHVsZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWluZ0xvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBiZWluZ0xvYWRlZF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWluZ0xvYWRlZCA9IHRoaXMuX2ltcG9ydChtb2R1bGVJZCwgZGVmYXVsdEhNUik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNCZWluZ0xvYWRlZC5zZXQobW9kdWxlSWQsIGJlaW5nTG9hZGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGJlaW5nTG9hZGVkXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlRXhwb3J0cyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlUmVnaXN0cnlbbW9kdWxlSWRdID0gZW5zdXJlT3JpZ2luT25FeHBvcnRzKG1vZHVsZUV4cG9ydHMsIG1vZHVsZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc0JlaW5nTG9hZGVkLmRlbGV0ZShtb2R1bGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbW9kdWxlRXhwb3J0c107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgKiBMb2FkcyBhIHRlbXBsYXRlLlxuICAgICogQHBhcmFtIHVybCBUaGUgdXJsIG9mIHRoZSB0ZW1wbGF0ZSB0byBsb2FkLlxuICAgICogQHJldHVybiBBIFByb21pc2UgZm9yIGEgVGVtcGxhdGVSZWdpc3RyeUVudHJ5IGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlLlxuICAgICovXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUubG9hZFRlbXBsYXRlID0gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkTW9kdWxlKHRoaXMuYXBwbHlQbHVnaW5Ub1VybCh1cmwsICd0ZW1wbGF0ZS1yZWdpc3RyeS1lbnRyeScpLCBmYWxzZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAqIExvYWRzIGEgdGV4dC1iYXNlZCByZXNvdXJjZS5cbiAgICAqIEBwYXJhbSB1cmwgVGhlIHVybCBvZiB0aGUgdGV4dCBmaWxlIHRvIGxvYWQuXG4gICAgKiBAcmV0dXJuIEEgUHJvbWlzZSBmb3IgdGV4dCBjb250ZW50LlxuICAgICovXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUubG9hZFRleHQgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGRlZmF1bHRFeHBvcnQ7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMubG9hZE1vZHVsZSh1cmwsIGZhbHNlKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRFeHBvcnQgPSByZXN1bHQgJiYgcmVzdWx0Ll9fZXNNb2R1bGUgPyByZXN1bHQuZGVmYXVsdCA6IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0RXhwb3J0IGluc3RhbmNlb2YgQXJyYXkgJiYgZGVmYXVsdEV4cG9ydFswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGRlZmF1bHRFeHBvcnQuaGFzT3duUHJvcGVydHkoJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmaWxlIGxvYWRlZCB1c2luZyB0aGUgY3NzLWxvYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGVmYXVsdEV4cG9ydC50b1N0cmluZygpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICogQWx0ZXJzIGEgbW9kdWxlIGlkIHNvIHRoYXQgaXQgaW5jbHVkZXMgYSBwbHVnaW4gbG9hZGVyLlxuICAgICogQHBhcmFtIHVybCBUaGUgdXJsIG9mIHRoZSBtb2R1bGUgdG8gbG9hZC5cbiAgICAqIEBwYXJhbSBwbHVnaW5OYW1lIFRoZSBwbHVnaW4gdG8gYXBwbHkgdG8gdGhlIG1vZHVsZSBpZC5cbiAgICAqIEByZXR1cm4gVGhlIHBsdWdpbi1iYXNlZCBtb2R1bGUgaWQuXG4gICAgKi9cbiAgICBXZWJwYWNrTG9hZGVyLnByb3RvdHlwZS5hcHBseVBsdWdpblRvVXJsID0gZnVuY3Rpb24gKHVybCwgcGx1Z2luTmFtZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luTmFtZSArIFwiIVwiICsgdXJsO1xuICAgIH07XG4gICAgLyoqXG4gICAgKiBSZWdpc3RlcnMgYSBwbHVnaW4gd2l0aCB0aGUgbG9hZGVyLlxuICAgICogQHBhcmFtIHBsdWdpbk5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi5cbiAgICAqIEBwYXJhbSBpbXBsZW1lbnRhdGlvbiBUaGUgcGx1Z2luIGltcGxlbWVudGF0aW9uLlxuICAgICovXG4gICAgV2VicGFja0xvYWRlci5wcm90b3R5cGUuYWRkUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHRoaXMubG9hZGVyUGx1Z2luc1twbHVnaW5OYW1lXSA9IGltcGxlbWVudGF0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIFdlYnBhY2tMb2FkZXI7XG59KExvYWRlcikpO1xuZXhwb3J0IHsgV2VicGFja0xvYWRlciB9O1xuUExBVEZPUk0uTG9hZGVyID0gV2VicGFja0xvYWRlcjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/aurelia-loader-webpack/dist/native-modules/aurelia-loader-webpack.js\n"); /***/ }), /***/ "./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js": /*!***************************************************************************!*\ !*** ./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js ***! \***************************************************************************/ /*! exports provided: TemplateDependency, TemplateRegistryEntry, Loader */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TemplateDependency\", function() { return TemplateDependency; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TemplateRegistryEntry\", function() { return TemplateRegistryEntry; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Loader\", function() { return Loader; });\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-path */ \"./node_modules/aurelia-path/dist/native-modules/aurelia-path.js\");\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aurelia-metadata */ \"./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n\n\n\n\n\nvar TemplateDependency = function TemplateDependency(src, name) {\n \n\n this.src = src;\n this.name = name;\n};\n\nvar TemplateRegistryEntry = function () {\n function TemplateRegistryEntry(address) {\n \n\n this.templateIsLoaded = false;\n this.factoryIsReady = false;\n this.resources = null;\n this.dependencies = null;\n\n this.address = address;\n this.onReady = null;\n this._template = null;\n this._factory = null;\n }\n\n TemplateRegistryEntry.prototype.addDependency = function addDependency(src, name) {\n var finalSrc = typeof src === 'string' ? Object(aurelia_path__WEBPACK_IMPORTED_MODULE_0__[\"relativeToFile\"])(src, this.address) : aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"Origin\"].get(src).moduleId;\n\n this.dependencies.push(new TemplateDependency(finalSrc, name));\n };\n\n _createClass(TemplateRegistryEntry, [{\n key: 'template',\n get: function get() {\n return this._template;\n },\n set: function set(value) {\n var address = this.address;\n var requires = void 0;\n var current = void 0;\n var src = void 0;\n var dependencies = void 0;\n\n this._template = value;\n this.templateIsLoaded = true;\n\n requires = value.content.querySelectorAll('require');\n dependencies = this.dependencies = new Array(requires.length);\n\n for (var i = 0, ii = requires.length; i < ii; ++i) {\n current = requires[i];\n src = current.getAttribute('from');\n\n if (!src) {\n throw new Error(' element in ' + address + ' has no \"from\" attribute.');\n }\n\n dependencies[i] = new TemplateDependency(Object(aurelia_path__WEBPACK_IMPORTED_MODULE_0__[\"relativeToFile\"])(src, address), current.getAttribute('as'));\n\n if (current.parentNode) {\n current.parentNode.removeChild(current);\n }\n }\n }\n }, {\n key: 'factory',\n get: function get() {\n return this._factory;\n },\n set: function set(value) {\n this._factory = value;\n this.factoryIsReady = true;\n }\n }]);\n\n return TemplateRegistryEntry;\n}();\n\nvar Loader = function () {\n function Loader() {\n \n\n this.templateRegistry = {};\n }\n\n Loader.prototype.map = function map(id, source) {\n throw new Error('Loaders must implement map(id, source).');\n };\n\n Loader.prototype.normalizeSync = function normalizeSync(moduleId, relativeTo) {\n throw new Error('Loaders must implement normalizeSync(moduleId, relativeTo).');\n };\n\n Loader.prototype.normalize = function normalize(moduleId, relativeTo) {\n throw new Error('Loaders must implement normalize(moduleId: string, relativeTo: string): Promise.');\n };\n\n Loader.prototype.loadModule = function loadModule(id) {\n throw new Error('Loaders must implement loadModule(id).');\n };\n\n Loader.prototype.loadAllModules = function loadAllModules(ids) {\n throw new Error('Loader must implement loadAllModules(ids).');\n };\n\n Loader.prototype.loadTemplate = function loadTemplate(url) {\n throw new Error('Loader must implement loadTemplate(url).');\n };\n\n Loader.prototype.loadText = function loadText(url) {\n throw new Error('Loader must implement loadText(url).');\n };\n\n Loader.prototype.applyPluginToUrl = function applyPluginToUrl(url, pluginName) {\n throw new Error('Loader must implement applyPluginToUrl(url, pluginName).');\n };\n\n Loader.prototype.addPlugin = function addPlugin(pluginName, implementation) {\n throw new Error('Loader must implement addPlugin(pluginName, implementation).');\n };\n\n Loader.prototype.getOrCreateTemplateRegistryEntry = function getOrCreateTemplateRegistryEntry(address) {\n return this.templateRegistry[address] || (this.templateRegistry[address] = new TemplateRegistryEntry(address));\n };\n\n return Loader;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1sb2FkZXIvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLWxvYWRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hdXJlbGlhLWxvYWRlci9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtbG9hZGVyLmpzPzY1ZDUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuXG5cbmltcG9ydCB7IHJlbGF0aXZlVG9GaWxlIH0gZnJvbSAnYXVyZWxpYS1wYXRoJztcbmltcG9ydCB7IE9yaWdpbiB9IGZyb20gJ2F1cmVsaWEtbWV0YWRhdGEnO1xuXG5leHBvcnQgdmFyIFRlbXBsYXRlRGVwZW5kZW5jeSA9IGZ1bmN0aW9uIFRlbXBsYXRlRGVwZW5kZW5jeShzcmMsIG5hbWUpIHtcbiAgXG5cbiAgdGhpcy5zcmMgPSBzcmM7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG59O1xuXG5leHBvcnQgdmFyIFRlbXBsYXRlUmVnaXN0cnlFbnRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVGVtcGxhdGVSZWdpc3RyeUVudHJ5KGFkZHJlc3MpIHtcbiAgICBcblxuICAgIHRoaXMudGVtcGxhdGVJc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmFjdG9yeUlzUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLnJlc291cmNlcyA9IG51bGw7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuXG4gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLm9uUmVhZHkgPSBudWxsO1xuICAgIHRoaXMuX3RlbXBsYXRlID0gbnVsbDtcbiAgICB0aGlzLl9mYWN0b3J5ID0gbnVsbDtcbiAgfVxuXG4gIFRlbXBsYXRlUmVnaXN0cnlFbnRyeS5wcm90b3R5cGUuYWRkRGVwZW5kZW5jeSA9IGZ1bmN0aW9uIGFkZERlcGVuZGVuY3koc3JjLCBuYW1lKSB7XG4gICAgdmFyIGZpbmFsU3JjID0gdHlwZW9mIHNyYyA9PT0gJ3N0cmluZycgPyByZWxhdGl2ZVRvRmlsZShzcmMsIHRoaXMuYWRkcmVzcykgOiBPcmlnaW4uZ2V0KHNyYykubW9kdWxlSWQ7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5wdXNoKG5ldyBUZW1wbGF0ZURlcGVuZGVuY3koZmluYWxTcmMsIG5hbWUpKTtcbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoVGVtcGxhdGVSZWdpc3RyeUVudHJ5LCBbe1xuICAgIGtleTogJ3RlbXBsYXRlJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICB2YXIgYWRkcmVzcyA9IHRoaXMuYWRkcmVzcztcbiAgICAgIHZhciByZXF1aXJlcyA9IHZvaWQgMDtcbiAgICAgIHZhciBjdXJyZW50ID0gdm9pZCAwO1xuICAgICAgdmFyIHNyYyA9IHZvaWQgMDtcbiAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbiAgICAgIHRoaXMuX3RlbXBsYXRlID0gdmFsdWU7XG4gICAgICB0aGlzLnRlbXBsYXRlSXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgICByZXF1aXJlcyA9IHZhbHVlLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgncmVxdWlyZScpO1xuICAgICAgZGVwZW5kZW5jaWVzID0gdGhpcy5kZXBlbmRlbmNpZXMgPSBuZXcgQXJyYXkocmVxdWlyZXMubGVuZ3RoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcmVxdWlyZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBjdXJyZW50ID0gcmVxdWlyZXNbaV07XG4gICAgICAgIHNyYyA9IGN1cnJlbnQuZ2V0QXR0cmlidXRlKCdmcm9tJyk7XG5cbiAgICAgICAgaWYgKCFzcmMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJzxyZXF1aXJlPiBlbGVtZW50IGluICcgKyBhZGRyZXNzICsgJyBoYXMgbm8gXCJmcm9tXCIgYXR0cmlidXRlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kZW5jaWVzW2ldID0gbmV3IFRlbXBsYXRlRGVwZW5kZW5jeShyZWxhdGl2ZVRvRmlsZShzcmMsIGFkZHJlc3MpLCBjdXJyZW50LmdldEF0dHJpYnV0ZSgnYXMnKSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGN1cnJlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2ZhY3RvcnknLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZhY3Rvcnk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5fZmFjdG9yeSA9IHZhbHVlO1xuICAgICAgdGhpcy5mYWN0b3J5SXNSZWFkeSA9IHRydWU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRlbXBsYXRlUmVnaXN0cnlFbnRyeTtcbn0oKTtcblxuZXhwb3J0IHZhciBMb2FkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExvYWRlcigpIHtcbiAgICBcblxuICAgIHRoaXMudGVtcGxhdGVSZWdpc3RyeSA9IHt9O1xuICB9XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoaWQsIHNvdXJjZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVycyBtdXN0IGltcGxlbWVudCBtYXAoaWQsIHNvdXJjZSkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5ub3JtYWxpemVTeW5jID0gZnVuY3Rpb24gbm9ybWFsaXplU3luYyhtb2R1bGVJZCwgcmVsYXRpdmVUbykge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVycyBtdXN0IGltcGxlbWVudCBub3JtYWxpemVTeW5jKG1vZHVsZUlkLCByZWxhdGl2ZVRvKS4nKTtcbiAgfTtcblxuICBMb2FkZXIucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZShtb2R1bGVJZCwgcmVsYXRpdmVUbykge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVycyBtdXN0IGltcGxlbWVudCBub3JtYWxpemUobW9kdWxlSWQ6IHN0cmluZywgcmVsYXRpdmVUbzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+LicpO1xuICB9O1xuXG4gIExvYWRlci5wcm90b3R5cGUubG9hZE1vZHVsZSA9IGZ1bmN0aW9uIGxvYWRNb2R1bGUoaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWRlcnMgbXVzdCBpbXBsZW1lbnQgbG9hZE1vZHVsZShpZCkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5sb2FkQWxsTW9kdWxlcyA9IGZ1bmN0aW9uIGxvYWRBbGxNb2R1bGVzKGlkcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVyIG11c3QgaW1wbGVtZW50IGxvYWRBbGxNb2R1bGVzKGlkcykuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5sb2FkVGVtcGxhdGUgPSBmdW5jdGlvbiBsb2FkVGVtcGxhdGUodXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2FkZXIgbXVzdCBpbXBsZW1lbnQgbG9hZFRlbXBsYXRlKHVybCkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5sb2FkVGV4dCA9IGZ1bmN0aW9uIGxvYWRUZXh0KHVybCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9hZGVyIG11c3QgaW1wbGVtZW50IGxvYWRUZXh0KHVybCkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5hcHBseVBsdWdpblRvVXJsID0gZnVuY3Rpb24gYXBwbHlQbHVnaW5Ub1VybCh1cmwsIHBsdWdpbk5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWRlciBtdXN0IGltcGxlbWVudCBhcHBseVBsdWdpblRvVXJsKHVybCwgcGx1Z2luTmFtZSkuJyk7XG4gIH07XG5cbiAgTG9hZGVyLnByb3RvdHlwZS5hZGRQbHVnaW4gPSBmdW5jdGlvbiBhZGRQbHVnaW4ocGx1Z2luTmFtZSwgaW1wbGVtZW50YXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWRlciBtdXN0IGltcGxlbWVudCBhZGRQbHVnaW4ocGx1Z2luTmFtZSwgaW1wbGVtZW50YXRpb24pLicpO1xuICB9O1xuXG4gIExvYWRlci5wcm90b3R5cGUuZ2V0T3JDcmVhdGVUZW1wbGF0ZVJlZ2lzdHJ5RW50cnkgPSBmdW5jdGlvbiBnZXRPckNyZWF0ZVRlbXBsYXRlUmVnaXN0cnlFbnRyeShhZGRyZXNzKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVSZWdpc3RyeVthZGRyZXNzXSB8fCAodGhpcy50ZW1wbGF0ZVJlZ2lzdHJ5W2FkZHJlc3NdID0gbmV3IFRlbXBsYXRlUmVnaXN0cnlFbnRyeShhZGRyZXNzKSk7XG4gIH07XG5cbiAgcmV0dXJuIExvYWRlcjtcbn0oKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js\n"); /***/ }), /***/ "./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js": /*!*****************************************************************************!*\ !*** ./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js ***! \*****************************************************************************/ /*! exports provided: logLevel, getLogger, addAppender, removeAppender, getAppenders, clearAppenders, addCustomLevel, removeCustomLevel, setLevel, getLevel, Logger */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"logLevel\", function() { return logLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLogger\", function() { return getLogger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addAppender\", function() { return addAppender; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeAppender\", function() { return removeAppender; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getAppenders\", function() { return getAppenders; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clearAppenders\", function() { return clearAppenders; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addCustomLevel\", function() { return addCustomLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeCustomLevel\", function() { return removeCustomLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setLevel\", function() { return setLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLevel\", function() { return getLevel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Logger\", function() { return Logger; });\n\n\nvar logLevel = {\n none: 0,\n error: 10,\n warn: 20,\n info: 30,\n debug: 40\n};\n\nvar loggers = {};\nvar appenders = [];\nvar globalDefaultLevel = logLevel.none;\n\nvar standardLevels = ['none', 'error', 'warn', 'info', 'debug'];\nfunction isStandardLevel(level) {\n return standardLevels.filter(function (l) {\n return l === level;\n }).length > 0;\n}\n\nfunction appendArgs() {\n return [this].concat(Array.prototype.slice.call(arguments));\n}\n\nfunction logFactory(level) {\n var threshold = logLevel[level];\n return function () {\n if (this.level < threshold) {\n return;\n }\n\n var args = appendArgs.apply(this, arguments);\n var i = appenders.length;\n while (i--) {\n var _appenders$i;\n\n (_appenders$i = appenders[i])[level].apply(_appenders$i, args);\n }\n };\n}\n\nfunction logFactoryCustom(level) {\n var threshold = logLevel[level];\n return function () {\n if (this.level < threshold) {\n return;\n }\n\n var args = appendArgs.apply(this, arguments);\n var i = appenders.length;\n while (i--) {\n var appender = appenders[i];\n if (appender[level] !== undefined) {\n appender[level].apply(appender, args);\n }\n }\n };\n}\n\nfunction connectLoggers() {\n var proto = Logger.prototype;\n for (var _level in logLevel) {\n if (isStandardLevel(_level)) {\n if (_level !== 'none') {\n proto[_level] = logFactory(_level);\n }\n } else {\n proto[_level] = logFactoryCustom(_level);\n }\n }\n}\n\nfunction disconnectLoggers() {\n var proto = Logger.prototype;\n for (var _level2 in logLevel) {\n if (_level2 !== 'none') {\n proto[_level2] = function () {};\n }\n }\n}\n\nfunction getLogger(id) {\n return loggers[id] || new Logger(id);\n}\n\nfunction addAppender(appender) {\n if (appenders.push(appender) === 1) {\n connectLoggers();\n }\n}\n\nfunction removeAppender(appender) {\n appenders = appenders.filter(function (a) {\n return a !== appender;\n });\n}\n\nfunction getAppenders() {\n return [].concat(appenders);\n}\n\nfunction clearAppenders() {\n appenders = [];\n disconnectLoggers();\n}\n\nfunction addCustomLevel(name, value) {\n if (logLevel[name] !== undefined) {\n throw Error('Log level \"' + name + '\" already exists.');\n }\n\n if (isNaN(value)) {\n throw Error('Value must be a number.');\n }\n\n logLevel[name] = value;\n\n if (appenders.length > 0) {\n connectLoggers();\n } else {\n Logger.prototype[name] = function () {};\n }\n}\n\nfunction removeCustomLevel(name) {\n if (logLevel[name] === undefined) {\n return;\n }\n\n if (isStandardLevel(name)) {\n throw Error('Built-in log level \"' + name + '\" cannot be removed.');\n }\n\n delete logLevel[name];\n delete Logger.prototype[name];\n}\n\nfunction setLevel(level) {\n globalDefaultLevel = level;\n for (var key in loggers) {\n loggers[key].setLevel(level);\n }\n}\n\nfunction getLevel() {\n return globalDefaultLevel;\n}\n\nvar Logger = function () {\n function Logger(id) {\n \n\n var cached = loggers[id];\n if (cached) {\n return cached;\n }\n\n loggers[id] = this;\n this.id = id;\n this.level = globalDefaultLevel;\n }\n\n Logger.prototype.debug = function debug(message) {};\n\n Logger.prototype.info = function info(message) {};\n\n Logger.prototype.warn = function warn(message) {};\n\n Logger.prototype.error = function error(message) {};\n\n Logger.prototype.setLevel = function setLevel(level) {\n this.level = level;\n };\n\n Logger.prototype.isDebugEnabled = function isDebugEnabled() {\n return this.level === logLevel.debug;\n };\n\n return Logger;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1sb2dnaW5nL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1sb2dnaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtbG9nZ2luZy9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtbG9nZ2luZy5qcz8zMGZkIl0sInNvdXJjZXNDb250ZW50IjpbIlxuXG5leHBvcnQgdmFyIGxvZ0xldmVsID0ge1xuICBub25lOiAwLFxuICBlcnJvcjogMTAsXG4gIHdhcm46IDIwLFxuICBpbmZvOiAzMCxcbiAgZGVidWc6IDQwXG59O1xuXG52YXIgbG9nZ2VycyA9IHt9O1xudmFyIGFwcGVuZGVycyA9IFtdO1xudmFyIGdsb2JhbERlZmF1bHRMZXZlbCA9IGxvZ0xldmVsLm5vbmU7XG5cbnZhciBzdGFuZGFyZExldmVscyA9IFsnbm9uZScsICdlcnJvcicsICd3YXJuJywgJ2luZm8nLCAnZGVidWcnXTtcbmZ1bmN0aW9uIGlzU3RhbmRhcmRMZXZlbChsZXZlbCkge1xuICByZXR1cm4gc3RhbmRhcmRMZXZlbHMuZmlsdGVyKGZ1bmN0aW9uIChsKSB7XG4gICAgcmV0dXJuIGwgPT09IGxldmVsO1xuICB9KS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRBcmdzKCkge1xuICByZXR1cm4gW3RoaXNdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbn1cblxuZnVuY3Rpb24gbG9nRmFjdG9yeShsZXZlbCkge1xuICB2YXIgdGhyZXNob2xkID0gbG9nTGV2ZWxbbGV2ZWxdO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxldmVsIDwgdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBhcHBlbmRBcmdzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGkgPSBhcHBlbmRlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhciBfYXBwZW5kZXJzJGk7XG5cbiAgICAgIChfYXBwZW5kZXJzJGkgPSBhcHBlbmRlcnNbaV0pW2xldmVsXS5hcHBseShfYXBwZW5kZXJzJGksIGFyZ3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nRmFjdG9yeUN1c3RvbShsZXZlbCkge1xuICB2YXIgdGhyZXNob2xkID0gbG9nTGV2ZWxbbGV2ZWxdO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxldmVsIDwgdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBhcHBlbmRBcmdzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGkgPSBhcHBlbmRlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhciBhcHBlbmRlciA9IGFwcGVuZGVyc1tpXTtcbiAgICAgIGlmIChhcHBlbmRlcltsZXZlbF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcHBlbmRlcltsZXZlbF0uYXBwbHkoYXBwZW5kZXIsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29ubmVjdExvZ2dlcnMoKSB7XG4gIHZhciBwcm90byA9IExvZ2dlci5wcm90b3R5cGU7XG4gIGZvciAodmFyIF9sZXZlbCBpbiBsb2dMZXZlbCkge1xuICAgIGlmIChpc1N0YW5kYXJkTGV2ZWwoX2xldmVsKSkge1xuICAgICAgaWYgKF9sZXZlbCAhPT0gJ25vbmUnKSB7XG4gICAgICAgIHByb3RvW19sZXZlbF0gPSBsb2dGYWN0b3J5KF9sZXZlbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3RvW19sZXZlbF0gPSBsb2dGYWN0b3J5Q3VzdG9tKF9sZXZlbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RMb2dnZXJzKCkge1xuICB2YXIgcHJvdG8gPSBMb2dnZXIucHJvdG90eXBlO1xuICBmb3IgKHZhciBfbGV2ZWwyIGluIGxvZ0xldmVsKSB7XG4gICAgaWYgKF9sZXZlbDIgIT09ICdub25lJykge1xuICAgICAgcHJvdG9bX2xldmVsMl0gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcihpZCkge1xuICByZXR1cm4gbG9nZ2Vyc1tpZF0gfHwgbmV3IExvZ2dlcihpZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRBcHBlbmRlcihhcHBlbmRlcikge1xuICBpZiAoYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpID09PSAxKSB7XG4gICAgY29ubmVjdExvZ2dlcnMoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQXBwZW5kZXIoYXBwZW5kZXIpIHtcbiAgYXBwZW5kZXJzID0gYXBwZW5kZXJzLmZpbHRlcihmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiBhICE9PSBhcHBlbmRlcjtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBlbmRlcnMoKSB7XG4gIHJldHVybiBbXS5jb25jYXQoYXBwZW5kZXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQXBwZW5kZXJzKCkge1xuICBhcHBlbmRlcnMgPSBbXTtcbiAgZGlzY29ubmVjdExvZ2dlcnMoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEN1c3RvbUxldmVsKG5hbWUsIHZhbHVlKSB7XG4gIGlmIChsb2dMZXZlbFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0xvZyBsZXZlbCBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICB9XG5cbiAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgIHRocm93IEVycm9yKCdWYWx1ZSBtdXN0IGJlIGEgbnVtYmVyLicpO1xuICB9XG5cbiAgbG9nTGV2ZWxbbmFtZV0gPSB2YWx1ZTtcblxuICBpZiAoYXBwZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICBjb25uZWN0TG9nZ2VycygpO1xuICB9IGVsc2Uge1xuICAgIExvZ2dlci5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ3VzdG9tTGV2ZWwobmFtZSkge1xuICBpZiAobG9nTGV2ZWxbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc1N0YW5kYXJkTGV2ZWwobmFtZSkpIHtcbiAgICB0aHJvdyBFcnJvcignQnVpbHQtaW4gbG9nIGxldmVsIFwiJyArIG5hbWUgKyAnXCIgY2Fubm90IGJlIHJlbW92ZWQuJyk7XG4gIH1cblxuICBkZWxldGUgbG9nTGV2ZWxbbmFtZV07XG4gIGRlbGV0ZSBMb2dnZXIucHJvdG90eXBlW25hbWVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TGV2ZWwobGV2ZWwpIHtcbiAgZ2xvYmFsRGVmYXVsdExldmVsID0gbGV2ZWw7XG4gIGZvciAodmFyIGtleSBpbiBsb2dnZXJzKSB7XG4gICAgbG9nZ2Vyc1trZXldLnNldExldmVsKGxldmVsKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWwoKSB7XG4gIHJldHVybiBnbG9iYWxEZWZhdWx0TGV2ZWw7XG59XG5cbmV4cG9ydCB2YXIgTG9nZ2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMb2dnZXIoaWQpIHtcbiAgICBcblxuICAgIHZhciBjYWNoZWQgPSBsb2dnZXJzW2lkXTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIGxvZ2dlcnNbaWRdID0gdGhpcztcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5sZXZlbCA9IGdsb2JhbERlZmF1bHRMZXZlbDtcbiAgfVxuXG4gIExvZ2dlci5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiBkZWJ1ZyhtZXNzYWdlKSB7fTtcblxuICBMb2dnZXIucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHt9O1xuXG4gIExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uIHdhcm4obWVzc2FnZSkge307XG5cbiAgTG9nZ2VyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UpIHt9O1xuXG4gIExvZ2dlci5wcm90b3R5cGUuc2V0TGV2ZWwgPSBmdW5jdGlvbiBzZXRMZXZlbChsZXZlbCkge1xuICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgfTtcblxuICBMb2dnZXIucHJvdG90eXBlLmlzRGVidWdFbmFibGVkID0gZnVuY3Rpb24gaXNEZWJ1Z0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGV2ZWwgPT09IGxvZ0xldmVsLmRlYnVnO1xuICB9O1xuXG4gIHJldHVybiBMb2dnZXI7XG59KCk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js\n"); /***/ }), /***/ "./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js": /*!*******************************************************************************!*\ !*** ./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js ***! \*******************************************************************************/ /*! exports provided: metadata, Origin, decorators, deprecated, mixin, protocol */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"metadata\", function() { return metadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Origin\", function() { return Origin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"decorators\", function() { return decorators; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"deprecated\", function() { return deprecated; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mixin\", function() { return mixin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"protocol\", function() { return protocol; });\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\n\n\nfunction isObject(val) {\n return val && (typeof val === 'function' || (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object');\n}\n\nvar metadata = {\n resource: 'aurelia:resource',\n paramTypes: 'design:paramtypes',\n propertyType: 'design:type',\n properties: 'design:properties',\n get: function get(metadataKey, target, targetKey) {\n if (!isObject(target)) {\n return undefined;\n }\n var result = metadata.getOwn(metadataKey, target, targetKey);\n return result === undefined ? metadata.get(metadataKey, Object.getPrototypeOf(target), targetKey) : result;\n },\n getOwn: function getOwn(metadataKey, target, targetKey) {\n if (!isObject(target)) {\n return undefined;\n }\n return Reflect.getOwnMetadata(metadataKey, target, targetKey);\n },\n define: function define(metadataKey, metadataValue, target, targetKey) {\n Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n },\n getOrCreateOwn: function getOrCreateOwn(metadataKey, Type, target, targetKey) {\n var result = metadata.getOwn(metadataKey, target, targetKey);\n\n if (result === undefined) {\n result = new Type();\n Reflect.defineMetadata(metadataKey, result, target, targetKey);\n }\n\n return result;\n }\n};\n\nvar originStorage = new Map();\nvar unknownOrigin = Object.freeze({ moduleId: undefined, moduleMember: undefined });\n\nvar Origin = function () {\n function Origin(moduleId, moduleMember) {\n \n\n this.moduleId = moduleId;\n this.moduleMember = moduleMember;\n }\n\n Origin.get = function get(fn) {\n var origin = originStorage.get(fn);\n\n if (origin === undefined) {\n aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"PLATFORM\"].eachModule(function (key, value) {\n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n for (var name in value) {\n try {\n var exp = value[name];\n if (exp === fn) {\n originStorage.set(fn, origin = new Origin(key, name));\n return true;\n }\n } catch (e) {}\n }\n }\n\n if (value === fn) {\n originStorage.set(fn, origin = new Origin(key, 'default'));\n return true;\n }\n\n return false;\n });\n }\n\n return origin || unknownOrigin;\n };\n\n Origin.set = function set(fn, origin) {\n originStorage.set(fn, origin);\n };\n\n return Origin;\n}();\n\nfunction decorators() {\n for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n rest[_key] = arguments[_key];\n }\n\n var applicator = function applicator(target, key, descriptor) {\n var i = rest.length;\n\n if (key) {\n descriptor = descriptor || {\n value: target[key],\n writable: true,\n configurable: true,\n enumerable: true\n };\n\n while (i--) {\n descriptor = rest[i](target, key, descriptor) || descriptor;\n }\n\n Object.defineProperty(target, key, descriptor);\n } else {\n while (i--) {\n target = rest[i](target) || target;\n }\n }\n\n return target;\n };\n\n applicator.on = applicator;\n return applicator;\n}\n\nfunction deprecated(optionsOrTarget, maybeKey, maybeDescriptor) {\n function decorator(target, key, descriptor) {\n var methodSignature = target.constructor.name + '#' + key;\n var options = maybeKey ? {} : optionsOrTarget || {};\n var message = 'DEPRECATION - ' + methodSignature;\n\n if (typeof descriptor.value !== 'function') {\n throw new SyntaxError('Only methods can be marked as deprecated.');\n }\n\n if (options.message) {\n message += ' - ' + options.message;\n }\n\n return _extends({}, descriptor, {\n value: function deprecationWrapper() {\n if (options.error) {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n\n return descriptor.value.apply(this, arguments);\n }\n });\n }\n\n return maybeKey ? decorator(optionsOrTarget, maybeKey, maybeDescriptor) : decorator;\n}\n\nfunction mixin(behavior) {\n var instanceKeys = Object.keys(behavior);\n\n function _mixin(possible) {\n var decorator = function decorator(target) {\n var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n var i = instanceKeys.length;\n while (i--) {\n var property = instanceKeys[i];\n Object.defineProperty(resolvedTarget, property, {\n value: behavior[property],\n writable: true\n });\n }\n };\n\n return possible ? decorator(possible) : decorator;\n }\n\n return _mixin;\n}\n\nfunction alwaysValid() {\n return true;\n}\nfunction noCompose() {}\n\nfunction ensureProtocolOptions(options) {\n if (options === undefined) {\n options = {};\n } else if (typeof options === 'function') {\n options = {\n validate: options\n };\n }\n\n if (!options.validate) {\n options.validate = alwaysValid;\n }\n\n if (!options.compose) {\n options.compose = noCompose;\n }\n\n return options;\n}\n\nfunction createProtocolValidator(validate) {\n return function (target) {\n var result = validate(target);\n return result === true;\n };\n}\n\nfunction createProtocolAsserter(name, validate) {\n return function (target) {\n var result = validate(target);\n if (result !== true) {\n throw new Error(result || name + ' was not correctly implemented.');\n }\n };\n}\n\nfunction protocol(name, options) {\n options = ensureProtocolOptions(options);\n\n var result = function result(target) {\n var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n options.compose(resolvedTarget);\n result.assert(resolvedTarget);\n\n Object.defineProperty(resolvedTarget, 'protocol:' + name, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: true\n });\n };\n\n result.validate = createProtocolValidator(options.validate);\n result.assert = createProtocolAsserter(name, options.validate);\n\n return result;\n}\n\nprotocol.create = function (name, options) {\n options = ensureProtocolOptions(options);\n var hidden = 'protocol:' + name;\n var result = function result(target) {\n var decorator = protocol(name, options);\n return target ? decorator(target) : decorator;\n };\n\n result.decorates = function (obj) {\n return obj[hidden] === true;\n };\n result.validate = createProtocolValidator(options.validate);\n result.assert = createProtocolAsserter(name, options.validate);\n\n return result;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1tZXRhZGF0YS9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtbWV0YWRhdGEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1tZXRhZGF0YS9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtbWV0YWRhdGEuanM/YWFiNyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cblxuXG5pbXBvcnQgeyBQTEFURk9STSB9IGZyb20gJ2F1cmVsaWEtcGFsJztcblxuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbCkpID09PSAnb2JqZWN0Jyk7XG59XG5cbmV4cG9ydCB2YXIgbWV0YWRhdGEgPSB7XG4gIHJlc291cmNlOiAnYXVyZWxpYTpyZXNvdXJjZScsXG4gIHBhcmFtVHlwZXM6ICdkZXNpZ246cGFyYW10eXBlcycsXG4gIHByb3BlcnR5VHlwZTogJ2Rlc2lnbjp0eXBlJyxcbiAgcHJvcGVydGllczogJ2Rlc2lnbjpwcm9wZXJ0aWVzJyxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQobWV0YWRhdGFLZXksIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgaWYgKCFpc09iamVjdCh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbWV0YWRhdGEuZ2V0T3duKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHRhcmdldEtleSk7XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gbWV0YWRhdGEuZ2V0KG1ldGFkYXRhS2V5LCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSwgdGFyZ2V0S2V5KSA6IHJlc3VsdDtcbiAgfSxcbiAgZ2V0T3duOiBmdW5jdGlvbiBnZXRPd24obWV0YWRhdGFLZXksIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgaWYgKCFpc09iamVjdCh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCB0YXJnZXRLZXkpO1xuICB9LFxuICBkZWZpbmU6IGZ1bmN0aW9uIGRlZmluZShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSk7XG4gIH0sXG4gIGdldE9yQ3JlYXRlT3duOiBmdW5jdGlvbiBnZXRPckNyZWF0ZU93bihtZXRhZGF0YUtleSwgVHlwZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gbWV0YWRhdGEuZ2V0T3duKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHRhcmdldEtleSk7XG5cbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IG5ldyBUeXBlKCk7XG4gICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCByZXN1bHQsIHRhcmdldCwgdGFyZ2V0S2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG52YXIgb3JpZ2luU3RvcmFnZSA9IG5ldyBNYXAoKTtcbnZhciB1bmtub3duT3JpZ2luID0gT2JqZWN0LmZyZWV6ZSh7IG1vZHVsZUlkOiB1bmRlZmluZWQsIG1vZHVsZU1lbWJlcjogdW5kZWZpbmVkIH0pO1xuXG5leHBvcnQgdmFyIE9yaWdpbiA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gT3JpZ2luKG1vZHVsZUlkLCBtb2R1bGVNZW1iZXIpIHtcbiAgICBcblxuICAgIHRoaXMubW9kdWxlSWQgPSBtb2R1bGVJZDtcbiAgICB0aGlzLm1vZHVsZU1lbWJlciA9IG1vZHVsZU1lbWJlcjtcbiAgfVxuXG4gIE9yaWdpbi5nZXQgPSBmdW5jdGlvbiBnZXQoZm4pIHtcbiAgICB2YXIgb3JpZ2luID0gb3JpZ2luU3RvcmFnZS5nZXQoZm4pO1xuXG4gICAgaWYgKG9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBQTEFURk9STS5lYWNoTW9kdWxlKGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBleHAgPSB2YWx1ZVtuYW1lXTtcbiAgICAgICAgICAgICAgaWYgKGV4cCA9PT0gZm4pIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5TdG9yYWdlLnNldChmbiwgb3JpZ2luID0gbmV3IE9yaWdpbihrZXksIG5hbWUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IGZuKSB7XG4gICAgICAgICAgb3JpZ2luU3RvcmFnZS5zZXQoZm4sIG9yaWdpbiA9IG5ldyBPcmlnaW4oa2V5LCAnZGVmYXVsdCcpKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW4gfHwgdW5rbm93bk9yaWdpbjtcbiAgfTtcblxuICBPcmlnaW4uc2V0ID0gZnVuY3Rpb24gc2V0KGZuLCBvcmlnaW4pIHtcbiAgICBvcmlnaW5TdG9yYWdlLnNldChmbiwgb3JpZ2luKTtcbiAgfTtcblxuICByZXR1cm4gT3JpZ2luO1xufSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdG9ycygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIGFwcGxpY2F0b3IgPSBmdW5jdGlvbiBhcHBsaWNhdG9yKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgdmFyIGkgPSByZXN0Lmxlbmd0aDtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yIHx8IHtcbiAgICAgICAgdmFsdWU6IHRhcmdldFtrZXldLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9O1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSByZXN0W2ldKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB8fCBkZXNjcmlwdG9yO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHRhcmdldCA9IHJlc3RbaV0odGFyZ2V0KSB8fCB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICBhcHBsaWNhdG9yLm9uID0gYXBwbGljYXRvcjtcbiAgcmV0dXJuIGFwcGxpY2F0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGVkKG9wdGlvbnNPclRhcmdldCwgbWF5YmVLZXksIG1heWJlRGVzY3JpcHRvcikge1xuICBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgICB2YXIgbWV0aG9kU2lnbmF0dXJlID0gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUgKyAnIycgKyBrZXk7XG4gICAgdmFyIG9wdGlvbnMgPSBtYXliZUtleSA/IHt9IDogb3B0aW9uc09yVGFyZ2V0IHx8IHt9O1xuICAgIHZhciBtZXNzYWdlID0gJ0RFUFJFQ0FUSU9OIC0gJyArIG1ldGhvZFNpZ25hdHVyZTtcblxuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdPbmx5IG1ldGhvZHMgY2FuIGJlIG1hcmtlZCBhcyBkZXByZWNhdGVkLicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBvcHRpb25zLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBkZXNjcmlwdG9yLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZGVwcmVjYXRpb25XcmFwcGVyKCkge1xuICAgICAgICBpZiAob3B0aW9ucy5lcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvci52YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG1heWJlS2V5ID8gZGVjb3JhdG9yKG9wdGlvbnNPclRhcmdldCwgbWF5YmVLZXksIG1heWJlRGVzY3JpcHRvcikgOiBkZWNvcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaXhpbihiZWhhdmlvcikge1xuICB2YXIgaW5zdGFuY2VLZXlzID0gT2JqZWN0LmtleXMoYmVoYXZpb3IpO1xuXG4gIGZ1bmN0aW9uIF9taXhpbihwb3NzaWJsZSkge1xuICAgIHZhciBkZWNvcmF0b3IgPSBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0KSB7XG4gICAgICB2YXIgcmVzb2x2ZWRUYXJnZXQgPSB0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nID8gdGFyZ2V0LnByb3RvdHlwZSA6IHRhcmdldDtcblxuICAgICAgdmFyIGkgPSBpbnN0YW5jZUtleXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBpbnN0YW5jZUtleXNbaV07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXNvbHZlZFRhcmdldCwgcHJvcGVydHksIHtcbiAgICAgICAgICB2YWx1ZTogYmVoYXZpb3JbcHJvcGVydHldLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcG9zc2libGUgPyBkZWNvcmF0b3IocG9zc2libGUpIDogZGVjb3JhdG9yO1xuICB9XG5cbiAgcmV0dXJuIF9taXhpbjtcbn1cblxuZnVuY3Rpb24gYWx3YXlzVmFsaWQoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gbm9Db21wb3NlKCkge31cblxuZnVuY3Rpb24gZW5zdXJlUHJvdG9jb2xPcHRpb25zKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICB2YWxpZGF0ZTogb3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBpZiAoIW9wdGlvbnMudmFsaWRhdGUpIHtcbiAgICBvcHRpb25zLnZhbGlkYXRlID0gYWx3YXlzVmFsaWQ7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMuY29tcG9zZSkge1xuICAgIG9wdGlvbnMuY29tcG9zZSA9IG5vQ29tcG9zZTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQcm90b2NvbFZhbGlkYXRvcih2YWxpZGF0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHZhciByZXN1bHQgPSB2YWxpZGF0ZSh0YXJnZXQpO1xuICAgIHJldHVybiByZXN1bHQgPT09IHRydWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVByb3RvY29sQXNzZXJ0ZXIobmFtZSwgdmFsaWRhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICB2YXIgcmVzdWx0ID0gdmFsaWRhdGUodGFyZ2V0KTtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0IHx8IG5hbWUgKyAnIHdhcyBub3QgY29ycmVjdGx5IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3RvY29sKG5hbWUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGVuc3VyZVByb3RvY29sT3B0aW9ucyhvcHRpb25zKTtcblxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24gcmVzdWx0KHRhcmdldCkge1xuICAgIHZhciByZXNvbHZlZFRhcmdldCA9IHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicgPyB0YXJnZXQucHJvdG90eXBlIDogdGFyZ2V0O1xuXG4gICAgb3B0aW9ucy5jb21wb3NlKHJlc29sdmVkVGFyZ2V0KTtcbiAgICByZXN1bHQuYXNzZXJ0KHJlc29sdmVkVGFyZ2V0KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXNvbHZlZFRhcmdldCwgJ3Byb3RvY29sOicgKyBuYW1lLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIHJlc3VsdC52YWxpZGF0ZSA9IGNyZWF0ZVByb3RvY29sVmFsaWRhdG9yKG9wdGlvbnMudmFsaWRhdGUpO1xuICByZXN1bHQuYXNzZXJ0ID0gY3JlYXRlUHJvdG9jb2xBc3NlcnRlcihuYW1lLCBvcHRpb25zLnZhbGlkYXRlKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5wcm90b2NvbC5jcmVhdGUgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gZW5zdXJlUHJvdG9jb2xPcHRpb25zKG9wdGlvbnMpO1xuICB2YXIgaGlkZGVuID0gJ3Byb3RvY29sOicgKyBuYW1lO1xuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24gcmVzdWx0KHRhcmdldCkge1xuICAgIHZhciBkZWNvcmF0b3IgPSBwcm90b2NvbChuYW1lLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGFyZ2V0ID8gZGVjb3JhdG9yKHRhcmdldCkgOiBkZWNvcmF0b3I7XG4gIH07XG5cbiAgcmVzdWx0LmRlY29yYXRlcyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqW2hpZGRlbl0gPT09IHRydWU7XG4gIH07XG4gIHJlc3VsdC52YWxpZGF0ZSA9IGNyZWF0ZVByb3RvY29sVmFsaWRhdG9yKG9wdGlvbnMudmFsaWRhdGUpO1xuICByZXN1bHQuYXNzZXJ0ID0gY3JlYXRlUHJvdG9jb2xBc3NlcnRlcihuYW1lLCBvcHRpb25zLnZhbGlkYXRlKTtcblxuICByZXR1cm4gcmVzdWx0O1xufTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js\n"); /***/ }), /***/ "./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js": /*!*********************************************************************!*\ !*** ./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js ***! \*********************************************************************/ /*! exports provided: AggregateError, FEATURE, PLATFORM, DOM, isInitialized, initializePAL, reset */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AggregateError\", function() { return AggregateError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FEATURE\", function() { return FEATURE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PLATFORM\", function() { return PLATFORM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOM\", function() { return DOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isInitialized\", function() { return isInitialized; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initializePAL\", function() { return initializePAL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reset\", function() { return reset; });\n\nfunction AggregateError(message, innerError, skipIfAlreadyAggregate) {\n if (innerError) {\n if (innerError.innerError && skipIfAlreadyAggregate) {\n return innerError;\n }\n\n var separator = '\\n------------------------------------------------\\n';\n\n message += separator + 'Inner Error:\\n';\n\n if (typeof innerError === 'string') {\n message += 'Message: ' + innerError;\n } else {\n if (innerError.message) {\n message += 'Message: ' + innerError.message;\n } else {\n message += 'Unknown Inner Error Type. Displaying Inner Error as JSON:\\n ' + JSON.stringify(innerError, null, ' ');\n }\n\n if (innerError.stack) {\n message += '\\nInner Error Stack:\\n' + innerError.stack;\n message += '\\nEnd Inner Error Stack';\n }\n }\n\n message += separator;\n }\n\n var e = new Error(message);\n if (innerError) {\n e.innerError = innerError;\n }\n\n return e;\n}\n\nvar FEATURE = {};\n\nvar PLATFORM = {\n noop: function noop() {},\n eachModule: function eachModule() {},\n moduleName: function (_moduleName) {\n function moduleName(_x) {\n return _moduleName.apply(this, arguments);\n }\n\n moduleName.toString = function () {\n return _moduleName.toString();\n };\n\n return moduleName;\n }(function (moduleName) {\n return moduleName;\n })\n};\n\nPLATFORM.global = function () {\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n return new Function('return this')();\n}();\n\nvar DOM = {};\nvar isInitialized = false;\n\nfunction initializePAL(callback) {\n if (isInitialized) {\n return;\n }\n isInitialized = true;\n if (typeof Object.getPropertyDescriptor !== 'function') {\n Object.getPropertyDescriptor = function (subject, name) {\n var pd = Object.getOwnPropertyDescriptor(subject, name);\n var proto = Object.getPrototypeOf(subject);\n while (typeof pd === 'undefined' && proto !== null) {\n pd = Object.getOwnPropertyDescriptor(proto, name);\n proto = Object.getPrototypeOf(proto);\n }\n return pd;\n };\n }\n\n callback(PLATFORM, FEATURE, DOM);\n}\nfunction reset() {\n isInitialized = false;\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1wYWwvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLXBhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hdXJlbGlhLXBhbC9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtcGFsLmpzP2VmNDMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IobWVzc2FnZSwgaW5uZXJFcnJvciwgc2tpcElmQWxyZWFkeUFnZ3JlZ2F0ZSkge1xuICBpZiAoaW5uZXJFcnJvcikge1xuICAgIGlmIChpbm5lckVycm9yLmlubmVyRXJyb3IgJiYgc2tpcElmQWxyZWFkeUFnZ3JlZ2F0ZSkge1xuICAgICAgcmV0dXJuIGlubmVyRXJyb3I7XG4gICAgfVxuXG4gICAgdmFyIHNlcGFyYXRvciA9ICdcXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4nO1xuXG4gICAgbWVzc2FnZSArPSBzZXBhcmF0b3IgKyAnSW5uZXIgRXJyb3I6XFxuJztcblxuICAgIGlmICh0eXBlb2YgaW5uZXJFcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1lc3NhZ2UgKz0gJ01lc3NhZ2U6ICcgKyBpbm5lckVycm9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5uZXJFcnJvci5tZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gJ01lc3NhZ2U6ICcgKyBpbm5lckVycm9yLm1lc3NhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlICs9ICdVbmtub3duIElubmVyIEVycm9yIFR5cGUuIERpc3BsYXlpbmcgSW5uZXIgRXJyb3IgYXMgSlNPTjpcXG4gJyArIEpTT04uc3RyaW5naWZ5KGlubmVyRXJyb3IsIG51bGwsICcgICcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5uZXJFcnJvci5zdGFjaykge1xuICAgICAgICBtZXNzYWdlICs9ICdcXG5Jbm5lciBFcnJvciBTdGFjazpcXG4nICsgaW5uZXJFcnJvci5zdGFjaztcbiAgICAgICAgbWVzc2FnZSArPSAnXFxuRW5kIElubmVyIEVycm9yIFN0YWNrJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZXNzYWdlICs9IHNlcGFyYXRvcjtcbiAgfVxuXG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBpZiAoaW5uZXJFcnJvcikge1xuICAgIGUuaW5uZXJFcnJvciA9IGlubmVyRXJyb3I7XG4gIH1cblxuICByZXR1cm4gZTtcbn1cblxuZXhwb3J0IHZhciBGRUFUVVJFID0ge307XG5cbmV4cG9ydCB2YXIgUExBVEZPUk0gPSB7XG4gIG5vb3A6IGZ1bmN0aW9uIG5vb3AoKSB7fSxcbiAgZWFjaE1vZHVsZTogZnVuY3Rpb24gZWFjaE1vZHVsZSgpIHt9LFxuICBtb2R1bGVOYW1lOiBmdW5jdGlvbiAoX21vZHVsZU5hbWUpIHtcbiAgICBmdW5jdGlvbiBtb2R1bGVOYW1lKF94KSB7XG4gICAgICByZXR1cm4gX21vZHVsZU5hbWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBtb2R1bGVOYW1lLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF9tb2R1bGVOYW1lLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBtb2R1bGVOYW1lO1xuICB9KGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7XG4gICAgcmV0dXJuIG1vZHVsZU5hbWU7XG4gIH0pXG59O1xuXG5QTEFURk9STS5nbG9iYWwgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBnbG9iYWw7XG4gIH1cblxuICByZXR1cm4gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59KCk7XG5cbmV4cG9ydCB2YXIgRE9NID0ge307XG5leHBvcnQgdmFyIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVQQUwoY2FsbGJhY2spIHtcbiAgaWYgKGlzSW5pdGlhbGl6ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIGlmICh0eXBlb2YgT2JqZWN0LmdldFByb3BlcnR5RGVzY3JpcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIE9iamVjdC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiAoc3ViamVjdCwgbmFtZSkge1xuICAgICAgdmFyIHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0LCBuYW1lKTtcbiAgICAgIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzdWJqZWN0KTtcbiAgICAgIHdoaWxlICh0eXBlb2YgcGQgPT09ICd1bmRlZmluZWQnICYmIHByb3RvICE9PSBudWxsKSB7XG4gICAgICAgIHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgbmFtZSk7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZDtcbiAgICB9O1xuICB9XG5cbiAgY2FsbGJhY2soUExBVEZPUk0sIEZFQVRVUkUsIERPTSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzZXQoKSB7XG4gIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\n"); /***/ }), /***/ "./node_modules/aurelia-path/dist/native-modules/aurelia-path.js": /*!***********************************************************************!*\ !*** ./node_modules/aurelia-path/dist/native-modules/aurelia-path.js ***! \***********************************************************************/ /*! exports provided: relativeToFile, join, buildQueryString, parseQueryString */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"relativeToFile\", function() { return relativeToFile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"join\", function() { return join; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"buildQueryString\", function() { return buildQueryString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseQueryString\", function() { return parseQueryString; });\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction trimDots(ary) {\n for (var i = 0; i < ary.length; ++i) {\n var part = ary[i];\n if (part === '.') {\n ary.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n if (i === 0 || i === 1 && ary[2] === '..' || ary[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n ary.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n}\n\nfunction relativeToFile(name, file) {\n var fileParts = file && file.split('/');\n var nameParts = name.trim().split('/');\n\n if (nameParts[0].charAt(0) === '.' && fileParts) {\n var normalizedBaseParts = fileParts.slice(0, fileParts.length - 1);\n nameParts.unshift.apply(nameParts, normalizedBaseParts);\n }\n\n trimDots(nameParts);\n\n return nameParts.join('/');\n}\n\nfunction join(path1, path2) {\n if (!path1) {\n return path2;\n }\n\n if (!path2) {\n return path1;\n }\n\n var schemeMatch = path1.match(/^([^/]*?:)\\//);\n var scheme = schemeMatch && schemeMatch.length > 0 ? schemeMatch[1] : '';\n path1 = path1.substr(scheme.length);\n\n var urlPrefix = void 0;\n if (path1.indexOf('///') === 0 && scheme === 'file:') {\n urlPrefix = '///';\n } else if (path1.indexOf('//') === 0) {\n urlPrefix = '//';\n } else if (path1.indexOf('/') === 0) {\n urlPrefix = '/';\n } else {\n urlPrefix = '';\n }\n\n var trailingSlash = path2.slice(-1) === '/' ? '/' : '';\n\n var url1 = path1.split('/');\n var url2 = path2.split('/');\n var url3 = [];\n\n for (var i = 0, ii = url1.length; i < ii; ++i) {\n if (url1[i] === '..') {\n if (url3.length && url3[url3.length - 1] !== '..') {\n url3.pop();\n } else {\n url3.push(url1[i]);\n }\n } else if (url1[i] === '.' || url1[i] === '') {\n continue;\n } else {\n url3.push(url1[i]);\n }\n }\n\n for (var _i = 0, _ii = url2.length; _i < _ii; ++_i) {\n if (url2[_i] === '..') {\n if (url3.length && url3[url3.length - 1] !== '..') {\n url3.pop();\n } else {\n url3.push(url2[_i]);\n }\n } else if (url2[_i] === '.' || url2[_i] === '') {\n continue;\n } else {\n url3.push(url2[_i]);\n }\n }\n\n return scheme + urlPrefix + url3.join('/') + trailingSlash;\n}\n\nvar encode = encodeURIComponent;\nvar encodeKey = function encodeKey(k) {\n return encode(k).replace('%24', '$');\n};\n\nfunction buildParam(key, value, traditional) {\n var result = [];\n if (value === null || value === undefined) {\n return result;\n }\n if (Array.isArray(value)) {\n for (var i = 0, l = value.length; i < l; i++) {\n if (traditional) {\n result.push(encodeKey(key) + '=' + encode(value[i]));\n } else {\n var arrayKey = key + '[' + (_typeof(value[i]) === 'object' && value[i] !== null ? i : '') + ']';\n result = result.concat(buildParam(arrayKey, value[i]));\n }\n }\n } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && !traditional) {\n for (var propertyName in value) {\n result = result.concat(buildParam(key + '[' + propertyName + ']', value[propertyName]));\n }\n } else {\n result.push(encodeKey(key) + '=' + encode(value));\n }\n return result;\n}\n\nfunction buildQueryString(params, traditional) {\n var pairs = [];\n var keys = Object.keys(params || {}).sort();\n for (var i = 0, len = keys.length; i < len; i++) {\n var key = keys[i];\n pairs = pairs.concat(buildParam(key, params[key], traditional));\n }\n\n if (pairs.length === 0) {\n return '';\n }\n\n return pairs.join('&');\n}\n\nfunction processScalarParam(existedParam, value) {\n if (Array.isArray(existedParam)) {\n existedParam.push(value);\n return existedParam;\n }\n if (existedParam !== undefined) {\n return [existedParam, value];\n }\n\n return value;\n}\n\nfunction parseComplexParam(queryParams, keys, value) {\n var currentParams = queryParams;\n var keysLastIndex = keys.length - 1;\n for (var j = 0; j <= keysLastIndex; j++) {\n var key = keys[j] === '' ? currentParams.length : keys[j];\n if (j < keysLastIndex) {\n var prevValue = !currentParams[key] || _typeof(currentParams[key]) === 'object' ? currentParams[key] : [currentParams[key]];\n currentParams = currentParams[key] = prevValue || (isNaN(keys[j + 1]) ? {} : []);\n } else {\n currentParams = currentParams[key] = value;\n }\n }\n}\n\nfunction parseQueryString(queryString) {\n var queryParams = {};\n if (!queryString || typeof queryString !== 'string') {\n return queryParams;\n }\n\n var query = queryString;\n if (query.charAt(0) === '?') {\n query = query.substr(1);\n }\n\n var pairs = query.replace(/\\+/g, ' ').split('&');\n for (var i = 0; i < pairs.length; i++) {\n var pair = pairs[i].split('=');\n var key = decodeURIComponent(pair[0]);\n if (!key) {\n continue;\n }\n\n var keys = key.split('][');\n var keysLastIndex = keys.length - 1;\n\n if (/\\[/.test(keys[0]) && /\\]$/.test(keys[keysLastIndex])) {\n keys[keysLastIndex] = keys[keysLastIndex].replace(/\\]$/, '');\n keys = keys.shift().split('[').concat(keys);\n keysLastIndex = keys.length - 1;\n } else {\n keysLastIndex = 0;\n }\n\n if (pair.length >= 2) {\n var value = pair[1] ? decodeURIComponent(pair[1]) : '';\n if (keysLastIndex) {\n parseComplexParam(queryParams, keys, value);\n } else {\n queryParams[key] = processScalarParam(queryParams[key], value);\n }\n } else {\n queryParams[key] = true;\n }\n }\n return queryParams;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1wYXRoL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1wYXRoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtcGF0aC9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtcGF0aC5qcz84ODNkIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnQgPSBhcnlbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgYXJ5LnNwbGljZShpLCAxKTtcbiAgICAgIGkgLT0gMTtcbiAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgIGlmIChpID09PSAwIHx8IGkgPT09IDEgJiYgYXJ5WzJdID09PSAnLi4nIHx8IGFyeVtpIC0gMV0gPT09ICcuLicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7XG4gICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpO1xuICAgICAgICBpIC09IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZVRvRmlsZShuYW1lLCBmaWxlKSB7XG4gIHZhciBmaWxlUGFydHMgPSBmaWxlICYmIGZpbGUuc3BsaXQoJy8nKTtcbiAgdmFyIG5hbWVQYXJ0cyA9IG5hbWUudHJpbSgpLnNwbGl0KCcvJyk7XG5cbiAgaWYgKG5hbWVQYXJ0c1swXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBmaWxlUGFydHMpIHtcbiAgICB2YXIgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGZpbGVQYXJ0cy5zbGljZSgwLCBmaWxlUGFydHMubGVuZ3RoIC0gMSk7XG4gICAgbmFtZVBhcnRzLnVuc2hpZnQuYXBwbHkobmFtZVBhcnRzLCBub3JtYWxpemVkQmFzZVBhcnRzKTtcbiAgfVxuXG4gIHRyaW1Eb3RzKG5hbWVQYXJ0cyk7XG5cbiAgcmV0dXJuIG5hbWVQYXJ0cy5qb2luKCcvJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luKHBhdGgxLCBwYXRoMikge1xuICBpZiAoIXBhdGgxKSB7XG4gICAgcmV0dXJuIHBhdGgyO1xuICB9XG5cbiAgaWYgKCFwYXRoMikge1xuICAgIHJldHVybiBwYXRoMTtcbiAgfVxuXG4gIHZhciBzY2hlbWVNYXRjaCA9IHBhdGgxLm1hdGNoKC9eKFteL10qPzopXFwvLyk7XG4gIHZhciBzY2hlbWUgPSBzY2hlbWVNYXRjaCAmJiBzY2hlbWVNYXRjaC5sZW5ndGggPiAwID8gc2NoZW1lTWF0Y2hbMV0gOiAnJztcbiAgcGF0aDEgPSBwYXRoMS5zdWJzdHIoc2NoZW1lLmxlbmd0aCk7XG5cbiAgdmFyIHVybFByZWZpeCA9IHZvaWQgMDtcbiAgaWYgKHBhdGgxLmluZGV4T2YoJy8vLycpID09PSAwICYmIHNjaGVtZSA9PT0gJ2ZpbGU6Jykge1xuICAgIHVybFByZWZpeCA9ICcvLy8nO1xuICB9IGVsc2UgaWYgKHBhdGgxLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICB1cmxQcmVmaXggPSAnLy8nO1xuICB9IGVsc2UgaWYgKHBhdGgxLmluZGV4T2YoJy8nKSA9PT0gMCkge1xuICAgIHVybFByZWZpeCA9ICcvJztcbiAgfSBlbHNlIHtcbiAgICB1cmxQcmVmaXggPSAnJztcbiAgfVxuXG4gIHZhciB0cmFpbGluZ1NsYXNoID0gcGF0aDIuc2xpY2UoLTEpID09PSAnLycgPyAnLycgOiAnJztcblxuICB2YXIgdXJsMSA9IHBhdGgxLnNwbGl0KCcvJyk7XG4gIHZhciB1cmwyID0gcGF0aDIuc3BsaXQoJy8nKTtcbiAgdmFyIHVybDMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgaWkgPSB1cmwxLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICBpZiAodXJsMVtpXSA9PT0gJy4uJykge1xuICAgICAgaWYgKHVybDMubGVuZ3RoICYmIHVybDNbdXJsMy5sZW5ndGggLSAxXSAhPT0gJy4uJykge1xuICAgICAgICB1cmwzLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsMy5wdXNoKHVybDFbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXJsMVtpXSA9PT0gJy4nIHx8IHVybDFbaV0gPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsMy5wdXNoKHVybDFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9pID0gMCwgX2lpID0gdXJsMi5sZW5ndGg7IF9pIDwgX2lpOyArK19pKSB7XG4gICAgaWYgKHVybDJbX2ldID09PSAnLi4nKSB7XG4gICAgICBpZiAodXJsMy5sZW5ndGggJiYgdXJsM1t1cmwzLmxlbmd0aCAtIDFdICE9PSAnLi4nKSB7XG4gICAgICAgIHVybDMucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwzLnB1c2godXJsMltfaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXJsMltfaV0gPT09ICcuJyB8fCB1cmwyW19pXSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmwzLnB1c2godXJsMltfaV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWUgKyB1cmxQcmVmaXggKyB1cmwzLmpvaW4oJy8nKSArIHRyYWlsaW5nU2xhc2g7XG59XG5cbnZhciBlbmNvZGUgPSBlbmNvZGVVUklDb21wb25lbnQ7XG52YXIgZW5jb2RlS2V5ID0gZnVuY3Rpb24gZW5jb2RlS2V5KGspIHtcbiAgcmV0dXJuIGVuY29kZShrKS5yZXBsYWNlKCclMjQnLCAnJCcpO1xufTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbShrZXksIHZhbHVlLCB0cmFkaXRpb25hbCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRyYWRpdGlvbmFsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZUtleShrZXkpICsgJz0nICsgZW5jb2RlKHZhbHVlW2ldKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXJyYXlLZXkgPSBrZXkgKyAnWycgKyAoX3R5cGVvZih2YWx1ZVtpXSkgPT09ICdvYmplY3QnICYmIHZhbHVlW2ldICE9PSBudWxsID8gaSA6ICcnKSArICddJztcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChidWlsZFBhcmFtKGFycmF5S2V5LCB2YWx1ZVtpXSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICgodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpID09PSAnb2JqZWN0JyAmJiAhdHJhZGl0aW9uYWwpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gdmFsdWUpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoYnVpbGRQYXJhbShrZXkgKyAnWycgKyBwcm9wZXJ0eU5hbWUgKyAnXScsIHZhbHVlW3Byb3BlcnR5TmFtZV0pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnB1c2goZW5jb2RlS2V5KGtleSkgKyAnPScgKyBlbmNvZGUodmFsdWUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRRdWVyeVN0cmluZyhwYXJhbXMsIHRyYWRpdGlvbmFsKSB7XG4gIHZhciBwYWlycyA9IFtdO1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyB8fCB7fSkuc29ydCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIHBhaXJzID0gcGFpcnMuY29uY2F0KGJ1aWxkUGFyYW0oa2V5LCBwYXJhbXNba2V5XSwgdHJhZGl0aW9uYWwpKTtcbiAgfVxuXG4gIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICByZXR1cm4gcGFpcnMuam9pbignJicpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzU2NhbGFyUGFyYW0oZXhpc3RlZFBhcmFtLCB2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGVkUGFyYW0pKSB7XG4gICAgZXhpc3RlZFBhcmFtLnB1c2godmFsdWUpO1xuICAgIHJldHVybiBleGlzdGVkUGFyYW07XG4gIH1cbiAgaWYgKGV4aXN0ZWRQYXJhbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFtleGlzdGVkUGFyYW0sIHZhbHVlXTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21wbGV4UGFyYW0ocXVlcnlQYXJhbXMsIGtleXMsIHZhbHVlKSB7XG4gIHZhciBjdXJyZW50UGFyYW1zID0gcXVlcnlQYXJhbXM7XG4gIHZhciBrZXlzTGFzdEluZGV4ID0ga2V5cy5sZW5ndGggLSAxO1xuICBmb3IgKHZhciBqID0gMDsgaiA8PSBrZXlzTGFzdEluZGV4OyBqKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tqXSA9PT0gJycgPyBjdXJyZW50UGFyYW1zLmxlbmd0aCA6IGtleXNbal07XG4gICAgaWYgKGogPCBrZXlzTGFzdEluZGV4KSB7XG4gICAgICB2YXIgcHJldlZhbHVlID0gIWN1cnJlbnRQYXJhbXNba2V5XSB8fCBfdHlwZW9mKGN1cnJlbnRQYXJhbXNba2V5XSkgPT09ICdvYmplY3QnID8gY3VycmVudFBhcmFtc1trZXldIDogW2N1cnJlbnRQYXJhbXNba2V5XV07XG4gICAgICBjdXJyZW50UGFyYW1zID0gY3VycmVudFBhcmFtc1trZXldID0gcHJldlZhbHVlIHx8IChpc05hTihrZXlzW2ogKyAxXSkgPyB7fSA6IFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFBhcmFtcyA9IGN1cnJlbnRQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZykge1xuICB2YXIgcXVlcnlQYXJhbXMgPSB7fTtcbiAgaWYgKCFxdWVyeVN0cmluZyB8fCB0eXBlb2YgcXVlcnlTdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xuICB9XG5cbiAgdmFyIHF1ZXJ5ID0gcXVlcnlTdHJpbmc7XG4gIGlmIChxdWVyeS5jaGFyQXQoMCkgPT09ICc/Jykge1xuICAgIHF1ZXJ5ID0gcXVlcnkuc3Vic3RyKDEpO1xuICB9XG5cbiAgdmFyIHBhaXJzID0gcXVlcnkucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJyYnKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYWlyID0gcGFpcnNbaV0uc3BsaXQoJz0nKTtcbiAgICB2YXIga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMF0pO1xuICAgIGlmICgha2V5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGtleS5zcGxpdCgnXVsnKTtcbiAgICB2YXIga2V5c0xhc3RJbmRleCA9IGtleXMubGVuZ3RoIC0gMTtcblxuICAgIGlmICgvXFxbLy50ZXN0KGtleXNbMF0pICYmIC9cXF0kLy50ZXN0KGtleXNba2V5c0xhc3RJbmRleF0pKSB7XG4gICAgICBrZXlzW2tleXNMYXN0SW5kZXhdID0ga2V5c1trZXlzTGFzdEluZGV4XS5yZXBsYWNlKC9cXF0kLywgJycpO1xuICAgICAga2V5cyA9IGtleXMuc2hpZnQoKS5zcGxpdCgnWycpLmNvbmNhdChrZXlzKTtcbiAgICAgIGtleXNMYXN0SW5kZXggPSBrZXlzLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXNMYXN0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIGlmIChwYWlyLmxlbmd0aCA+PSAyKSB7XG4gICAgICB2YXIgdmFsdWUgPSBwYWlyWzFdID8gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0pIDogJyc7XG4gICAgICBpZiAoa2V5c0xhc3RJbmRleCkge1xuICAgICAgICBwYXJzZUNvbXBsZXhQYXJhbShxdWVyeVBhcmFtcywga2V5cywgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHByb2Nlc3NTY2FsYXJQYXJhbShxdWVyeVBhcmFtc1trZXldLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcXVlcnlQYXJhbXM7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/aurelia-path/dist/native-modules/aurelia-path.js\n"); /***/ }), /***/ "./node_modules/aurelia-polyfills/dist/native-modules/aurelia-polyfills.js": /*!*********************************************************************************!*\ !*** ./node_modules/aurelia-polyfills/dist/native-modules/aurelia-polyfills.js ***! \*********************************************************************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n (function (Object, GOPS) {\n 'use strict';\n\n if (GOPS in Object) return;\n\n var setDescriptor,\n G = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"PLATFORM\"].global,\n id = 0,\n random = '' + Math.random(),\n prefix = '__\\x01symbol:',\n prefixLength = prefix.length,\n internalSymbol = '__\\x01symbol@@' + random,\n DP = 'defineProperty',\n DPies = 'defineProperties',\n GOPN = 'getOwnPropertyNames',\n GOPD = 'getOwnPropertyDescriptor',\n PIE = 'propertyIsEnumerable',\n gOPN = Object[GOPN],\n gOPD = Object[GOPD],\n create = Object.create,\n keys = Object.keys,\n defineProperty = Object[DP],\n $defineProperties = Object[DPies],\n descriptor = gOPD(Object, GOPN),\n ObjectProto = Object.prototype,\n hOP = ObjectProto.hasOwnProperty,\n pIE = ObjectProto[PIE],\n toString = ObjectProto.toString,\n indexOf = Array.prototype.indexOf || function (v) {\n for (var i = this.length; i-- && this[i] !== v;) {}\n return i;\n },\n addInternalIfNeeded = function addInternalIfNeeded(o, uid, enumerable) {\n if (!hOP.call(o, internalSymbol)) {\n defineProperty(o, internalSymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: {}\n });\n }\n o[internalSymbol]['@@' + uid] = enumerable;\n },\n createWithSymbols = function createWithSymbols(proto, descriptors) {\n var self = create(proto);\n if (descriptors !== null && (typeof descriptors === 'undefined' ? 'undefined' : _typeof(descriptors)) === 'object') {\n gOPN(descriptors).forEach(function (key) {\n if (propertyIsEnumerable.call(descriptors, key)) {\n $defineProperty(self, key, descriptors[key]);\n }\n });\n }\n return self;\n },\n copyAsNonEnumerable = function copyAsNonEnumerable(descriptor) {\n var newDescriptor = create(descriptor);\n newDescriptor.enumerable = false;\n return newDescriptor;\n },\n get = function get() {},\n onlyNonSymbols = function onlyNonSymbols(name) {\n return name != internalSymbol && !hOP.call(source, name);\n },\n onlySymbols = function onlySymbols(name) {\n return name != internalSymbol && hOP.call(source, name);\n },\n propertyIsEnumerable = function propertyIsEnumerable(key) {\n var uid = '' + key;\n return onlySymbols(uid) ? hOP.call(this, uid) && this[internalSymbol] && this[internalSymbol]['@@' + uid] : pIE.call(this, key);\n },\n setAndGetSymbol = function setAndGetSymbol(uid) {\n var descriptor = {\n enumerable: false,\n configurable: true,\n get: get,\n set: function set(value) {\n setDescriptor(this, uid, {\n enumerable: false,\n configurable: true,\n writable: true,\n value: value\n });\n addInternalIfNeeded(this, uid, true);\n }\n };\n defineProperty(ObjectProto, uid, descriptor);\n return source[uid] = defineProperty(Object(uid), 'constructor', sourceConstructor);\n },\n _Symbol = function _Symbol2(description) {\n if (this && this !== G) {\n throw new TypeError('Symbol is not a constructor');\n }\n return setAndGetSymbol(prefix.concat(description || '', random, ++id));\n },\n source = create(null),\n sourceConstructor = { value: _Symbol },\n sourceMap = function sourceMap(uid) {\n return source[uid];\n },\n $defineProperty = function defineProp(o, key, descriptor) {\n var uid = '' + key;\n if (onlySymbols(uid)) {\n setDescriptor(o, uid, descriptor.enumerable ? copyAsNonEnumerable(descriptor) : descriptor);\n addInternalIfNeeded(o, uid, !!descriptor.enumerable);\n } else {\n defineProperty(o, key, descriptor);\n }\n return o;\n },\n $getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n var cof = toString.call(o);\n o = cof === '[object String]' ? o.split('') : Object(o);\n return gOPN(o).filter(onlySymbols).map(sourceMap);\n };\n\n descriptor.value = $defineProperty;\n defineProperty(Object, DP, descriptor);\n\n descriptor.value = $getOwnPropertySymbols;\n defineProperty(Object, GOPS, descriptor);\n\n var cachedWindowNames = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' ? Object.getOwnPropertyNames(window) : [];\n var originalObjectGetOwnPropertyNames = Object.getOwnPropertyNames;\n descriptor.value = function getOwnPropertyNames(o) {\n if (toString.call(o) === '[object Window]') {\n try {\n return originalObjectGetOwnPropertyNames(o);\n } catch (e) {\n return [].concat([], cachedWindowNames);\n }\n }\n return gOPN(o).filter(onlyNonSymbols);\n };\n defineProperty(Object, GOPN, descriptor);\n\n descriptor.value = function defineProperties(o, descriptors) {\n var symbols = $getOwnPropertySymbols(descriptors);\n if (symbols.length) {\n keys(descriptors).concat(symbols).forEach(function (uid) {\n if (propertyIsEnumerable.call(descriptors, uid)) {\n $defineProperty(o, uid, descriptors[uid]);\n }\n });\n } else {\n $defineProperties(o, descriptors);\n }\n return o;\n };\n defineProperty(Object, DPies, descriptor);\n\n descriptor.value = propertyIsEnumerable;\n defineProperty(ObjectProto, PIE, descriptor);\n\n descriptor.value = _Symbol;\n defineProperty(G, 'Symbol', descriptor);\n\n descriptor.value = function (key) {\n var uid = prefix.concat(prefix, key, random);\n return uid in ObjectProto ? source[uid] : setAndGetSymbol(uid);\n };\n defineProperty(_Symbol, 'for', descriptor);\n\n descriptor.value = function (symbol) {\n return hOP.call(source, symbol) ? symbol.slice(prefixLength * 2, -random.length) : void 0;\n };\n defineProperty(_Symbol, 'keyFor', descriptor);\n\n descriptor.value = function getOwnPropertyDescriptor(o, key) {\n var descriptor = gOPD(o, key);\n if (descriptor && onlySymbols(key)) {\n descriptor.enumerable = propertyIsEnumerable.call(o, key);\n }\n return descriptor;\n };\n defineProperty(Object, GOPD, descriptor);\n\n descriptor.value = function (proto, descriptors) {\n return arguments.length === 1 ? create(proto) : createWithSymbols(proto, descriptors);\n };\n defineProperty(Object, 'create', descriptor);\n\n descriptor.value = function () {\n var str = toString.call(this);\n return str === '[object String]' && onlySymbols(this) ? '[object Symbol]' : str;\n };\n defineProperty(ObjectProto, 'toString', descriptor);\n\n try {\n setDescriptor = create(defineProperty({}, prefix, {\n get: function get() {\n return defineProperty(this, prefix, { value: false })[prefix];\n }\n }))[prefix] || defineProperty;\n } catch (o_O) {\n setDescriptor = function setDescriptor(o, key, descriptor) {\n var protoDescriptor = gOPD(ObjectProto, key);\n delete ObjectProto[key];\n defineProperty(o, key, descriptor);\n defineProperty(ObjectProto, key, protoDescriptor);\n };\n }\n })(Object, 'getOwnPropertySymbols');\n\n (function (O, S) {\n var dP = O.defineProperty,\n ObjectProto = O.prototype,\n toString = ObjectProto.toString,\n toStringTag = 'toStringTag',\n descriptor;\n ['iterator', 'match', 'replace', 'search', 'split', 'hasInstance', 'isConcatSpreadable', 'unscopables', 'species', 'toPrimitive', toStringTag].forEach(function (name) {\n if (!(name in Symbol)) {\n dP(Symbol, name, { value: Symbol(name) });\n switch (name) {\n case toStringTag:\n descriptor = O.getOwnPropertyDescriptor(ObjectProto, 'toString');\n descriptor.value = function () {\n var str = toString.call(this),\n tst = typeof this === 'undefined' || this === null ? undefined : this[Symbol.toStringTag];\n return typeof tst === 'undefined' ? str : '[object ' + tst + ']';\n };\n dP(ObjectProto, 'toString', descriptor);\n break;\n }\n }\n });\n })(Object, Symbol);\n\n (function (Si, AP, SP) {\n\n function returnThis() {\n return this;\n }\n\n if (!AP[Si]) AP[Si] = function () {\n var i = 0,\n self = this,\n iterator = {\n next: function next() {\n var done = self.length <= i;\n return done ? { done: done } : { done: done, value: self[i++] };\n }\n };\n iterator[Si] = returnThis;\n return iterator;\n };\n\n if (!SP[Si]) SP[Si] = function () {\n var fromCodePoint = String.fromCodePoint,\n self = this,\n i = 0,\n length = self.length,\n iterator = {\n next: function next() {\n var done = length <= i,\n c = done ? '' : fromCodePoint(self.codePointAt(i));\n i += c.length;\n return done ? { done: done } : { done: done, value: c };\n }\n };\n iterator[Si] = returnThis;\n return iterator;\n };\n })(Symbol.iterator, Array.prototype, String.prototype);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n Number.isNaN = Number.isNaN || function (value) {\n return value !== value;\n };\n\n Number.isFinite = Number.isFinite || function (value) {\n return typeof value === \"number\" && isFinite(value);\n };\n}\n\nif (!String.prototype.endsWith || function () {\n try {\n return !\"ab\".endsWith(\"a\", 1);\n } catch (e) {\n return true;\n }\n}()) {\n String.prototype.endsWith = function (searchString, position) {\n var subjectString = this.toString();\n if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n };\n}\n\nif (!String.prototype.startsWith || function () {\n try {\n return !\"ab\".startsWith(\"b\", 1);\n } catch (e) {\n return true;\n }\n}()) {\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.substr(position, searchString.length) === searchString;\n };\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n if (!Array.from) {\n Array.from = function () {\n var toInteger = function toInteger(it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? Math.floor : Math.ceil)(it);\n };\n var toLength = function toLength(it) {\n return it > 0 ? Math.min(toInteger(it), 0x1fffffffffffff) : 0;\n };\n var iterCall = function iterCall(iter, fn, val, index) {\n try {\n return fn(val, index);\n } catch (E) {\n if (typeof iter.return == 'function') iter.return();\n throw E;\n }\n };\n\n return function from(arrayLike) {\n var O = Object(arrayLike),\n C = typeof this == 'function' ? this : Array,\n aLen = arguments.length,\n mapfn = aLen > 1 ? arguments[1] : undefined,\n mapping = mapfn !== undefined,\n index = 0,\n iterFn = O[Symbol.iterator],\n length,\n result,\n step,\n iterator;\n if (mapping) mapfn = mapfn.bind(aLen > 2 ? arguments[2] : undefined);\n if (iterFn != undefined && !Array.isArray(arrayLike)) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n result[index] = mapping ? iterCall(iterator, mapfn, step.value, index) : step.value;\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n result[index] = mapping ? mapfn(O[index], index) : O[index];\n }\n }\n result.length = index;\n return result;\n };\n }();\n }\n\n if (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n configurable: true,\n writable: true,\n enumerable: false,\n value: function value(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined');\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value;\n }\n }\n return undefined;\n }\n });\n }\n\n if (!Array.prototype.findIndex) {\n Object.defineProperty(Array.prototype, 'findIndex', {\n configurable: true,\n writable: true,\n enumerable: false,\n value: function value(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.findIndex called on null or undefined');\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return i;\n }\n }\n return -1;\n }\n });\n }\n}\n\nif (typeof FEATURE_NO_ES2016 === 'undefined' && !Array.prototype.includes) {\n Object.defineProperty(Array.prototype, 'includes', {\n configurable: true,\n writable: true,\n enumerable: false,\n value: function value(searchElement) {\n var O = Object(this);\n var len = parseInt(O.length) || 0;\n if (len === 0) {\n return false;\n }\n var n = parseInt(arguments[1]) || 0;\n var k;\n if (n >= 0) {\n k = n;\n } else {\n k = len + n;\n if (k < 0) {\n k = 0;\n }\n }\n var currentElement;\n while (k < len) {\n currentElement = O[k];\n if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {\n return true;\n }\n k++;\n }\n return false;\n }\n });\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n (function () {\n var needsFix = false;\n\n try {\n var s = Object.keys('a');\n needsFix = s.length !== 1 || s[0] !== '0';\n } catch (e) {\n needsFix = true;\n }\n\n if (needsFix) {\n Object.keys = function () {\n var hasOwnProperty = Object.prototype.hasOwnProperty,\n hasDontEnumBug = !{ toString: null }.propertyIsEnumerable('toString'),\n dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n dontEnumsLength = dontEnums.length;\n\n return function (obj) {\n if (obj === undefined || obj === null) {\n throw TypeError('Cannot convert undefined or null to object');\n }\n\n obj = Object(obj);\n\n var result = [],\n prop,\n i;\n\n for (prop in obj) {\n if (hasOwnProperty.call(obj, prop)) {\n result.push(prop);\n }\n }\n\n if (hasDontEnumBug) {\n for (i = 0; i < dontEnumsLength; i++) {\n if (hasOwnProperty.call(obj, dontEnums[i])) {\n result.push(dontEnums[i]);\n }\n }\n }\n\n return result;\n };\n }();\n }\n })();\n\n (function (O) {\n if ('assign' in O) {\n return;\n }\n\n O.defineProperty(O, 'assign', {\n configurable: true,\n writable: true,\n value: function () {\n var gOPS = O.getOwnPropertySymbols,\n pIE = O.propertyIsEnumerable,\n filterOS = gOPS ? function (self) {\n return gOPS(self).filter(pIE, self);\n } : function () {\n return Array.prototype;\n };\n\n return function assign(where) {\n if (gOPS && !(where instanceof O)) {\n console.warn('problematic Symbols', where);\n }\n\n function set(keyOrSymbol) {\n where[keyOrSymbol] = arg[keyOrSymbol];\n }\n\n for (var i = 1, ii = arguments.length; i < ii; ++i) {\n var arg = arguments[i];\n\n if (arg === null || arg === undefined) {\n continue;\n }\n\n O.keys(arg).concat(filterOS(arg)).forEach(set);\n }\n\n return where;\n };\n }()\n });\n })(Object);\n\n if (!Object.is) {\n Object.is = function (x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n };\n }\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n (function (global) {\n var i;\n\n var defineProperty = Object.defineProperty,\n is = function is(a, b) {\n return a === b || a !== a && b !== b;\n };\n\n if (typeof WeakMap == 'undefined') {\n global.WeakMap = createCollection({\n 'delete': sharedDelete,\n\n clear: sharedClear,\n\n get: sharedGet,\n\n has: mapHas,\n\n set: sharedSet\n }, true);\n }\n\n if (typeof Map == 'undefined' || typeof new Map().values !== 'function' || !new Map().values().next) {\n var _createCollection;\n\n global.Map = createCollection((_createCollection = {\n 'delete': sharedDelete,\n\n has: mapHas,\n\n get: sharedGet,\n\n set: sharedSet,\n\n keys: sharedKeys,\n\n values: sharedValues,\n\n entries: mapEntries,\n\n forEach: sharedForEach,\n\n clear: sharedClear\n }, _createCollection[Symbol.iterator] = mapEntries, _createCollection));\n }\n\n if (typeof Set == 'undefined' || typeof new Set().values !== 'function' || !new Set().values().next) {\n var _createCollection2;\n\n global.Set = createCollection((_createCollection2 = {\n has: setHas,\n\n add: sharedAdd,\n\n 'delete': sharedDelete,\n\n clear: sharedClear,\n\n keys: sharedValues,\n values: sharedValues,\n\n entries: setEntries,\n\n forEach: sharedForEach\n }, _createCollection2[Symbol.iterator] = sharedValues, _createCollection2));\n }\n\n if (typeof WeakSet == 'undefined') {\n global.WeakSet = createCollection({\n 'delete': sharedDelete,\n\n add: sharedAdd,\n\n clear: sharedClear,\n\n has: setHas\n }, true);\n }\n\n function createCollection(proto, objectOnly) {\n function Collection(a) {\n if (!this || this.constructor !== Collection) return new Collection(a);\n this._keys = [];\n this._values = [];\n this._itp = [];\n this.objectOnly = objectOnly;\n\n if (a) init.call(this, a);\n }\n\n if (!objectOnly) {\n defineProperty(proto, 'size', {\n get: sharedSize\n });\n }\n\n proto.constructor = Collection;\n Collection.prototype = proto;\n\n return Collection;\n }\n\n function init(a) {\n var i;\n\n if (this.add) a.forEach(this.add, this);else a.forEach(function (a) {\n this.set(a[0], a[1]);\n }, this);\n }\n\n function sharedDelete(key) {\n if (this.has(key)) {\n this._keys.splice(i, 1);\n this._values.splice(i, 1);\n\n this._itp.forEach(function (p) {\n if (i < p[0]) p[0]--;\n });\n }\n\n return -1 < i;\n };\n\n function sharedGet(key) {\n return this.has(key) ? this._values[i] : undefined;\n }\n\n function has(list, key) {\n if (this.objectOnly && key !== Object(key)) throw new TypeError(\"Invalid value used as weak collection key\");\n\n if (key != key || key === 0) for (i = list.length; i-- && !is(list[i], key);) {} else i = list.indexOf(key);\n return -1 < i;\n }\n\n function setHas(value) {\n return has.call(this, this._values, value);\n }\n\n function mapHas(value) {\n return has.call(this, this._keys, value);\n }\n\n function sharedSet(key, value) {\n this.has(key) ? this._values[i] = value : this._values[this._keys.push(key) - 1] = value;\n return this;\n }\n\n function sharedAdd(value) {\n if (!this.has(value)) this._values.push(value);\n return this;\n }\n\n function sharedClear() {\n (this._keys || 0).length = this._values.length = 0;\n }\n\n function sharedKeys() {\n return sharedIterator(this._itp, this._keys);\n }\n\n function sharedValues() {\n return sharedIterator(this._itp, this._values);\n }\n\n function mapEntries() {\n return sharedIterator(this._itp, this._keys, this._values);\n }\n\n function setEntries() {\n return sharedIterator(this._itp, this._values, this._values);\n }\n\n function sharedIterator(itp, array, array2) {\n var _ref;\n\n var p = [0],\n done = false;\n itp.push(p);\n return _ref = {}, _ref[Symbol.iterator] = function () {\n return this;\n }, _ref.next = function next() {\n var v,\n k = p[0];\n if (!done && k < array.length) {\n v = array2 ? [array[k], array2[k]] : array[k];\n p[0]++;\n } else {\n done = true;\n itp.splice(itp.indexOf(p), 1);\n }\n return { done: done, value: v };\n }, _ref;\n }\n\n function sharedSize() {\n return this._values.length;\n }\n\n function sharedForEach(callback, context) {\n var it = this.entries();\n for (;;) {\n var r = it.next();\n if (r.done) break;\n callback.call(context, r.value[1], r.value[0], this);\n }\n }\n })(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"PLATFORM\"].global);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n var bind = Function.prototype.bind;\n\n if (typeof aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"PLATFORM\"].global.Reflect === 'undefined') {\n aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"PLATFORM\"].global.Reflect = {};\n }\n\n if (typeof Reflect.defineProperty !== 'function') {\n Reflect.defineProperty = function (target, propertyKey, descriptor) {\n if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' ? target === null : typeof target !== 'function') {\n throw new TypeError('Reflect.defineProperty called on non-object');\n }\n try {\n Object.defineProperty(target, propertyKey, descriptor);\n return true;\n } catch (e) {\n return false;\n }\n };\n }\n\n if (typeof Reflect.construct !== 'function') {\n Reflect.construct = function (Target, args) {\n if (args) {\n switch (args.length) {\n case 0:\n return new Target();\n case 1:\n return new Target(args[0]);\n case 2:\n return new Target(args[0], args[1]);\n case 3:\n return new Target(args[0], args[1], args[2]);\n case 4:\n return new Target(args[0], args[1], args[2], args[3]);\n }\n }\n\n var a = [null];\n a.push.apply(a, args);\n return new (bind.apply(Target, a))();\n };\n }\n\n if (typeof Reflect.ownKeys !== 'function') {\n Reflect.ownKeys = function (o) {\n return Object.getOwnPropertyNames(o).concat(Object.getOwnPropertySymbols(o));\n };\n }\n}\n\nif (typeof FEATURE_NO_ESNEXT === 'undefined') {\n\n var emptyMetadata = Object.freeze({});\n var metadataContainerKey = '__metadata__';\n\n if (typeof Reflect.getOwnMetadata !== 'function') {\n Reflect.getOwnMetadata = function (metadataKey, target, targetKey) {\n if (target.hasOwnProperty(metadataContainerKey)) {\n return (target[metadataContainerKey][targetKey] || emptyMetadata)[metadataKey];\n }\n };\n }\n\n if (typeof Reflect.defineMetadata !== 'function') {\n Reflect.defineMetadata = function (metadataKey, metadataValue, target, targetKey) {\n var metadataContainer = target.hasOwnProperty(metadataContainerKey) ? target[metadataContainerKey] : target[metadataContainerKey] = {};\n var targetContainer = metadataContainer[targetKey] || (metadataContainer[targetKey] = {});\n targetContainer[metadataKey] = metadataValue;\n };\n }\n\n if (typeof Reflect.metadata !== 'function') {\n Reflect.metadata = function (metadataKey, metadataValue) {\n return function (target, targetKey) {\n Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n };\n };\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1wb2x5ZmlsbHMvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLXBvbHlmaWxscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hdXJlbGlhLXBvbHlmaWxscy9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtcG9seWZpbGxzLmpzPzQzZmUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5pbXBvcnQgeyBQTEFURk9STSB9IGZyb20gJ2F1cmVsaWEtcGFsJztcblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX0VTMjAxNSA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAoZnVuY3Rpb24gKE9iamVjdCwgR09QUykge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGlmIChHT1BTIGluIE9iamVjdCkgcmV0dXJuO1xuXG4gICAgdmFyIHNldERlc2NyaXB0b3IsXG4gICAgICAgIEcgPSBQTEFURk9STS5nbG9iYWwsXG4gICAgICAgIGlkID0gMCxcbiAgICAgICAgcmFuZG9tID0gJycgKyBNYXRoLnJhbmRvbSgpLFxuICAgICAgICBwcmVmaXggPSAnX19cXHgwMXN5bWJvbDonLFxuICAgICAgICBwcmVmaXhMZW5ndGggPSBwcmVmaXgubGVuZ3RoLFxuICAgICAgICBpbnRlcm5hbFN5bWJvbCA9ICdfX1xceDAxc3ltYm9sQEAnICsgcmFuZG9tLFxuICAgICAgICBEUCA9ICdkZWZpbmVQcm9wZXJ0eScsXG4gICAgICAgIERQaWVzID0gJ2RlZmluZVByb3BlcnRpZXMnLFxuICAgICAgICBHT1BOID0gJ2dldE93blByb3BlcnR5TmFtZXMnLFxuICAgICAgICBHT1BEID0gJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsXG4gICAgICAgIFBJRSA9ICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICAgICAgIGdPUE4gPSBPYmplY3RbR09QTl0sXG4gICAgICAgIGdPUEQgPSBPYmplY3RbR09QRF0sXG4gICAgICAgIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsXG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3RbRFBdLFxuICAgICAgICAkZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdFtEUGllc10sXG4gICAgICAgIGRlc2NyaXB0b3IgPSBnT1BEKE9iamVjdCwgR09QTiksXG4gICAgICAgIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICAgICAgaE9QID0gT2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHksXG4gICAgICAgIHBJRSA9IE9iamVjdFByb3RvW1BJRV0sXG4gICAgICAgIHRvU3RyaW5nID0gT2JqZWN0UHJvdG8udG9TdHJpbmcsXG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB8fCBmdW5jdGlvbiAodikge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoOyBpLS0gJiYgdGhpc1tpXSAhPT0gdjspIHt9XG4gICAgICByZXR1cm4gaTtcbiAgICB9LFxuICAgICAgICBhZGRJbnRlcm5hbElmTmVlZGVkID0gZnVuY3Rpb24gYWRkSW50ZXJuYWxJZk5lZWRlZChvLCB1aWQsIGVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaE9QLmNhbGwobywgaW50ZXJuYWxTeW1ib2wpKSB7XG4gICAgICAgIGRlZmluZVByb3BlcnR5KG8sIGludGVybmFsU3ltYm9sLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IHt9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgb1tpbnRlcm5hbFN5bWJvbF1bJ0BAJyArIHVpZF0gPSBlbnVtZXJhYmxlO1xuICAgIH0sXG4gICAgICAgIGNyZWF0ZVdpdGhTeW1ib2xzID0gZnVuY3Rpb24gY3JlYXRlV2l0aFN5bWJvbHMocHJvdG8sIGRlc2NyaXB0b3JzKSB7XG4gICAgICB2YXIgc2VsZiA9IGNyZWF0ZShwcm90byk7XG4gICAgICBpZiAoZGVzY3JpcHRvcnMgIT09IG51bGwgJiYgKHR5cGVvZiBkZXNjcmlwdG9ycyA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoZGVzY3JpcHRvcnMpKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZ09QTihkZXNjcmlwdG9ycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgaWYgKHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZGVzY3JpcHRvcnMsIGtleSkpIHtcbiAgICAgICAgICAgICRkZWZpbmVQcm9wZXJ0eShzZWxmLCBrZXksIGRlc2NyaXB0b3JzW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9LFxuICAgICAgICBjb3B5QXNOb25FbnVtZXJhYmxlID0gZnVuY3Rpb24gY29weUFzTm9uRW51bWVyYWJsZShkZXNjcmlwdG9yKSB7XG4gICAgICB2YXIgbmV3RGVzY3JpcHRvciA9IGNyZWF0ZShkZXNjcmlwdG9yKTtcbiAgICAgIG5ld0Rlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIG5ld0Rlc2NyaXB0b3I7XG4gICAgfSxcbiAgICAgICAgZ2V0ID0gZnVuY3Rpb24gZ2V0KCkge30sXG4gICAgICAgIG9ubHlOb25TeW1ib2xzID0gZnVuY3Rpb24gb25seU5vblN5bWJvbHMobmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWUgIT0gaW50ZXJuYWxTeW1ib2wgJiYgIWhPUC5jYWxsKHNvdXJjZSwgbmFtZSk7XG4gICAgfSxcbiAgICAgICAgb25seVN5bWJvbHMgPSBmdW5jdGlvbiBvbmx5U3ltYm9scyhuYW1lKSB7XG4gICAgICByZXR1cm4gbmFtZSAhPSBpbnRlcm5hbFN5bWJvbCAmJiBoT1AuY2FsbChzb3VyY2UsIG5hbWUpO1xuICAgIH0sXG4gICAgICAgIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gICAgICB2YXIgdWlkID0gJycgKyBrZXk7XG4gICAgICByZXR1cm4gb25seVN5bWJvbHModWlkKSA/IGhPUC5jYWxsKHRoaXMsIHVpZCkgJiYgdGhpc1tpbnRlcm5hbFN5bWJvbF0gJiYgdGhpc1tpbnRlcm5hbFN5bWJvbF1bJ0BAJyArIHVpZF0gOiBwSUUuY2FsbCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgICAgIHNldEFuZEdldFN5bWJvbCA9IGZ1bmN0aW9uIHNldEFuZEdldFN5bWJvbCh1aWQpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0ge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGdldCxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgICBzZXREZXNjcmlwdG9yKHRoaXMsIHVpZCwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFkZEludGVybmFsSWZOZWVkZWQodGhpcywgdWlkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvLCB1aWQsIGRlc2NyaXB0b3IpO1xuICAgICAgcmV0dXJuIHNvdXJjZVt1aWRdID0gZGVmaW5lUHJvcGVydHkoT2JqZWN0KHVpZCksICdjb25zdHJ1Y3RvcicsIHNvdXJjZUNvbnN0cnVjdG9yKTtcbiAgICB9LFxuICAgICAgICBfU3ltYm9sID0gZnVuY3Rpb24gX1N5bWJvbDIoZGVzY3JpcHRpb24pIHtcbiAgICAgIGlmICh0aGlzICYmIHRoaXMgIT09IEcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0QW5kR2V0U3ltYm9sKHByZWZpeC5jb25jYXQoZGVzY3JpcHRpb24gfHwgJycsIHJhbmRvbSwgKytpZCkpO1xuICAgIH0sXG4gICAgICAgIHNvdXJjZSA9IGNyZWF0ZShudWxsKSxcbiAgICAgICAgc291cmNlQ29uc3RydWN0b3IgPSB7IHZhbHVlOiBfU3ltYm9sIH0sXG4gICAgICAgIHNvdXJjZU1hcCA9IGZ1bmN0aW9uIHNvdXJjZU1hcCh1aWQpIHtcbiAgICAgIHJldHVybiBzb3VyY2VbdWlkXTtcbiAgICB9LFxuICAgICAgICAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wKG8sIGtleSwgZGVzY3JpcHRvcikge1xuICAgICAgdmFyIHVpZCA9ICcnICsga2V5O1xuICAgICAgaWYgKG9ubHlTeW1ib2xzKHVpZCkpIHtcbiAgICAgICAgc2V0RGVzY3JpcHRvcihvLCB1aWQsIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA/IGNvcHlBc05vbkVudW1lcmFibGUoZGVzY3JpcHRvcikgOiBkZXNjcmlwdG9yKTtcbiAgICAgICAgYWRkSW50ZXJuYWxJZk5lZWRlZChvLCB1aWQsICEhZGVzY3JpcHRvci5lbnVtZXJhYmxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmluZVByb3BlcnR5KG8sIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbztcbiAgICB9LFxuICAgICAgICAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKG8pIHtcbiAgICAgIHZhciBjb2YgPSB0b1N0cmluZy5jYWxsKG8pO1xuICAgICAgbyA9IGNvZiA9PT0gJ1tvYmplY3QgU3RyaW5nXScgPyBvLnNwbGl0KCcnKSA6IE9iamVjdChvKTtcbiAgICAgIHJldHVybiBnT1BOKG8pLmZpbHRlcihvbmx5U3ltYm9scykubWFwKHNvdXJjZU1hcCk7XG4gICAgfTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSAkZGVmaW5lUHJvcGVydHk7XG4gICAgZGVmaW5lUHJvcGVydHkoT2JqZWN0LCBEUCwgZGVzY3JpcHRvcik7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gJGdldE93blByb3BlcnR5U3ltYm9scztcbiAgICBkZWZpbmVQcm9wZXJ0eShPYmplY3QsIEdPUFMsIGRlc2NyaXB0b3IpO1xuXG4gICAgdmFyIGNhY2hlZFdpbmRvd05hbWVzID0gKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHdpbmRvdykpID09PSAnb2JqZWN0JyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcbiAgICB2YXIgb3JpZ2luYWxPYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMobykge1xuICAgICAgaWYgKHRvU3RyaW5nLmNhbGwobykgPT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyhvKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBbXS5jb25jYXQoW10sIGNhY2hlZFdpbmRvd05hbWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGdPUE4obykuZmlsdGVyKG9ubHlOb25TeW1ib2xzKTtcbiAgICB9O1xuICAgIGRlZmluZVByb3BlcnR5KE9iamVjdCwgR09QTiwgZGVzY3JpcHRvcik7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvLCBkZXNjcmlwdG9ycykge1xuICAgICAgdmFyIHN5bWJvbHMgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRlc2NyaXB0b3JzKTtcbiAgICAgIGlmIChzeW1ib2xzLmxlbmd0aCkge1xuICAgICAgICBrZXlzKGRlc2NyaXB0b3JzKS5jb25jYXQoc3ltYm9scykuZm9yRWFjaChmdW5jdGlvbiAodWlkKSB7XG4gICAgICAgICAgaWYgKHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZGVzY3JpcHRvcnMsIHVpZCkpIHtcbiAgICAgICAgICAgICRkZWZpbmVQcm9wZXJ0eShvLCB1aWQsIGRlc2NyaXB0b3JzW3VpZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZGVmaW5lUHJvcGVydGllcyhvLCBkZXNjcmlwdG9ycyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIGRlZmluZVByb3BlcnR5KE9iamVjdCwgRFBpZXMsIGRlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAgIGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvLCBQSUUsIGRlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IF9TeW1ib2w7XG4gICAgZGVmaW5lUHJvcGVydHkoRywgJ1N5bWJvbCcsIGRlc2NyaXB0b3IpO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB1aWQgPSBwcmVmaXguY29uY2F0KHByZWZpeCwga2V5LCByYW5kb20pO1xuICAgICAgcmV0dXJuIHVpZCBpbiBPYmplY3RQcm90byA/IHNvdXJjZVt1aWRdIDogc2V0QW5kR2V0U3ltYm9sKHVpZCk7XG4gICAgfTtcbiAgICBkZWZpbmVQcm9wZXJ0eShfU3ltYm9sLCAnZm9yJywgZGVzY3JpcHRvcik7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKHN5bWJvbCkge1xuICAgICAgcmV0dXJuIGhPUC5jYWxsKHNvdXJjZSwgc3ltYm9sKSA/IHN5bWJvbC5zbGljZShwcmVmaXhMZW5ndGggKiAyLCAtcmFuZG9tLmxlbmd0aCkgOiB2b2lkIDA7XG4gICAgfTtcbiAgICBkZWZpbmVQcm9wZXJ0eShfU3ltYm9sLCAna2V5Rm9yJywgZGVzY3JpcHRvcik7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIGtleSkge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnT1BEKG8sIGtleSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAmJiBvbmx5U3ltYm9scyhrZXkpKSB7XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwobywga2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH07XG4gICAgZGVmaW5lUHJvcGVydHkoT2JqZWN0LCBHT1BELCBkZXNjcmlwdG9yKTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiAocHJvdG8sIGRlc2NyaXB0b3JzKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNyZWF0ZShwcm90bykgOiBjcmVhdGVXaXRoU3ltYm9scyhwcm90bywgZGVzY3JpcHRvcnMpO1xuICAgIH07XG4gICAgZGVmaW5lUHJvcGVydHkoT2JqZWN0LCAnY3JlYXRlJywgZGVzY3JpcHRvcik7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gICAgICByZXR1cm4gc3RyID09PSAnW29iamVjdCBTdHJpbmddJyAmJiBvbmx5U3ltYm9scyh0aGlzKSA/ICdbb2JqZWN0IFN5bWJvbF0nIDogc3RyO1xuICAgIH07XG4gICAgZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG8sICd0b1N0cmluZycsIGRlc2NyaXB0b3IpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldERlc2NyaXB0b3IgPSBjcmVhdGUoZGVmaW5lUHJvcGVydHkoe30sIHByZWZpeCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkodGhpcywgcHJlZml4LCB7IHZhbHVlOiBmYWxzZSB9KVtwcmVmaXhdO1xuICAgICAgICB9XG4gICAgICB9KSlbcHJlZml4XSB8fCBkZWZpbmVQcm9wZXJ0eTtcbiAgICB9IGNhdGNoIChvX08pIHtcbiAgICAgIHNldERlc2NyaXB0b3IgPSBmdW5jdGlvbiBzZXREZXNjcmlwdG9yKG8sIGtleSwgZGVzY3JpcHRvcikge1xuICAgICAgICB2YXIgcHJvdG9EZXNjcmlwdG9yID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgICAgICAgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gICAgICAgIGRlZmluZVByb3BlcnR5KG8sIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzY3JpcHRvcik7XG4gICAgICB9O1xuICAgIH1cbiAgfSkoT2JqZWN0LCAnZ2V0T3duUHJvcGVydHlTeW1ib2xzJyk7XG5cbiAgKGZ1bmN0aW9uIChPLCBTKSB7XG4gICAgdmFyIGRQID0gTy5kZWZpbmVQcm9wZXJ0eSxcbiAgICAgICAgT2JqZWN0UHJvdG8gPSBPLnByb3RvdHlwZSxcbiAgICAgICAgdG9TdHJpbmcgPSBPYmplY3RQcm90by50b1N0cmluZyxcbiAgICAgICAgdG9TdHJpbmdUYWcgPSAndG9TdHJpbmdUYWcnLFxuICAgICAgICBkZXNjcmlwdG9yO1xuICAgIFsnaXRlcmF0b3InLCAnbWF0Y2gnLCAncmVwbGFjZScsICdzZWFyY2gnLCAnc3BsaXQnLCAnaGFzSW5zdGFuY2UnLCAnaXNDb25jYXRTcHJlYWRhYmxlJywgJ3Vuc2NvcGFibGVzJywgJ3NwZWNpZXMnLCAndG9QcmltaXRpdmUnLCB0b1N0cmluZ1RhZ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgaWYgKCEobmFtZSBpbiBTeW1ib2wpKSB7XG4gICAgICAgIGRQKFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogU3ltYm9sKG5hbWUpIH0pO1xuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICBjYXNlIHRvU3RyaW5nVGFnOlxuICAgICAgICAgICAgZGVzY3JpcHRvciA9IE8uZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvLCAndG9TdHJpbmcnKTtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgdHN0ID0gdHlwZW9mIHRoaXMgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMgPT09IG51bGwgPyB1bmRlZmluZWQgOiB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdHN0ID09PSAndW5kZWZpbmVkJyA/IHN0ciA6ICdbb2JqZWN0ICcgKyB0c3QgKyAnXSc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZFAoT2JqZWN0UHJvdG8sICd0b1N0cmluZycsIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSkoT2JqZWN0LCBTeW1ib2wpO1xuXG4gIChmdW5jdGlvbiAoU2ksIEFQLCBTUCkge1xuXG4gICAgZnVuY3Rpb24gcmV0dXJuVGhpcygpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmICghQVBbU2ldKSBBUFtTaV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgc2VsZiA9IHRoaXMsXG4gICAgICAgICAgaXRlcmF0b3IgPSB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgdmFyIGRvbmUgPSBzZWxmLmxlbmd0aCA8PSBpO1xuICAgICAgICAgIHJldHVybiBkb25lID8geyBkb25lOiBkb25lIH0gOiB7IGRvbmU6IGRvbmUsIHZhbHVlOiBzZWxmW2krK10gfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGl0ZXJhdG9yW1NpXSA9IHJldHVyblRoaXM7XG4gICAgICByZXR1cm4gaXRlcmF0b3I7XG4gICAgfTtcblxuICAgIGlmICghU1BbU2ldKSBTUFtTaV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50LFxuICAgICAgICAgIHNlbGYgPSB0aGlzLFxuICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoLFxuICAgICAgICAgIGl0ZXJhdG9yID0ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHZhciBkb25lID0gbGVuZ3RoIDw9IGksXG4gICAgICAgICAgICAgIGMgPSBkb25lID8gJycgOiBmcm9tQ29kZVBvaW50KHNlbGYuY29kZVBvaW50QXQoaSkpO1xuICAgICAgICAgIGkgKz0gYy5sZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIGRvbmUgPyB7IGRvbmU6IGRvbmUgfSA6IHsgZG9uZTogZG9uZSwgdmFsdWU6IGMgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGl0ZXJhdG9yW1NpXSA9IHJldHVyblRoaXM7XG4gICAgICByZXR1cm4gaXRlcmF0b3I7XG4gICAgfTtcbiAgfSkoU3ltYm9sLml0ZXJhdG9yLCBBcnJheS5wcm90b3R5cGUsIFN0cmluZy5wcm90b3R5cGUpO1xufVxuXG5pZiAodHlwZW9mIEZFQVRVUkVfTk9fRVMyMDE1ID09PSAndW5kZWZpbmVkJykge1xuXG4gIE51bWJlci5pc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xuICB9O1xuXG4gIE51bWJlci5pc0Zpbml0ZSA9IE51bWJlci5pc0Zpbml0ZSB8fCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKHZhbHVlKTtcbiAgfTtcbn1cblxuaWYgKCFTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoIHx8IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gIVwiYWJcIi5lbmRzV2l0aChcImFcIiwgMSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSgpKSB7XG4gIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggPSBmdW5jdGlvbiAoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikge1xuICAgIHZhciBzdWJqZWN0U3RyaW5nID0gdGhpcy50b1N0cmluZygpO1xuICAgIGlmICh0eXBlb2YgcG9zaXRpb24gIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZShwb3NpdGlvbikgfHwgTWF0aC5mbG9vcihwb3NpdGlvbikgIT09IHBvc2l0aW9uIHx8IHBvc2l0aW9uID4gc3ViamVjdFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBvc2l0aW9uID0gc3ViamVjdFN0cmluZy5sZW5ndGg7XG4gICAgfVxuICAgIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gICAgdmFyIGxhc3RJbmRleCA9IHN1YmplY3RTdHJpbmcuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xuICB9O1xufVxuXG5pZiAoIVN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCB8fCBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICFcImFiXCIuc3RhcnRzV2l0aChcImJcIiwgMSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSgpKSB7XG4gIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSB7XG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiB8fCAwO1xuICAgIHJldHVybiB0aGlzLnN1YnN0cihwb3NpdGlvbiwgc2VhcmNoU3RyaW5nLmxlbmd0aCkgPT09IHNlYXJjaFN0cmluZztcbiAgfTtcbn1cblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX0VTMjAxNSA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICBpZiAoIUFycmF5LmZyb20pIHtcbiAgICBBcnJheS5mcm9tID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvSW50ZWdlciA9IGZ1bmN0aW9uIHRvSW50ZWdlcihpdCkge1xuICAgICAgICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gICAgICB9O1xuICAgICAgdmFyIHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgoaXQpIHtcbiAgICAgICAgcmV0dXJuIGl0ID4gMCA/IE1hdGgubWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDtcbiAgICAgIH07XG4gICAgICB2YXIgaXRlckNhbGwgPSBmdW5jdGlvbiBpdGVyQ2FsbChpdGVyLCBmbiwgdmFsLCBpbmRleCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBmbih2YWwsIGluZGV4KTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgaXRlci5yZXR1cm4gPT0gJ2Z1bmN0aW9uJykgaXRlci5yZXR1cm4oKTtcbiAgICAgICAgICB0aHJvdyBFO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UpIHtcbiAgICAgICAgdmFyIE8gPSBPYmplY3QoYXJyYXlMaWtlKSxcbiAgICAgICAgICAgIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5LFxuICAgICAgICAgICAgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBpbmRleCA9IDAsXG4gICAgICAgICAgICBpdGVyRm4gPSBPW1N5bWJvbC5pdGVyYXRvcl0sXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBzdGVwLFxuICAgICAgICAgICAgaXRlcmF0b3I7XG4gICAgICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IG1hcGZuLmJpbmQoYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgICAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhQXJyYXkuaXNBcnJheShhcnJheUxpa2UpKSB7XG4gICAgICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBtYXBwaW5nID8gaXRlckNhbGwoaXRlcmF0b3IsIG1hcGZuLCBzdGVwLnZhbHVlLCBpbmRleCkgOiBzdGVwLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSgpO1xuICB9XG5cbiAgaWYgKCFBcnJheS5wcm90b3R5cGUuZmluZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdmaW5kJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShwcmVkaWNhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGlzdCA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoID4+PiAwO1xuICAgICAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgdmFyIHZhbHVlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YWx1ZSA9IGxpc3RbaV07XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCBsaXN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgJ2ZpbmRJbmRleCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUocHJlZGljYXRlKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGlzdCA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoID4+PiAwO1xuICAgICAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgdmFyIHZhbHVlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YWx1ZSA9IGxpc3RbaV07XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCBsaXN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIEZFQVRVUkVfTk9fRVMyMDE2ID09PSAndW5kZWZpbmVkJyAmJiAhQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdpbmNsdWRlcycsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHNlYXJjaEVsZW1lbnQpIHtcbiAgICAgIHZhciBPID0gT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIGxlbiA9IHBhcnNlSW50KE8ubGVuZ3RoKSB8fCAwO1xuICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgbiA9IHBhcnNlSW50KGFyZ3VtZW50c1sxXSkgfHwgMDtcbiAgICAgIHZhciBrO1xuICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICBrID0gbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsgPSBsZW4gKyBuO1xuICAgICAgICBpZiAoayA8IDApIHtcbiAgICAgICAgICBrID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGN1cnJlbnRFbGVtZW50O1xuICAgICAgd2hpbGUgKGsgPCBsZW4pIHtcbiAgICAgICAgY3VycmVudEVsZW1lbnQgPSBPW2tdO1xuICAgICAgICBpZiAoc2VhcmNoRWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnQgfHwgc2VhcmNoRWxlbWVudCAhPT0gc2VhcmNoRWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBrKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX0VTMjAxNSA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZWVkc0ZpeCA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBzID0gT2JqZWN0LmtleXMoJ2EnKTtcbiAgICAgIG5lZWRzRml4ID0gcy5sZW5ndGggIT09IDEgfHwgc1swXSAhPT0gJzAnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG5lZWRzRml4ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZHNGaXgpIHtcbiAgICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgICAgICAgaGFzRG9udEVudW1CdWcgPSAheyB0b1N0cmluZzogbnVsbCB9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpLFxuICAgICAgICAgICAgZG9udEVudW1zID0gWyd0b1N0cmluZycsICd0b0xvY2FsZVN0cmluZycsICd2YWx1ZU9mJywgJ2hhc093blByb3BlcnR5JywgJ2lzUHJvdG90eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnY29uc3RydWN0b3InXSxcbiAgICAgICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICBpZiAob2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuXG4gICAgICAgICAgdmFyIHJlc3VsdCA9IFtdLFxuICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgZm9yIChwcm9wIGluIG9iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzRG9udEVudW1CdWcpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkb250RW51bXNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGRvbnRFbnVtc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChkb250RW51bXNbaV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH0oKTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgKGZ1bmN0aW9uIChPKSB7XG4gICAgaWYgKCdhc3NpZ24nIGluIE8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBPLmRlZmluZVByb3BlcnR5KE8sICdhc3NpZ24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBnT1BTID0gTy5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG4gICAgICAgICAgICBwSUUgPSBPLnByb3BlcnR5SXNFbnVtZXJhYmxlLFxuICAgICAgICAgICAgZmlsdGVyT1MgPSBnT1BTID8gZnVuY3Rpb24gKHNlbGYpIHtcbiAgICAgICAgICByZXR1cm4gZ09QUyhzZWxmKS5maWx0ZXIocElFLCBzZWxmKTtcbiAgICAgICAgfSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBhc3NpZ24od2hlcmUpIHtcbiAgICAgICAgICBpZiAoZ09QUyAmJiAhKHdoZXJlIGluc3RhbmNlb2YgTykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigncHJvYmxlbWF0aWMgU3ltYm9scycsIHdoZXJlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmdW5jdGlvbiBzZXQoa2V5T3JTeW1ib2wpIHtcbiAgICAgICAgICAgIHdoZXJlW2tleU9yU3ltYm9sXSA9IGFyZ1trZXlPclN5bWJvbF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGlpID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgICAgICAgIGlmIChhcmcgPT09IG51bGwgfHwgYXJnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIE8ua2V5cyhhcmcpLmNvbmNhdChmaWx0ZXJPUyhhcmcpKS5mb3JFYWNoKHNldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9O1xuICAgICAgfSgpXG4gICAgfSk7XG4gIH0pKE9iamVjdCk7XG5cbiAgaWYgKCFPYmplY3QuaXMpIHtcbiAgICBPYmplY3QuaXMgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgaWYgKHggPT09IHkpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmlmICh0eXBlb2YgRkVBVFVSRV9OT19FUzIwMTUgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgKGZ1bmN0aW9uIChnbG9iYWwpIHtcbiAgICB2YXIgaTtcblxuICAgIHZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSxcbiAgICAgICAgaXMgPSBmdW5jdGlvbiBpcyhhLCBiKSB7XG4gICAgICByZXR1cm4gYSA9PT0gYiB8fCBhICE9PSBhICYmIGIgIT09IGI7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgV2Vha01hcCA9PSAndW5kZWZpbmVkJykge1xuICAgICAgZ2xvYmFsLldlYWtNYXAgPSBjcmVhdGVDb2xsZWN0aW9uKHtcbiAgICAgICAgJ2RlbGV0ZSc6IHNoYXJlZERlbGV0ZSxcblxuICAgICAgICBjbGVhcjogc2hhcmVkQ2xlYXIsXG5cbiAgICAgICAgZ2V0OiBzaGFyZWRHZXQsXG5cbiAgICAgICAgaGFzOiBtYXBIYXMsXG5cbiAgICAgICAgc2V0OiBzaGFyZWRTZXRcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgTWFwID09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuZXcgTWFwKCkudmFsdWVzICE9PSAnZnVuY3Rpb24nIHx8ICFuZXcgTWFwKCkudmFsdWVzKCkubmV4dCkge1xuICAgICAgdmFyIF9jcmVhdGVDb2xsZWN0aW9uO1xuXG4gICAgICBnbG9iYWwuTWFwID0gY3JlYXRlQ29sbGVjdGlvbigoX2NyZWF0ZUNvbGxlY3Rpb24gPSB7XG4gICAgICAgICdkZWxldGUnOiBzaGFyZWREZWxldGUsXG5cbiAgICAgICAgaGFzOiBtYXBIYXMsXG5cbiAgICAgICAgZ2V0OiBzaGFyZWRHZXQsXG5cbiAgICAgICAgc2V0OiBzaGFyZWRTZXQsXG5cbiAgICAgICAga2V5czogc2hhcmVkS2V5cyxcblxuICAgICAgICB2YWx1ZXM6IHNoYXJlZFZhbHVlcyxcblxuICAgICAgICBlbnRyaWVzOiBtYXBFbnRyaWVzLFxuXG4gICAgICAgIGZvckVhY2g6IHNoYXJlZEZvckVhY2gsXG5cbiAgICAgICAgY2xlYXI6IHNoYXJlZENsZWFyXG4gICAgICB9LCBfY3JlYXRlQ29sbGVjdGlvbltTeW1ib2wuaXRlcmF0b3JdID0gbWFwRW50cmllcywgX2NyZWF0ZUNvbGxlY3Rpb24pKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFNldCA9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgbmV3IFNldCgpLnZhbHVlcyAhPT0gJ2Z1bmN0aW9uJyB8fCAhbmV3IFNldCgpLnZhbHVlcygpLm5leHQpIHtcbiAgICAgIHZhciBfY3JlYXRlQ29sbGVjdGlvbjI7XG5cbiAgICAgIGdsb2JhbC5TZXQgPSBjcmVhdGVDb2xsZWN0aW9uKChfY3JlYXRlQ29sbGVjdGlvbjIgPSB7XG4gICAgICAgIGhhczogc2V0SGFzLFxuXG4gICAgICAgIGFkZDogc2hhcmVkQWRkLFxuXG4gICAgICAgICdkZWxldGUnOiBzaGFyZWREZWxldGUsXG5cbiAgICAgICAgY2xlYXI6IHNoYXJlZENsZWFyLFxuXG4gICAgICAgIGtleXM6IHNoYXJlZFZhbHVlcyxcbiAgICAgICAgdmFsdWVzOiBzaGFyZWRWYWx1ZXMsXG5cbiAgICAgICAgZW50cmllczogc2V0RW50cmllcyxcblxuICAgICAgICBmb3JFYWNoOiBzaGFyZWRGb3JFYWNoXG4gICAgICB9LCBfY3JlYXRlQ29sbGVjdGlvbjJbU3ltYm9sLml0ZXJhdG9yXSA9IHNoYXJlZFZhbHVlcywgX2NyZWF0ZUNvbGxlY3Rpb24yKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBXZWFrU2V0ID09ICd1bmRlZmluZWQnKSB7XG4gICAgICBnbG9iYWwuV2Vha1NldCA9IGNyZWF0ZUNvbGxlY3Rpb24oe1xuICAgICAgICAnZGVsZXRlJzogc2hhcmVkRGVsZXRlLFxuXG4gICAgICAgIGFkZDogc2hhcmVkQWRkLFxuXG4gICAgICAgIGNsZWFyOiBzaGFyZWRDbGVhcixcblxuICAgICAgICBoYXM6IHNldEhhc1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbihwcm90bywgb2JqZWN0T25seSkge1xuICAgICAgZnVuY3Rpb24gQ29sbGVjdGlvbihhKSB7XG4gICAgICAgIGlmICghdGhpcyB8fCB0aGlzLmNvbnN0cnVjdG9yICE9PSBDb2xsZWN0aW9uKSByZXR1cm4gbmV3IENvbGxlY3Rpb24oYSk7XG4gICAgICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgICAgIHRoaXMuX2l0cCA9IFtdO1xuICAgICAgICB0aGlzLm9iamVjdE9ubHkgPSBvYmplY3RPbmx5O1xuXG4gICAgICAgIGlmIChhKSBpbml0LmNhbGwodGhpcywgYSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqZWN0T25seSkge1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3NpemUnLCB7XG4gICAgICAgICAgZ2V0OiBzaGFyZWRTaXplXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IENvbGxlY3Rpb247XG4gICAgICBDb2xsZWN0aW9uLnByb3RvdHlwZSA9IHByb3RvO1xuXG4gICAgICByZXR1cm4gQ29sbGVjdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0KGEpIHtcbiAgICAgIHZhciBpO1xuXG4gICAgICBpZiAodGhpcy5hZGQpIGEuZm9yRWFjaCh0aGlzLmFkZCwgdGhpcyk7ZWxzZSBhLmZvckVhY2goZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICB0aGlzLnNldChhWzBdLCBhWzFdKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhcmVkRGVsZXRlKGtleSkge1xuICAgICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy5fa2V5cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHRoaXMuX3ZhbHVlcy5zcGxpY2UoaSwgMSk7XG5cbiAgICAgICAgdGhpcy5faXRwLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICBpZiAoaSA8IHBbMF0pIHBbMF0tLTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAtMSA8IGk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHNoYXJlZEdldChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhcyhrZXkpID8gdGhpcy5fdmFsdWVzW2ldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhcyhsaXN0LCBrZXkpIHtcbiAgICAgIGlmICh0aGlzLm9iamVjdE9ubHkgJiYga2V5ICE9PSBPYmplY3Qoa2V5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgdmFsdWUgdXNlZCBhcyB3ZWFrIGNvbGxlY3Rpb24ga2V5XCIpO1xuXG4gICAgICBpZiAoa2V5ICE9IGtleSB8fCBrZXkgPT09IDApIGZvciAoaSA9IGxpc3QubGVuZ3RoOyBpLS0gJiYgIWlzKGxpc3RbaV0sIGtleSk7KSB7fSBlbHNlIGkgPSBsaXN0LmluZGV4T2Yoa2V5KTtcbiAgICAgIHJldHVybiAtMSA8IGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0SGFzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaGFzLmNhbGwodGhpcywgdGhpcy5fdmFsdWVzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwSGFzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaGFzLmNhbGwodGhpcywgdGhpcy5fa2V5cywgdmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYXJlZFNldChrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLmhhcyhrZXkpID8gdGhpcy5fdmFsdWVzW2ldID0gdmFsdWUgOiB0aGlzLl92YWx1ZXNbdGhpcy5fa2V5cy5wdXNoKGtleSkgLSAxXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhcmVkQWRkKHZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzKHZhbHVlKSkgdGhpcy5fdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhcmVkQ2xlYXIoKSB7XG4gICAgICAodGhpcy5fa2V5cyB8fCAwKS5sZW5ndGggPSB0aGlzLl92YWx1ZXMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaGFyZWRLZXlzKCkge1xuICAgICAgcmV0dXJuIHNoYXJlZEl0ZXJhdG9yKHRoaXMuX2l0cCwgdGhpcy5fa2V5cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhcmVkVmFsdWVzKCkge1xuICAgICAgcmV0dXJuIHNoYXJlZEl0ZXJhdG9yKHRoaXMuX2l0cCwgdGhpcy5fdmFsdWVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXBFbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHNoYXJlZEl0ZXJhdG9yKHRoaXMuX2l0cCwgdGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRFbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHNoYXJlZEl0ZXJhdG9yKHRoaXMuX2l0cCwgdGhpcy5fdmFsdWVzLCB0aGlzLl92YWx1ZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYXJlZEl0ZXJhdG9yKGl0cCwgYXJyYXksIGFycmF5Mikge1xuICAgICAgdmFyIF9yZWY7XG5cbiAgICAgIHZhciBwID0gWzBdLFxuICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgIGl0cC5wdXNoKHApO1xuICAgICAgcmV0dXJuIF9yZWYgPSB7fSwgX3JlZltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIF9yZWYubmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgIHZhciB2LFxuICAgICAgICAgICAgayA9IHBbMF07XG4gICAgICAgIGlmICghZG9uZSAmJiBrIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgdiA9IGFycmF5MiA/IFthcnJheVtrXSwgYXJyYXkyW2tdXSA6IGFycmF5W2tdO1xuICAgICAgICAgIHBbMF0rKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICBpdHAuc3BsaWNlKGl0cC5pbmRleE9mKHApLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBkb25lLCB2YWx1ZTogdiB9O1xuICAgICAgfSwgX3JlZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaGFyZWRTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhcmVkRm9yRWFjaChjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgdmFyIGl0ID0gdGhpcy5lbnRyaWVzKCk7XG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIHZhciByID0gaXQubmV4dCgpO1xuICAgICAgICBpZiAoci5kb25lKSBicmVhaztcbiAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCByLnZhbHVlWzFdLCByLnZhbHVlWzBdLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pKFBMQVRGT1JNLmdsb2JhbCk7XG59XG5cbmlmICh0eXBlb2YgRkVBVFVSRV9OT19FUzIwMTUgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgdmFyIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcblxuICBpZiAodHlwZW9mIFBMQVRGT1JNLmdsb2JhbC5SZWZsZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgIFBMQVRGT1JNLmdsb2JhbC5SZWZsZWN0ID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcbiAgICAgIGlmICgodHlwZW9mIHRhcmdldCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodGFyZ2V0KSkgPT09ICdvYmplY3QnID8gdGFyZ2V0ID09PSBudWxsIDogdHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWZsZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgUmVmbGVjdC5jb25zdHJ1Y3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0LmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChUYXJnZXQsIGFyZ3MpIHtcbiAgICAgIGlmIChhcmdzKSB7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsIGEpKSgpO1xuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIFJlZmxlY3Qub3duS2V5cyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3Qub3duS2V5cyA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobykpO1xuICAgIH07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiBGRUFUVVJFX05PX0VTTkVYVCA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICB2YXIgZW1wdHlNZXRhZGF0YSA9IE9iamVjdC5mcmVlemUoe30pO1xuICB2YXIgbWV0YWRhdGFDb250YWluZXJLZXkgPSAnX19tZXRhZGF0YV9fJztcblxuICBpZiAodHlwZW9mIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0LmdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHRhcmdldEtleSkge1xuICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShtZXRhZGF0YUNvbnRhaW5lcktleSkpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXRbbWV0YWRhdGFDb250YWluZXJLZXldW3RhcmdldEtleV0gfHwgZW1wdHlNZXRhZGF0YSlbbWV0YWRhdGFLZXldO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICAgICAgdmFyIG1ldGFkYXRhQ29udGFpbmVyID0gdGFyZ2V0Lmhhc093blByb3BlcnR5KG1ldGFkYXRhQ29udGFpbmVyS2V5KSA/IHRhcmdldFttZXRhZGF0YUNvbnRhaW5lcktleV0gOiB0YXJnZXRbbWV0YWRhdGFDb250YWluZXJLZXldID0ge307XG4gICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gbWV0YWRhdGFDb250YWluZXJbdGFyZ2V0S2V5XSB8fCAobWV0YWRhdGFDb250YWluZXJbdGFyZ2V0S2V5XSA9IHt9KTtcbiAgICAgIHRhcmdldENvbnRhaW5lclttZXRhZGF0YUtleV0gPSBtZXRhZGF0YVZhbHVlO1xuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0Lm1ldGFkYXRhID0gZnVuY3Rpb24gKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/aurelia-polyfills/dist/native-modules/aurelia-polyfills.js\n"); /***/ }), /***/ "./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js": /*!***********************************************************************************************!*\ !*** ./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js ***! \***********************************************************************************************/ /*! exports provided: State, StaticSegment, DynamicSegment, StarSegment, EpsilonSegment, RouteRecognizer */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"State\", function() { return State; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StaticSegment\", function() { return StaticSegment; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DynamicSegment\", function() { return DynamicSegment; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StarSegment\", function() { return StarSegment; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EpsilonSegment\", function() { return EpsilonSegment; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RouteRecognizer\", function() { return RouteRecognizer; });\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-path */ \"./node_modules/aurelia-path/dist/native-modules/aurelia-path.js\");\n\n\n\n\nvar State = function () {\n function State(charSpec) {\n \n\n this.charSpec = charSpec;\n this.nextStates = [];\n }\n\n State.prototype.get = function get(charSpec) {\n for (var _iterator = this.nextStates, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var child = _ref;\n\n var isEqual = child.charSpec.validChars === charSpec.validChars && child.charSpec.invalidChars === charSpec.invalidChars;\n\n if (isEqual) {\n return child;\n }\n }\n\n return undefined;\n };\n\n State.prototype.put = function put(charSpec) {\n var state = this.get(charSpec);\n\n if (state) {\n return state;\n }\n\n state = new State(charSpec);\n\n this.nextStates.push(state);\n\n if (charSpec.repeat) {\n state.nextStates.push(state);\n }\n\n return state;\n };\n\n State.prototype.match = function match(ch) {\n var nextStates = this.nextStates;\n var results = [];\n\n for (var i = 0, l = nextStates.length; i < l; i++) {\n var child = nextStates[i];\n var charSpec = child.charSpec;\n\n if (charSpec.validChars !== undefined) {\n if (charSpec.validChars.indexOf(ch) !== -1) {\n results.push(child);\n }\n } else if (charSpec.invalidChars !== undefined) {\n if (charSpec.invalidChars.indexOf(ch) === -1) {\n results.push(child);\n }\n }\n }\n\n return results;\n };\n\n return State;\n}();\n\nvar specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\'];\n\nvar escapeRegex = new RegExp('(\\\\' + specials.join('|\\\\') + ')', 'g');\n\nvar StaticSegment = function () {\n function StaticSegment(string, caseSensitive) {\n \n\n this.string = string;\n this.caseSensitive = caseSensitive;\n }\n\n StaticSegment.prototype.eachChar = function eachChar(callback) {\n var s = this.string;\n for (var i = 0, ii = s.length; i < ii; ++i) {\n var ch = s[i];\n callback({ validChars: this.caseSensitive ? ch : ch.toUpperCase() + ch.toLowerCase() });\n }\n };\n\n StaticSegment.prototype.regex = function regex() {\n return this.string.replace(escapeRegex, '\\\\$1');\n };\n\n StaticSegment.prototype.generate = function generate() {\n return this.string;\n };\n\n return StaticSegment;\n}();\n\nvar DynamicSegment = function () {\n function DynamicSegment(name, optional) {\n \n\n this.name = name;\n this.optional = optional;\n }\n\n DynamicSegment.prototype.eachChar = function eachChar(callback) {\n callback({ invalidChars: '/', repeat: true });\n };\n\n DynamicSegment.prototype.regex = function regex() {\n return '([^/]+)';\n };\n\n DynamicSegment.prototype.generate = function generate(params, consumed) {\n consumed[this.name] = true;\n return params[this.name];\n };\n\n return DynamicSegment;\n}();\n\nvar StarSegment = function () {\n function StarSegment(name) {\n \n\n this.name = name;\n }\n\n StarSegment.prototype.eachChar = function eachChar(callback) {\n callback({ invalidChars: '', repeat: true });\n };\n\n StarSegment.prototype.regex = function regex() {\n return '(.+)';\n };\n\n StarSegment.prototype.generate = function generate(params, consumed) {\n consumed[this.name] = true;\n return params[this.name];\n };\n\n return StarSegment;\n}();\n\nvar EpsilonSegment = function () {\n function EpsilonSegment() {\n \n }\n\n EpsilonSegment.prototype.eachChar = function eachChar() {};\n\n EpsilonSegment.prototype.regex = function regex() {\n return '';\n };\n\n EpsilonSegment.prototype.generate = function generate() {\n return '';\n };\n\n return EpsilonSegment;\n}();\n\nvar RouteRecognizer = function () {\n function RouteRecognizer() {\n \n\n this.rootState = new State();\n this.names = {};\n this.routes = new Map();\n }\n\n RouteRecognizer.prototype.add = function add(route) {\n var _this = this;\n\n if (Array.isArray(route)) {\n route.forEach(function (r) {\n return _this.add(r);\n });\n return undefined;\n }\n\n var currentState = this.rootState;\n var skippableStates = [];\n var regex = '^';\n var types = { statics: 0, dynamics: 0, stars: 0 };\n var names = [];\n var routeName = route.handler.name;\n var isEmpty = true;\n var segments = parse(route.path, names, types, route.caseSensitive);\n\n for (var i = 0, ii = segments.length; i < ii; i++) {\n var segment = segments[i];\n if (segment instanceof EpsilonSegment) {\n continue;\n }\n\n var _addSegment = addSegment(currentState, segment),\n firstState = _addSegment[0],\n nextState = _addSegment[1];\n\n for (var j = 0, jj = skippableStates.length; j < jj; j++) {\n skippableStates[j].nextStates.push(firstState);\n }\n\n if (segment.optional) {\n skippableStates.push(nextState);\n regex += '(?:/' + segment.regex() + ')?';\n } else {\n currentState = nextState;\n regex += '/' + segment.regex();\n skippableStates.length = 0;\n isEmpty = false;\n }\n }\n\n if (isEmpty) {\n currentState = currentState.put({ validChars: '/' });\n regex += '/?';\n }\n\n var handlers = [{ handler: route.handler, names: names }];\n\n this.routes.set(route.handler, { segments: segments, handlers: handlers });\n if (routeName) {\n var routeNames = Array.isArray(routeName) ? routeName : [routeName];\n for (var _i2 = 0; _i2 < routeNames.length; _i2++) {\n if (!(routeNames[_i2] in this.names)) {\n this.names[routeNames[_i2]] = { segments: segments, handlers: handlers };\n }\n }\n }\n\n for (var _i3 = 0; _i3 < skippableStates.length; _i3++) {\n var state = skippableStates[_i3];\n state.handlers = handlers;\n state.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n state.types = types;\n }\n\n currentState.handlers = handlers;\n currentState.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n currentState.types = types;\n\n return currentState;\n };\n\n RouteRecognizer.prototype.getRoute = function getRoute(nameOrRoute) {\n return typeof nameOrRoute === 'string' ? this.names[nameOrRoute] : this.routes.get(nameOrRoute);\n };\n\n RouteRecognizer.prototype.handlersFor = function handlersFor(nameOrRoute) {\n var route = this.getRoute(nameOrRoute);\n if (!route) {\n throw new Error('There is no route named ' + nameOrRoute);\n }\n\n return [].concat(route.handlers);\n };\n\n RouteRecognizer.prototype.hasRoute = function hasRoute(nameOrRoute) {\n return !!this.getRoute(nameOrRoute);\n };\n\n RouteRecognizer.prototype.generate = function generate(nameOrRoute, params) {\n var route = this.getRoute(nameOrRoute);\n if (!route) {\n throw new Error('There is no route named ' + nameOrRoute);\n }\n\n var handler = route.handlers[0].handler;\n if (handler.generationUsesHref) {\n return handler.href;\n }\n\n var routeParams = Object.assign({}, params);\n var segments = route.segments;\n var consumed = {};\n var output = '';\n\n for (var i = 0, l = segments.length; i < l; i++) {\n var segment = segments[i];\n\n if (segment instanceof EpsilonSegment) {\n continue;\n }\n\n var segmentValue = segment.generate(routeParams, consumed);\n if (segmentValue === null || segmentValue === undefined) {\n if (!segment.optional) {\n throw new Error('A value is required for route parameter \\'' + segment.name + '\\' in route \\'' + nameOrRoute + '\\'.');\n }\n } else {\n output += '/';\n output += segmentValue;\n }\n }\n\n if (output.charAt(0) !== '/') {\n output = '/' + output;\n }\n\n for (var param in consumed) {\n delete routeParams[param];\n }\n\n var queryString = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_0__[\"buildQueryString\"])(routeParams);\n output += queryString ? '?' + queryString : '';\n\n return output;\n };\n\n RouteRecognizer.prototype.recognize = function recognize(path) {\n var states = [this.rootState];\n var queryParams = {};\n var isSlashDropped = false;\n var normalizedPath = path;\n\n var queryStart = normalizedPath.indexOf('?');\n if (queryStart !== -1) {\n var queryString = normalizedPath.substr(queryStart + 1, normalizedPath.length);\n normalizedPath = normalizedPath.substr(0, queryStart);\n queryParams = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_0__[\"parseQueryString\"])(queryString);\n }\n\n normalizedPath = decodeURI(normalizedPath);\n\n if (normalizedPath.charAt(0) !== '/') {\n normalizedPath = '/' + normalizedPath;\n }\n\n var pathLen = normalizedPath.length;\n if (pathLen > 1 && normalizedPath.charAt(pathLen - 1) === '/') {\n normalizedPath = normalizedPath.substr(0, pathLen - 1);\n isSlashDropped = true;\n }\n\n for (var i = 0, l = normalizedPath.length; i < l; i++) {\n states = recognizeChar(states, normalizedPath.charAt(i));\n if (!states.length) {\n break;\n }\n }\n\n var solutions = [];\n for (var _i4 = 0, _l = states.length; _i4 < _l; _i4++) {\n if (states[_i4].handlers) {\n solutions.push(states[_i4]);\n }\n }\n\n states = sortSolutions(solutions);\n\n var state = solutions[0];\n if (state && state.handlers) {\n if (isSlashDropped && state.regex.source.slice(-5) === '(.+)$') {\n normalizedPath = normalizedPath + '/';\n }\n\n return findHandler(state, normalizedPath, queryParams);\n }\n };\n\n return RouteRecognizer;\n}();\n\nvar RecognizeResults = function RecognizeResults(queryParams) {\n \n\n this.splice = Array.prototype.splice;\n this.slice = Array.prototype.slice;\n this.push = Array.prototype.push;\n this.length = 0;\n this.queryParams = queryParams || {};\n};\n\nfunction parse(route, names, types, caseSensitive) {\n var normalizedRoute = route;\n if (route.charAt(0) === '/') {\n normalizedRoute = route.substr(1);\n }\n\n var results = [];\n\n var splitRoute = normalizedRoute.split('/');\n for (var i = 0, ii = splitRoute.length; i < ii; ++i) {\n var segment = splitRoute[i];\n\n var match = segment.match(/^:([^?]+)(\\?)?$/);\n if (match) {\n var _match = match,\n _name = _match[1],\n optional = _match[2];\n\n if (_name.indexOf('=') !== -1) {\n throw new Error('Parameter ' + _name + ' in route ' + route + ' has a default value, which is not supported.');\n }\n results.push(new DynamicSegment(_name, !!optional));\n names.push(_name);\n types.dynamics++;\n continue;\n }\n\n match = segment.match(/^\\*(.+)$/);\n if (match) {\n results.push(new StarSegment(match[1]));\n names.push(match[1]);\n types.stars++;\n } else if (segment === '') {\n results.push(new EpsilonSegment());\n } else {\n results.push(new StaticSegment(segment, caseSensitive));\n types.statics++;\n }\n }\n\n return results;\n}\n\nfunction sortSolutions(states) {\n return states.sort(function (a, b) {\n if (a.types.stars !== b.types.stars) {\n return a.types.stars - b.types.stars;\n }\n\n if (a.types.stars) {\n if (a.types.statics !== b.types.statics) {\n return b.types.statics - a.types.statics;\n }\n if (a.types.dynamics !== b.types.dynamics) {\n return b.types.dynamics - a.types.dynamics;\n }\n }\n\n if (a.types.dynamics !== b.types.dynamics) {\n return a.types.dynamics - b.types.dynamics;\n }\n\n if (a.types.statics !== b.types.statics) {\n return b.types.statics - a.types.statics;\n }\n\n return 0;\n });\n}\n\nfunction recognizeChar(states, ch) {\n var nextStates = [];\n\n for (var i = 0, l = states.length; i < l; i++) {\n var state = states[i];\n nextStates.push.apply(nextStates, state.match(ch));\n }\n\n return nextStates;\n}\n\nfunction findHandler(state, path, queryParams) {\n var handlers = state.handlers;\n var regex = state.regex;\n var captures = path.match(regex);\n var currentCapture = 1;\n var result = new RecognizeResults(queryParams);\n\n for (var i = 0, l = handlers.length; i < l; i++) {\n var _handler = handlers[i];\n var _names = _handler.names;\n var _params = {};\n\n for (var j = 0, m = _names.length; j < m; j++) {\n _params[_names[j]] = captures[currentCapture++];\n }\n\n result.push({ handler: _handler.handler, params: _params, isDynamic: !!_names.length });\n }\n\n return result;\n}\n\nfunction addSegment(currentState, segment) {\n var firstState = currentState.put({ validChars: '/' });\n var nextState = firstState;\n segment.eachChar(function (ch) {\n nextState = nextState.put(ch);\n });\n\n return [firstState, nextState];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1yb3V0ZS1yZWNvZ25pemVyL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS1yb3V0ZS1yZWNvZ25pemVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtcm91dGUtcmVjb2duaXplci9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtcm91dGUtcmVjb2duaXplci5qcz9kMWViIl0sInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBidWlsZFF1ZXJ5U3RyaW5nLCBwYXJzZVF1ZXJ5U3RyaW5nIH0gZnJvbSAnYXVyZWxpYS1wYXRoJztcblxuZXhwb3J0IHZhciBTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RhdGUoY2hhclNwZWMpIHtcbiAgICBcblxuICAgIHRoaXMuY2hhclNwZWMgPSBjaGFyU3BlYztcbiAgICB0aGlzLm5leHRTdGF0ZXMgPSBbXTtcbiAgfVxuXG4gIFN0YXRlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQoY2hhclNwZWMpIHtcbiAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSB0aGlzLm5leHRTdGF0ZXMsIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheShfaXRlcmF0b3IpLCBfaSA9IDAsIF9pdGVyYXRvciA9IF9pc0FycmF5ID8gX2l0ZXJhdG9yIDogX2l0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0oKTs7KSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgaWYgKF9pc0FycmF5KSB7XG4gICAgICAgIGlmIChfaSA+PSBfaXRlcmF0b3IubGVuZ3RoKSBicmVhaztcbiAgICAgICAgX3JlZiA9IF9pdGVyYXRvcltfaSsrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pID0gX2l0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKF9pLmRvbmUpIGJyZWFrO1xuICAgICAgICBfcmVmID0gX2kudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZCA9IF9yZWY7XG5cbiAgICAgIHZhciBpc0VxdWFsID0gY2hpbGQuY2hhclNwZWMudmFsaWRDaGFycyA9PT0gY2hhclNwZWMudmFsaWRDaGFycyAmJiBjaGlsZC5jaGFyU3BlYy5pbnZhbGlkQ2hhcnMgPT09IGNoYXJTcGVjLmludmFsaWRDaGFycztcblxuICAgICAgaWYgKGlzRXF1YWwpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgU3RhdGUucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIHB1dChjaGFyU3BlYykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuZ2V0KGNoYXJTcGVjKTtcblxuICAgIGlmIChzdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIHN0YXRlID0gbmV3IFN0YXRlKGNoYXJTcGVjKTtcblxuICAgIHRoaXMubmV4dFN0YXRlcy5wdXNoKHN0YXRlKTtcblxuICAgIGlmIChjaGFyU3BlYy5yZXBlYXQpIHtcbiAgICAgIHN0YXRlLm5leHRTdGF0ZXMucHVzaChzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9O1xuXG4gIFN0YXRlLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIG1hdGNoKGNoKSB7XG4gICAgdmFyIG5leHRTdGF0ZXMgPSB0aGlzLm5leHRTdGF0ZXM7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmV4dFN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5leHRTdGF0ZXNbaV07XG4gICAgICB2YXIgY2hhclNwZWMgPSBjaGlsZC5jaGFyU3BlYztcblxuICAgICAgaWYgKGNoYXJTcGVjLnZhbGlkQ2hhcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2hhclNwZWMudmFsaWRDaGFycy5pbmRleE9mKGNoKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoYXJTcGVjLmludmFsaWRDaGFycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjaGFyU3BlYy5pbnZhbGlkQ2hhcnMuaW5kZXhPZihjaCkgPT09IC0xKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIHJldHVybiBTdGF0ZTtcbn0oKTtcblxudmFyIHNwZWNpYWxzID0gWycvJywgJy4nLCAnKicsICcrJywgJz8nLCAnfCcsICcoJywgJyknLCAnWycsICddJywgJ3snLCAnfScsICdcXFxcJ107XG5cbnZhciBlc2NhcGVSZWdleCA9IG5ldyBSZWdFeHAoJyhcXFxcJyArIHNwZWNpYWxzLmpvaW4oJ3xcXFxcJykgKyAnKScsICdnJyk7XG5cbmV4cG9ydCB2YXIgU3RhdGljU2VnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RhdGljU2VnbWVudChzdHJpbmcsIGNhc2VTZW5zaXRpdmUpIHtcbiAgICBcblxuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMuY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBTdGF0aWNTZWdtZW50LnByb3RvdHlwZS5lYWNoQ2hhciA9IGZ1bmN0aW9uIGVhY2hDaGFyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmluZztcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHZhciBjaCA9IHNbaV07XG4gICAgICBjYWxsYmFjayh7IHZhbGlkQ2hhcnM6IHRoaXMuY2FzZVNlbnNpdGl2ZSA/IGNoIDogY2gudG9VcHBlckNhc2UoKSArIGNoLnRvTG93ZXJDYXNlKCkgfSk7XG4gICAgfVxuICB9O1xuXG4gIFN0YXRpY1NlZ21lbnQucHJvdG90eXBlLnJlZ2V4ID0gZnVuY3Rpb24gcmVnZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nLnJlcGxhY2UoZXNjYXBlUmVnZXgsICdcXFxcJDEnKTtcbiAgfTtcblxuICBTdGF0aWNTZWdtZW50LnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIGdlbmVyYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfTtcblxuICByZXR1cm4gU3RhdGljU2VnbWVudDtcbn0oKTtcblxuZXhwb3J0IHZhciBEeW5hbWljU2VnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRHluYW1pY1NlZ21lbnQobmFtZSwgb3B0aW9uYWwpIHtcbiAgICBcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICB9XG5cbiAgRHluYW1pY1NlZ21lbnQucHJvdG90eXBlLmVhY2hDaGFyID0gZnVuY3Rpb24gZWFjaENoYXIoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh7IGludmFsaWRDaGFyczogJy8nLCByZXBlYXQ6IHRydWUgfSk7XG4gIH07XG5cbiAgRHluYW1pY1NlZ21lbnQucHJvdG90eXBlLnJlZ2V4ID0gZnVuY3Rpb24gcmVnZXgoKSB7XG4gICAgcmV0dXJuICcoW14vXSspJztcbiAgfTtcblxuICBEeW5hbWljU2VnbWVudC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShwYXJhbXMsIGNvbnN1bWVkKSB7XG4gICAgY29uc3VtZWRbdGhpcy5uYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHBhcmFtc1t0aGlzLm5hbWVdO1xuICB9O1xuXG4gIHJldHVybiBEeW5hbWljU2VnbWVudDtcbn0oKTtcblxuZXhwb3J0IHZhciBTdGFyU2VnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RhclNlZ21lbnQobmFtZSkge1xuICAgIFxuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIFN0YXJTZWdtZW50LnByb3RvdHlwZS5lYWNoQ2hhciA9IGZ1bmN0aW9uIGVhY2hDaGFyKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2soeyBpbnZhbGlkQ2hhcnM6ICcnLCByZXBlYXQ6IHRydWUgfSk7XG4gIH07XG5cbiAgU3RhclNlZ21lbnQucHJvdG90eXBlLnJlZ2V4ID0gZnVuY3Rpb24gcmVnZXgoKSB7XG4gICAgcmV0dXJuICcoLispJztcbiAgfTtcblxuICBTdGFyU2VnbWVudC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShwYXJhbXMsIGNvbnN1bWVkKSB7XG4gICAgY29uc3VtZWRbdGhpcy5uYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHBhcmFtc1t0aGlzLm5hbWVdO1xuICB9O1xuXG4gIHJldHVybiBTdGFyU2VnbWVudDtcbn0oKTtcblxuZXhwb3J0IHZhciBFcHNpbG9uU2VnbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXBzaWxvblNlZ21lbnQoKSB7XG4gICAgXG4gIH1cblxuICBFcHNpbG9uU2VnbWVudC5wcm90b3R5cGUuZWFjaENoYXIgPSBmdW5jdGlvbiBlYWNoQ2hhcigpIHt9O1xuXG4gIEVwc2lsb25TZWdtZW50LnByb3RvdHlwZS5yZWdleCA9IGZ1bmN0aW9uIHJlZ2V4KCkge1xuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBFcHNpbG9uU2VnbWVudC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZSgpIHtcbiAgICByZXR1cm4gJyc7XG4gIH07XG5cbiAgcmV0dXJuIEVwc2lsb25TZWdtZW50O1xufSgpO1xuXG5leHBvcnQgdmFyIFJvdXRlUmVjb2duaXplciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUm91dGVSZWNvZ25pemVyKCkge1xuICAgIFxuXG4gICAgdGhpcy5yb290U3RhdGUgPSBuZXcgU3RhdGUoKTtcbiAgICB0aGlzLm5hbWVzID0ge307XG4gICAgdGhpcy5yb3V0ZXMgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBSb3V0ZVJlY29nbml6ZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChyb3V0ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZSkpIHtcbiAgICAgIHJvdXRlLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmFkZChyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudFN0YXRlID0gdGhpcy5yb290U3RhdGU7XG4gICAgdmFyIHNraXBwYWJsZVN0YXRlcyA9IFtdO1xuICAgIHZhciByZWdleCA9ICdeJztcbiAgICB2YXIgdHlwZXMgPSB7IHN0YXRpY3M6IDAsIGR5bmFtaWNzOiAwLCBzdGFyczogMCB9O1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIHZhciByb3V0ZU5hbWUgPSByb3V0ZS5oYW5kbGVyLm5hbWU7XG4gICAgdmFyIGlzRW1wdHkgPSB0cnVlO1xuICAgIHZhciBzZWdtZW50cyA9IHBhcnNlKHJvdXRlLnBhdGgsIG5hbWVzLCB0eXBlcywgcm91dGUuY2FzZVNlbnNpdGl2ZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgICAgaWYgKHNlZ21lbnQgaW5zdGFuY2VvZiBFcHNpbG9uU2VnbWVudCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9hZGRTZWdtZW50ID0gYWRkU2VnbWVudChjdXJyZW50U3RhdGUsIHNlZ21lbnQpLFxuICAgICAgICAgIGZpcnN0U3RhdGUgPSBfYWRkU2VnbWVudFswXSxcbiAgICAgICAgICBuZXh0U3RhdGUgPSBfYWRkU2VnbWVudFsxXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gc2tpcHBhYmxlU3RhdGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgc2tpcHBhYmxlU3RhdGVzW2pdLm5leHRTdGF0ZXMucHVzaChmaXJzdFN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnQub3B0aW9uYWwpIHtcbiAgICAgICAgc2tpcHBhYmxlU3RhdGVzLnB1c2gobmV4dFN0YXRlKTtcbiAgICAgICAgcmVnZXggKz0gJyg/Oi8nICsgc2VnbWVudC5yZWdleCgpICsgJyk/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgICAgcmVnZXggKz0gJy8nICsgc2VnbWVudC5yZWdleCgpO1xuICAgICAgICBza2lwcGFibGVTdGF0ZXMubGVuZ3RoID0gMDtcbiAgICAgICAgaXNFbXB0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50U3RhdGUucHV0KHsgdmFsaWRDaGFyczogJy8nIH0pO1xuICAgICAgcmVnZXggKz0gJy8/JztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSBbeyBoYW5kbGVyOiByb3V0ZS5oYW5kbGVyLCBuYW1lczogbmFtZXMgfV07XG5cbiAgICB0aGlzLnJvdXRlcy5zZXQocm91dGUuaGFuZGxlciwgeyBzZWdtZW50czogc2VnbWVudHMsIGhhbmRsZXJzOiBoYW5kbGVycyB9KTtcbiAgICBpZiAocm91dGVOYW1lKSB7XG4gICAgICB2YXIgcm91dGVOYW1lcyA9IEFycmF5LmlzQXJyYXkocm91dGVOYW1lKSA/IHJvdXRlTmFtZSA6IFtyb3V0ZU5hbWVdO1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcm91dGVOYW1lcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIGlmICghKHJvdXRlTmFtZXNbX2kyXSBpbiB0aGlzLm5hbWVzKSkge1xuICAgICAgICAgIHRoaXMubmFtZXNbcm91dGVOYW1lc1tfaTJdXSA9IHsgc2VnbWVudHM6IHNlZ21lbnRzLCBoYW5kbGVyczogaGFuZGxlcnMgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IHNraXBwYWJsZVN0YXRlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICB2YXIgc3RhdGUgPSBza2lwcGFibGVTdGF0ZXNbX2kzXTtcbiAgICAgIHN0YXRlLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gICAgICBzdGF0ZS5yZWdleCA9IG5ldyBSZWdFeHAocmVnZXggKyAnJCcsIHJvdXRlLmNhc2VTZW5zaXRpdmUgPyAnJyA6ICdpJyk7XG4gICAgICBzdGF0ZS50eXBlcyA9IHR5cGVzO1xuICAgIH1cblxuICAgIGN1cnJlbnRTdGF0ZS5oYW5kbGVycyA9IGhhbmRsZXJzO1xuICAgIGN1cnJlbnRTdGF0ZS5yZWdleCA9IG5ldyBSZWdFeHAocmVnZXggKyAnJCcsIHJvdXRlLmNhc2VTZW5zaXRpdmUgPyAnJyA6ICdpJyk7XG4gICAgY3VycmVudFN0YXRlLnR5cGVzID0gdHlwZXM7XG5cbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xuICB9O1xuXG4gIFJvdXRlUmVjb2duaXplci5wcm90b3R5cGUuZ2V0Um91dGUgPSBmdW5jdGlvbiBnZXRSb3V0ZShuYW1lT3JSb3V0ZSkge1xuICAgIHJldHVybiB0eXBlb2YgbmFtZU9yUm91dGUgPT09ICdzdHJpbmcnID8gdGhpcy5uYW1lc1tuYW1lT3JSb3V0ZV0gOiB0aGlzLnJvdXRlcy5nZXQobmFtZU9yUm91dGUpO1xuICB9O1xuXG4gIFJvdXRlUmVjb2duaXplci5wcm90b3R5cGUuaGFuZGxlcnNGb3IgPSBmdW5jdGlvbiBoYW5kbGVyc0ZvcihuYW1lT3JSb3V0ZSkge1xuICAgIHZhciByb3V0ZSA9IHRoaXMuZ2V0Um91dGUobmFtZU9yUm91dGUpO1xuICAgIGlmICghcm91dGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gcm91dGUgbmFtZWQgJyArIG5hbWVPclJvdXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW10uY29uY2F0KHJvdXRlLmhhbmRsZXJzKTtcbiAgfTtcblxuICBSb3V0ZVJlY29nbml6ZXIucHJvdG90eXBlLmhhc1JvdXRlID0gZnVuY3Rpb24gaGFzUm91dGUobmFtZU9yUm91dGUpIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFJvdXRlKG5hbWVPclJvdXRlKTtcbiAgfTtcblxuICBSb3V0ZVJlY29nbml6ZXIucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobmFtZU9yUm91dGUsIHBhcmFtcykge1xuICAgIHZhciByb3V0ZSA9IHRoaXMuZ2V0Um91dGUobmFtZU9yUm91dGUpO1xuICAgIGlmICghcm91dGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gcm91dGUgbmFtZWQgJyArIG5hbWVPclJvdXRlKTtcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlciA9IHJvdXRlLmhhbmRsZXJzWzBdLmhhbmRsZXI7XG4gICAgaWYgKGhhbmRsZXIuZ2VuZXJhdGlvblVzZXNIcmVmKSB7XG4gICAgICByZXR1cm4gaGFuZGxlci5ocmVmO1xuICAgIH1cblxuICAgIHZhciByb3V0ZVBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyk7XG4gICAgdmFyIHNlZ21lbnRzID0gcm91dGUuc2VnbWVudHM7XG4gICAgdmFyIGNvbnN1bWVkID0ge307XG4gICAgdmFyIG91dHB1dCA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07XG5cbiAgICAgIGlmIChzZWdtZW50IGluc3RhbmNlb2YgRXBzaWxvblNlZ21lbnQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWdtZW50VmFsdWUgPSBzZWdtZW50LmdlbmVyYXRlKHJvdXRlUGFyYW1zLCBjb25zdW1lZCk7XG4gICAgICBpZiAoc2VnbWVudFZhbHVlID09PSBudWxsIHx8IHNlZ21lbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghc2VnbWVudC5vcHRpb25hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQSB2YWx1ZSBpcyByZXF1aXJlZCBmb3Igcm91dGUgcGFyYW1ldGVyIFxcJycgKyBzZWdtZW50Lm5hbWUgKyAnXFwnIGluIHJvdXRlIFxcJycgKyBuYW1lT3JSb3V0ZSArICdcXCcuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCArPSAnLyc7XG4gICAgICAgIG91dHB1dCArPSBzZWdtZW50VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG91dHB1dC5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgb3V0cHV0ID0gJy8nICsgb3V0cHV0O1xuICAgIH1cblxuICAgIGZvciAodmFyIHBhcmFtIGluIGNvbnN1bWVkKSB7XG4gICAgICBkZWxldGUgcm91dGVQYXJhbXNbcGFyYW1dO1xuICAgIH1cblxuICAgIHZhciBxdWVyeVN0cmluZyA9IGJ1aWxkUXVlcnlTdHJpbmcocm91dGVQYXJhbXMpO1xuICAgIG91dHB1dCArPSBxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJyc7XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIFJvdXRlUmVjb2duaXplci5wcm90b3R5cGUucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKHBhdGgpIHtcbiAgICB2YXIgc3RhdGVzID0gW3RoaXMucm9vdFN0YXRlXTtcbiAgICB2YXIgcXVlcnlQYXJhbXMgPSB7fTtcbiAgICB2YXIgaXNTbGFzaERyb3BwZWQgPSBmYWxzZTtcbiAgICB2YXIgbm9ybWFsaXplZFBhdGggPSBwYXRoO1xuXG4gICAgdmFyIHF1ZXJ5U3RhcnQgPSBub3JtYWxpemVkUGF0aC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICB2YXIgcXVlcnlTdHJpbmcgPSBub3JtYWxpemVkUGF0aC5zdWJzdHIocXVlcnlTdGFydCArIDEsIG5vcm1hbGl6ZWRQYXRoLmxlbmd0aCk7XG4gICAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnN1YnN0cigwLCBxdWVyeVN0YXJ0KTtcbiAgICAgIHF1ZXJ5UGFyYW1zID0gcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZyk7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplZFBhdGggPSBkZWNvZGVVUkkobm9ybWFsaXplZFBhdGgpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRQYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICBub3JtYWxpemVkUGF0aCA9ICcvJyArIG5vcm1hbGl6ZWRQYXRoO1xuICAgIH1cblxuICAgIHZhciBwYXRoTGVuID0gbm9ybWFsaXplZFBhdGgubGVuZ3RoO1xuICAgIGlmIChwYXRoTGVuID4gMSAmJiBub3JtYWxpemVkUGF0aC5jaGFyQXQocGF0aExlbiAtIDEpID09PSAnLycpIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguc3Vic3RyKDAsIHBhdGhMZW4gLSAxKTtcbiAgICAgIGlzU2xhc2hEcm9wcGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vcm1hbGl6ZWRQYXRoLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgc3RhdGVzID0gcmVjb2duaXplQ2hhcihzdGF0ZXMsIG5vcm1hbGl6ZWRQYXRoLmNoYXJBdChpKSk7XG4gICAgICBpZiAoIXN0YXRlcy5sZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNvbHV0aW9ucyA9IFtdO1xuICAgIGZvciAodmFyIF9pNCA9IDAsIF9sID0gc3RhdGVzLmxlbmd0aDsgX2k0IDwgX2w7IF9pNCsrKSB7XG4gICAgICBpZiAoc3RhdGVzW19pNF0uaGFuZGxlcnMpIHtcbiAgICAgICAgc29sdXRpb25zLnB1c2goc3RhdGVzW19pNF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlcyA9IHNvcnRTb2x1dGlvbnMoc29sdXRpb25zKTtcblxuICAgIHZhciBzdGF0ZSA9IHNvbHV0aW9uc1swXTtcbiAgICBpZiAoc3RhdGUgJiYgc3RhdGUuaGFuZGxlcnMpIHtcbiAgICAgIGlmIChpc1NsYXNoRHJvcHBlZCAmJiBzdGF0ZS5yZWdleC5zb3VyY2Uuc2xpY2UoLTUpID09PSAnKC4rKSQnKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGggKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaW5kSGFuZGxlcihzdGF0ZSwgbm9ybWFsaXplZFBhdGgsIHF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFJvdXRlUmVjb2duaXplcjtcbn0oKTtcblxudmFyIFJlY29nbml6ZVJlc3VsdHMgPSBmdW5jdGlvbiBSZWNvZ25pemVSZXN1bHRzKHF1ZXJ5UGFyYW1zKSB7XG4gIFxuXG4gIHRoaXMuc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTtcbiAgdGhpcy5zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiAgdGhpcy5wdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5xdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zIHx8IHt9O1xufTtcblxuZnVuY3Rpb24gcGFyc2Uocm91dGUsIG5hbWVzLCB0eXBlcywgY2FzZVNlbnNpdGl2ZSkge1xuICB2YXIgbm9ybWFsaXplZFJvdXRlID0gcm91dGU7XG4gIGlmIChyb3V0ZS5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgIG5vcm1hbGl6ZWRSb3V0ZSA9IHJvdXRlLnN1YnN0cigxKTtcbiAgfVxuXG4gIHZhciByZXN1bHRzID0gW107XG5cbiAgdmFyIHNwbGl0Um91dGUgPSBub3JtYWxpemVkUm91dGUuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3BsaXRSb3V0ZS5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzcGxpdFJvdXRlW2ldO1xuXG4gICAgdmFyIG1hdGNoID0gc2VnbWVudC5tYXRjaCgvXjooW14/XSspKFxcPyk/JC8pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFyIF9tYXRjaCA9IG1hdGNoLFxuICAgICAgICAgIF9uYW1lID0gX21hdGNoWzFdLFxuICAgICAgICAgIG9wdGlvbmFsID0gX21hdGNoWzJdO1xuXG4gICAgICBpZiAoX25hbWUuaW5kZXhPZignPScpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciAnICsgX25hbWUgKyAnIGluIHJvdXRlICcgKyByb3V0ZSArICcgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdHMucHVzaChuZXcgRHluYW1pY1NlZ21lbnQoX25hbWUsICEhb3B0aW9uYWwpKTtcbiAgICAgIG5hbWVzLnB1c2goX25hbWUpO1xuICAgICAgdHlwZXMuZHluYW1pY3MrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG1hdGNoID0gc2VnbWVudC5tYXRjaCgvXlxcKiguKykkLyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXN1bHRzLnB1c2gobmV3IFN0YXJTZWdtZW50KG1hdGNoWzFdKSk7XG4gICAgICBuYW1lcy5wdXNoKG1hdGNoWzFdKTtcbiAgICAgIHR5cGVzLnN0YXJzKys7XG4gICAgfSBlbHNlIGlmIChzZWdtZW50ID09PSAnJykge1xuICAgICAgcmVzdWx0cy5wdXNoKG5ldyBFcHNpbG9uU2VnbWVudCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cy5wdXNoKG5ldyBTdGF0aWNTZWdtZW50KHNlZ21lbnQsIGNhc2VTZW5zaXRpdmUpKTtcbiAgICAgIHR5cGVzLnN0YXRpY3MrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gc29ydFNvbHV0aW9ucyhzdGF0ZXMpIHtcbiAgcmV0dXJuIHN0YXRlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgaWYgKGEudHlwZXMuc3RhcnMgIT09IGIudHlwZXMuc3RhcnMpIHtcbiAgICAgIHJldHVybiBhLnR5cGVzLnN0YXJzIC0gYi50eXBlcy5zdGFycztcbiAgICB9XG5cbiAgICBpZiAoYS50eXBlcy5zdGFycykge1xuICAgICAgaWYgKGEudHlwZXMuc3RhdGljcyAhPT0gYi50eXBlcy5zdGF0aWNzKSB7XG4gICAgICAgIHJldHVybiBiLnR5cGVzLnN0YXRpY3MgLSBhLnR5cGVzLnN0YXRpY3M7XG4gICAgICB9XG4gICAgICBpZiAoYS50eXBlcy5keW5hbWljcyAhPT0gYi50eXBlcy5keW5hbWljcykge1xuICAgICAgICByZXR1cm4gYi50eXBlcy5keW5hbWljcyAtIGEudHlwZXMuZHluYW1pY3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEudHlwZXMuZHluYW1pY3MgIT09IGIudHlwZXMuZHluYW1pY3MpIHtcbiAgICAgIHJldHVybiBhLnR5cGVzLmR5bmFtaWNzIC0gYi50eXBlcy5keW5hbWljcztcbiAgICB9XG5cbiAgICBpZiAoYS50eXBlcy5zdGF0aWNzICE9PSBiLnR5cGVzLnN0YXRpY3MpIHtcbiAgICAgIHJldHVybiBiLnR5cGVzLnN0YXRpY3MgLSBhLnR5cGVzLnN0YXRpY3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWNvZ25pemVDaGFyKHN0YXRlcywgY2gpIHtcbiAgdmFyIG5leHRTdGF0ZXMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IHN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbaV07XG4gICAgbmV4dFN0YXRlcy5wdXNoLmFwcGx5KG5leHRTdGF0ZXMsIHN0YXRlLm1hdGNoKGNoKSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlcztcbn1cblxuZnVuY3Rpb24gZmluZEhhbmRsZXIoc3RhdGUsIHBhdGgsIHF1ZXJ5UGFyYW1zKSB7XG4gIHZhciBoYW5kbGVycyA9IHN0YXRlLmhhbmRsZXJzO1xuICB2YXIgcmVnZXggPSBzdGF0ZS5yZWdleDtcbiAgdmFyIGNhcHR1cmVzID0gcGF0aC5tYXRjaChyZWdleCk7XG4gIHZhciBjdXJyZW50Q2FwdHVyZSA9IDE7XG4gIHZhciByZXN1bHQgPSBuZXcgUmVjb2duaXplUmVzdWx0cyhxdWVyeVBhcmFtcyk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgX2hhbmRsZXIgPSBoYW5kbGVyc1tpXTtcbiAgICB2YXIgX25hbWVzID0gX2hhbmRsZXIubmFtZXM7XG4gICAgdmFyIF9wYXJhbXMgPSB7fTtcblxuICAgIGZvciAodmFyIGogPSAwLCBtID0gX25hbWVzLmxlbmd0aDsgaiA8IG07IGorKykge1xuICAgICAgX3BhcmFtc1tfbmFtZXNbal1dID0gY2FwdHVyZXNbY3VycmVudENhcHR1cmUrK107XG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2goeyBoYW5kbGVyOiBfaGFuZGxlci5oYW5kbGVyLCBwYXJhbXM6IF9wYXJhbXMsIGlzRHluYW1pYzogISFfbmFtZXMubGVuZ3RoIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYWRkU2VnbWVudChjdXJyZW50U3RhdGUsIHNlZ21lbnQpIHtcbiAgdmFyIGZpcnN0U3RhdGUgPSBjdXJyZW50U3RhdGUucHV0KHsgdmFsaWRDaGFyczogJy8nIH0pO1xuICB2YXIgbmV4dFN0YXRlID0gZmlyc3RTdGF0ZTtcbiAgc2VnbWVudC5lYWNoQ2hhcihmdW5jdGlvbiAoY2gpIHtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUucHV0KGNoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIFtmaXJzdFN0YXRlLCBuZXh0U3RhdGVdO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js\n"); /***/ }), /***/ "./node_modules/aurelia-router/dist/native-modules/aurelia-router.js": /*!***************************************************************************!*\ !*** ./node_modules/aurelia-router/dist/native-modules/aurelia-router.js ***! \***************************************************************************/ /*! exports provided: ActivateNextStep, AppRouter, BuildNavigationPlanStep, CanActivateNextStep, CanDeactivatePreviousStep, CommitChangesStep, DeactivatePreviousStep, LoadRouteStep, NavModel, NavigationInstruction, Pipeline, PipelineProvider, PipelineSlotName, PipelineStatus, Redirect, RedirectToRoute, RouteLoader, Router, RouterConfiguration, RouterEvent, activationStrategy, isNavigationCommand */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(Promise) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActivateNextStep\", function() { return ActivateNextStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AppRouter\", function() { return AppRouter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BuildNavigationPlanStep\", function() { return BuildNavigationPlanStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanActivateNextStep\", function() { return CanActivateNextStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CanDeactivatePreviousStep\", function() { return CanDeactivatePreviousStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CommitChangesStep\", function() { return CommitChangesStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DeactivatePreviousStep\", function() { return DeactivatePreviousStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LoadRouteStep\", function() { return LoadRouteStep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NavModel\", function() { return NavModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NavigationInstruction\", function() { return NavigationInstruction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Pipeline\", function() { return Pipeline; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PipelineProvider\", function() { return PipelineProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PipelineSlotName\", function() { return PipelineSlotName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PipelineStatus\", function() { return PipelineStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return Redirect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RedirectToRoute\", function() { return RedirectToRoute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RouteLoader\", function() { return RouteLoader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return Router; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RouterConfiguration\", function() { return RouterConfiguration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RouterEvent\", function() { return RouterEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"activationStrategy\", function() { return activationStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNavigationCommand\", function() { return isNavigationCommand; });\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-logging */ \"./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js\");\n/* harmony import */ var aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aurelia-dependency-injection */ \"./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js\");\n/* harmony import */ var aurelia_history__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! aurelia-history */ \"./node_modules/aurelia-history/dist/native-modules/aurelia-history.js\");\n/* harmony import */ var aurelia_route_recognizer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! aurelia-route-recognizer */ \"./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js\");\n/* harmony import */ var aurelia_event_aggregator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! aurelia-event-aggregator */ \"aurelia-event-aggregator\");\n\n\n\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\n/**\r\n * Class used to represent an instruction during a navigation.\r\n */\r\nvar NavigationInstruction = /** @class */ (function () {\r\n function NavigationInstruction(init) {\r\n /**\r\n * Current built viewport plan of this nav instruction\r\n */\r\n this.plan = null;\r\n this.options = {};\r\n Object.assign(this, init);\r\n this.params = this.params || {};\r\n this.viewPortInstructions = {};\r\n var ancestorParams = [];\r\n var current = this;\r\n do {\r\n var currentParams = Object.assign({}, current.params);\r\n if (current.config && current.config.hasChildRouter) {\r\n // remove the param for the injected child route segment\r\n delete currentParams[current.getWildCardName()];\r\n }\r\n ancestorParams.unshift(currentParams);\r\n current = current.parentInstruction;\r\n } while (current);\r\n var allParams = Object.assign.apply(Object, [{}, this.queryParams].concat(ancestorParams));\r\n this.lifecycleArgs = [allParams, this.config, this];\r\n }\r\n /**\r\n * Gets an array containing this instruction and all child instructions for the current navigation.\r\n */\r\n NavigationInstruction.prototype.getAllInstructions = function () {\r\n var instructions = [this];\r\n var viewPortInstructions = this.viewPortInstructions;\r\n for (var key in viewPortInstructions) {\r\n var childInstruction = viewPortInstructions[key].childNavigationInstruction;\r\n if (childInstruction) {\r\n instructions.push.apply(instructions, childInstruction.getAllInstructions());\r\n }\r\n }\r\n return instructions;\r\n };\r\n /**\r\n * Gets an array containing the instruction and all child instructions for the previous navigation.\r\n * Previous instructions are no longer available after navigation completes.\r\n */\r\n NavigationInstruction.prototype.getAllPreviousInstructions = function () {\r\n return this.getAllInstructions().map(function (c) { return c.previousInstruction; }).filter(function (c) { return c; });\r\n };\r\n NavigationInstruction.prototype.addViewPortInstruction = function (nameOrInitOptions, strategy, moduleId, component) {\r\n var viewPortInstruction;\r\n var viewPortName = typeof nameOrInitOptions === 'string' ? nameOrInitOptions : nameOrInitOptions.name;\r\n var lifecycleArgs = this.lifecycleArgs;\r\n var config = Object.assign({}, lifecycleArgs[1], { currentViewPort: viewPortName });\r\n if (typeof nameOrInitOptions === 'string') {\r\n viewPortInstruction = {\r\n name: nameOrInitOptions,\r\n strategy: strategy,\r\n moduleId: moduleId,\r\n component: component,\r\n childRouter: component.childRouter,\r\n lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n };\r\n }\r\n else {\r\n viewPortInstruction = {\r\n name: viewPortName,\r\n strategy: nameOrInitOptions.strategy,\r\n component: nameOrInitOptions.component,\r\n moduleId: nameOrInitOptions.moduleId,\r\n childRouter: nameOrInitOptions.component.childRouter,\r\n lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n };\r\n }\r\n return this.viewPortInstructions[viewPortName] = viewPortInstruction;\r\n };\r\n /**\r\n * Gets the name of the route pattern's wildcard parameter, if applicable.\r\n */\r\n NavigationInstruction.prototype.getWildCardName = function () {\r\n // todo: potential issue, or at least unsafe typings\r\n var configRoute = this.config.route;\r\n var wildcardIndex = configRoute.lastIndexOf('*');\r\n return configRoute.substr(wildcardIndex + 1);\r\n };\r\n /**\r\n * Gets the path and query string created by filling the route\r\n * pattern's wildcard parameter with the matching param.\r\n */\r\n NavigationInstruction.prototype.getWildcardPath = function () {\r\n var wildcardName = this.getWildCardName();\r\n var path = this.params[wildcardName] || '';\r\n var queryString = this.queryString;\r\n if (queryString) {\r\n path += '?' + queryString;\r\n }\r\n return path;\r\n };\r\n /**\r\n * Gets the instruction's base URL, accounting for wildcard route parameters.\r\n */\r\n NavigationInstruction.prototype.getBaseUrl = function () {\r\n var _this = this;\r\n var $encodeURI = encodeURI;\r\n var fragment = decodeURI(this.fragment);\r\n if (fragment === '') {\r\n var nonEmptyRoute = this.router.routes.find(function (route) {\r\n return route.name === _this.config.name &&\r\n route.route !== '';\r\n });\r\n if (nonEmptyRoute) {\r\n fragment = nonEmptyRoute.route;\r\n }\r\n }\r\n if (!this.params) {\r\n return $encodeURI(fragment);\r\n }\r\n var wildcardName = this.getWildCardName();\r\n var path = this.params[wildcardName] || '';\r\n if (!path) {\r\n return $encodeURI(fragment);\r\n }\r\n return $encodeURI(fragment.substr(0, fragment.lastIndexOf(path)));\r\n };\r\n /**\r\n * Finalize a viewport instruction\r\n * @internal\r\n */\r\n NavigationInstruction.prototype._commitChanges = function (waitToSwap) {\r\n var _this = this;\r\n var router = this.router;\r\n router.currentInstruction = this;\r\n var previousInstruction = this.previousInstruction;\r\n if (previousInstruction) {\r\n previousInstruction.config.navModel.isActive = false;\r\n }\r\n this.config.navModel.isActive = true;\r\n router.refreshNavigation();\r\n var loads = [];\r\n var delaySwaps = [];\r\n var viewPortInstructions = this.viewPortInstructions;\r\n var _loop_1 = function (viewPortName) {\r\n var viewPortInstruction = viewPortInstructions[viewPortName];\r\n var viewPort = router.viewPorts[viewPortName];\r\n if (!viewPort) {\r\n throw new Error(\"There was no router-view found in the view for \" + viewPortInstruction.moduleId + \".\");\r\n }\r\n var childNavInstruction = viewPortInstruction.childNavigationInstruction;\r\n if (viewPortInstruction.strategy === \"replace\" /* Replace */) {\r\n if (childNavInstruction && childNavInstruction.parentCatchHandler) {\r\n loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n }\r\n else {\r\n if (waitToSwap) {\r\n delaySwaps.push({ viewPort: viewPort, viewPortInstruction: viewPortInstruction });\r\n }\r\n loads.push(viewPort\r\n .process(viewPortInstruction, waitToSwap)\r\n .then(function () { return childNavInstruction\r\n ? childNavInstruction._commitChanges(waitToSwap)\r\n : Promise.resolve(); }));\r\n }\r\n }\r\n else {\r\n if (childNavInstruction) {\r\n loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n }\r\n }\r\n };\r\n for (var viewPortName in viewPortInstructions) {\r\n _loop_1(viewPortName);\r\n }\r\n return Promise\r\n .all(loads)\r\n .then(function () {\r\n delaySwaps.forEach(function (x) { return x.viewPort.swap(x.viewPortInstruction); });\r\n return null;\r\n })\r\n .then(function () { return prune(_this); });\r\n };\r\n /**@internal */\r\n NavigationInstruction.prototype._updateTitle = function () {\r\n var router = this.router;\r\n var title = this._buildTitle(router.titleSeparator);\r\n if (title) {\r\n router.history.setTitle(title);\r\n }\r\n };\r\n /**@internal */\r\n NavigationInstruction.prototype._buildTitle = function (separator) {\r\n if (separator === void 0) { separator = ' | '; }\r\n var title = '';\r\n var childTitles = [];\r\n var navModelTitle = this.config.navModel.title;\r\n var instructionRouter = this.router;\r\n var viewPortInstructions = this.viewPortInstructions;\r\n if (navModelTitle) {\r\n title = instructionRouter.transformTitle(navModelTitle);\r\n }\r\n for (var viewPortName in viewPortInstructions) {\r\n var viewPortInstruction = viewPortInstructions[viewPortName];\r\n var child_nav_instruction = viewPortInstruction.childNavigationInstruction;\r\n if (child_nav_instruction) {\r\n var childTitle = child_nav_instruction._buildTitle(separator);\r\n if (childTitle) {\r\n childTitles.push(childTitle);\r\n }\r\n }\r\n }\r\n if (childTitles.length) {\r\n title = childTitles.join(separator) + (title ? separator : '') + title;\r\n }\r\n if (instructionRouter.title) {\r\n title += (title ? separator : '') + instructionRouter.transformTitle(instructionRouter.title);\r\n }\r\n return title;\r\n };\r\n return NavigationInstruction;\r\n}());\r\nvar prune = function (instruction) {\r\n instruction.previousInstruction = null;\r\n instruction.plan = null;\r\n};\n\n/**\r\n* Class for storing and interacting with a route's navigation settings.\r\n*/\r\nvar NavModel = /** @class */ (function () {\r\n function NavModel(router, relativeHref) {\r\n /**\r\n * True if this nav item is currently active.\r\n */\r\n this.isActive = false;\r\n /**\r\n * The title.\r\n */\r\n this.title = null;\r\n /**\r\n * This nav item's absolute href.\r\n */\r\n this.href = null;\r\n /**\r\n * This nav item's relative href.\r\n */\r\n this.relativeHref = null;\r\n /**\r\n * Data attached to the route at configuration time.\r\n */\r\n this.settings = {};\r\n /**\r\n * The route config.\r\n */\r\n this.config = null;\r\n this.router = router;\r\n this.relativeHref = relativeHref;\r\n }\r\n /**\r\n * Sets the route's title and updates document.title.\r\n * If the a navigation is in progress, the change will be applied\r\n * to document.title when the navigation completes.\r\n *\r\n * @param title The new title.\r\n */\r\n NavModel.prototype.setTitle = function (title) {\r\n this.title = title;\r\n if (this.isActive) {\r\n this.router.updateTitle();\r\n }\r\n };\r\n return NavModel;\r\n}());\n\nfunction _normalizeAbsolutePath(path, hasPushState, absolute) {\r\n if (absolute === void 0) { absolute = false; }\r\n if (!hasPushState && path[0] !== '#') {\r\n path = '#' + path;\r\n }\r\n if (hasPushState && absolute) {\r\n path = path.substring(1, path.length);\r\n }\r\n return path;\r\n}\r\nfunction _createRootedPath(fragment, baseUrl, hasPushState, absolute) {\r\n if (isAbsoluteUrl.test(fragment)) {\r\n return fragment;\r\n }\r\n var path = '';\r\n if (baseUrl.length && baseUrl[0] !== '/') {\r\n path += '/';\r\n }\r\n path += baseUrl;\r\n if ((!path.length || path[path.length - 1] !== '/') && fragment[0] !== '/') {\r\n path += '/';\r\n }\r\n if (path.length && path[path.length - 1] === '/' && fragment[0] === '/') {\r\n path = path.substring(0, path.length - 1);\r\n }\r\n return _normalizeAbsolutePath(path + fragment, hasPushState, absolute);\r\n}\r\nfunction _resolveUrl(fragment, baseUrl, hasPushState) {\r\n if (isRootedPath.test(fragment)) {\r\n return _normalizeAbsolutePath(fragment, hasPushState);\r\n }\r\n return _createRootedPath(fragment, baseUrl, hasPushState);\r\n}\r\nfunction _ensureArrayWithSingleRoutePerConfig(config) {\r\n var routeConfigs = [];\r\n if (Array.isArray(config.route)) {\r\n for (var i = 0, ii = config.route.length; i < ii; ++i) {\r\n var current = Object.assign({}, config);\r\n current.route = config.route[i];\r\n routeConfigs.push(current);\r\n }\r\n }\r\n else {\r\n routeConfigs.push(Object.assign({}, config));\r\n }\r\n return routeConfigs;\r\n}\r\nvar isRootedPath = /^#?\\//;\r\nvar isAbsoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\n\n/**\r\n * Class used to configure a [[Router]] instance.\r\n *\r\n * @constructor\r\n */\r\nvar RouterConfiguration = /** @class */ (function () {\r\n function RouterConfiguration() {\r\n this.instructions = [];\r\n this.options = {};\r\n this.pipelineSteps = [];\r\n }\r\n /**\r\n * Adds a step to be run during the [[Router]]'s navigation pipeline.\r\n *\r\n * @param name The name of the pipeline slot to insert the step into.\r\n * @param step The pipeline step.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.addPipelineStep = function (name, step) {\r\n if (step === null || step === undefined) {\r\n throw new Error('Pipeline step cannot be null or undefined.');\r\n }\r\n this.pipelineSteps.push({ name: name, step: step });\r\n return this;\r\n };\r\n /**\r\n * Adds a step to be run during the [[Router]]'s authorize pipeline slot.\r\n *\r\n * @param step The pipeline step.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.addAuthorizeStep = function (step) {\r\n return this.addPipelineStep(\"authorize\" /* Authorize */, step);\r\n };\r\n /**\r\n * Adds a step to be run during the [[Router]]'s preActivate pipeline slot.\r\n *\r\n * @param step The pipeline step.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.addPreActivateStep = function (step) {\r\n return this.addPipelineStep(\"preActivate\" /* PreActivate */, step);\r\n };\r\n /**\r\n * Adds a step to be run during the [[Router]]'s preRender pipeline slot.\r\n *\r\n * @param step The pipeline step.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.addPreRenderStep = function (step) {\r\n return this.addPipelineStep(\"preRender\" /* PreRender */, step);\r\n };\r\n /**\r\n * Adds a step to be run during the [[Router]]'s postRender pipeline slot.\r\n *\r\n * @param step The pipeline step.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.addPostRenderStep = function (step) {\r\n return this.addPipelineStep(\"postRender\" /* PostRender */, step);\r\n };\r\n /**\r\n * Configures a route that will be used if there is no previous location available on navigation cancellation.\r\n *\r\n * @param fragment The URL fragment to use as the navigation destination.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.fallbackRoute = function (fragment) {\r\n this._fallbackRoute = fragment;\r\n return this;\r\n };\r\n /**\r\n * Maps one or more routes to be registered with the router.\r\n *\r\n * @param route The [[RouteConfig]] to map, or an array of [[RouteConfig]] to map.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.map = function (route) {\r\n var _this = this;\r\n if (Array.isArray(route)) {\r\n route.forEach(function (r) { return _this.map(r); });\r\n return this;\r\n }\r\n return this.mapRoute(route);\r\n };\r\n /**\r\n * Configures defaults to use for any view ports.\r\n *\r\n * @param viewPortConfig a view port configuration object to use as a\r\n * default, of the form { viewPortName: { moduleId } }.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.useViewPortDefaults = function (viewPortConfig) {\r\n this.viewPortDefaults = viewPortConfig;\r\n return this;\r\n };\r\n /**\r\n * Maps a single route to be registered with the router.\r\n *\r\n * @param route The [[RouteConfig]] to map.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.mapRoute = function (config) {\r\n this.instructions.push(function (router) {\r\n var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n var navModel;\r\n for (var i = 0, ii = routeConfigs.length; i < ii; ++i) {\r\n var routeConfig = routeConfigs[i];\r\n routeConfig.settings = routeConfig.settings || {};\r\n if (!navModel) {\r\n navModel = router.createNavModel(routeConfig);\r\n }\r\n router.addRoute(routeConfig, navModel);\r\n }\r\n });\r\n return this;\r\n };\r\n /**\r\n * Registers an unknown route handler to be run when the URL fragment doesn't match any registered routes.\r\n *\r\n * @param config A string containing a moduleId to load, or a [[RouteConfig]], or a function that takes the\r\n * [[NavigationInstruction]] and selects a moduleId to load.\r\n * @chainable\r\n */\r\n RouterConfiguration.prototype.mapUnknownRoutes = function (config) {\r\n this.unknownRouteConfig = config;\r\n return this;\r\n };\r\n /**\r\n * Applies the current configuration to the specified [[Router]].\r\n *\r\n * @param router The [[Router]] to apply the configuration to.\r\n */\r\n RouterConfiguration.prototype.exportToRouter = function (router) {\r\n var instructions = this.instructions;\r\n for (var i = 0, ii = instructions.length; i < ii; ++i) {\r\n instructions[i](router);\r\n }\r\n var _a = this, title = _a.title, titleSeparator = _a.titleSeparator, unknownRouteConfig = _a.unknownRouteConfig, _fallbackRoute = _a._fallbackRoute, viewPortDefaults = _a.viewPortDefaults;\r\n if (title) {\r\n router.title = title;\r\n }\r\n if (titleSeparator) {\r\n router.titleSeparator = titleSeparator;\r\n }\r\n if (unknownRouteConfig) {\r\n router.handleUnknownRoutes(unknownRouteConfig);\r\n }\r\n if (_fallbackRoute) {\r\n router.fallbackRoute = _fallbackRoute;\r\n }\r\n if (viewPortDefaults) {\r\n router.useViewPortDefaults(viewPortDefaults);\r\n }\r\n Object.assign(router.options, this.options);\r\n var pipelineSteps = this.pipelineSteps;\r\n var pipelineStepCount = pipelineSteps.length;\r\n if (pipelineStepCount) {\r\n if (!router.isRoot) {\r\n throw new Error('Pipeline steps can only be added to the root router');\r\n }\r\n var pipelineProvider = router.pipelineProvider;\r\n for (var i = 0, ii = pipelineStepCount; i < ii; ++i) {\r\n var _b = pipelineSteps[i], name_1 = _b.name, step = _b.step;\r\n pipelineProvider.addStep(name_1, step);\r\n }\r\n }\r\n };\r\n return RouterConfiguration;\r\n}());\n\n/**\r\n * The primary class responsible for handling routing and navigation.\r\n */\r\nvar Router = /** @class */ (function () {\r\n /**\r\n * @param container The [[Container]] to use when child routers.\r\n * @param history The [[History]] implementation to delegate navigation requests to.\r\n */\r\n function Router(container, history) {\r\n var _this = this;\r\n /**\r\n * The parent router, or null if this instance is not a child router.\r\n */\r\n this.parent = null;\r\n this.options = {};\r\n /**\r\n * The defaults used when a viewport lacks specified content\r\n */\r\n this.viewPortDefaults = {};\r\n /**\r\n * Extension point to transform the document title before it is built and displayed.\r\n * By default, child routers delegate to the parent router, and the app router\r\n * returns the title unchanged.\r\n */\r\n this.transformTitle = function (title) {\r\n if (_this.parent) {\r\n return _this.parent.transformTitle(title);\r\n }\r\n return title;\r\n };\r\n this.container = container;\r\n this.history = history;\r\n this.reset();\r\n }\r\n /**\r\n * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n */\r\n Router.prototype.reset = function () {\r\n var _this = this;\r\n this.viewPorts = {};\r\n this.routes = [];\r\n this.baseUrl = '';\r\n this.isConfigured = false;\r\n this.isNavigating = false;\r\n this.isExplicitNavigation = false;\r\n this.isExplicitNavigationBack = false;\r\n this.isNavigatingFirst = false;\r\n this.isNavigatingNew = false;\r\n this.isNavigatingRefresh = false;\r\n this.isNavigatingForward = false;\r\n this.isNavigatingBack = false;\r\n this.couldDeactivate = false;\r\n this.navigation = [];\r\n this.currentInstruction = null;\r\n this.viewPortDefaults = {};\r\n this._fallbackOrder = 100;\r\n this._recognizer = new aurelia_route_recognizer__WEBPACK_IMPORTED_MODULE_3__[\"RouteRecognizer\"]();\r\n this._childRecognizer = new aurelia_route_recognizer__WEBPACK_IMPORTED_MODULE_3__[\"RouteRecognizer\"]();\r\n this._configuredPromise = new Promise(function (resolve) {\r\n _this._resolveConfiguredPromise = resolve;\r\n });\r\n };\r\n Object.defineProperty(Router.prototype, \"isRoot\", {\r\n /**\r\n * Gets a value indicating whether or not this [[Router]] is the root in the router tree. I.e., it has no parent.\r\n */\r\n get: function () {\r\n return !this.parent;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Registers a viewPort to be used as a rendering target for activated routes.\r\n *\r\n * @param viewPort The viewPort.\r\n * @param name The name of the viewPort. 'default' if unspecified.\r\n */\r\n Router.prototype.registerViewPort = function (viewPort, name) {\r\n name = name || 'default';\r\n this.viewPorts[name] = viewPort;\r\n };\r\n /**\r\n * Returns a Promise that resolves when the router is configured.\r\n */\r\n Router.prototype.ensureConfigured = function () {\r\n return this._configuredPromise;\r\n };\r\n /**\r\n * Configures the router.\r\n *\r\n * @param callbackOrConfig The [[RouterConfiguration]] or a callback that takes a [[RouterConfiguration]].\r\n */\r\n Router.prototype.configure = function (callbackOrConfig) {\r\n var _this = this;\r\n this.isConfigured = true;\r\n var result = callbackOrConfig;\r\n var config;\r\n if (typeof callbackOrConfig === 'function') {\r\n config = new RouterConfiguration();\r\n result = callbackOrConfig(config);\r\n }\r\n return Promise\r\n .resolve(result)\r\n .then(function (c) {\r\n if (c && c.exportToRouter) {\r\n config = c;\r\n }\r\n config.exportToRouter(_this);\r\n _this.isConfigured = true;\r\n _this._resolveConfiguredPromise();\r\n });\r\n };\r\n /**\r\n * Navigates to a new location.\r\n *\r\n * @param fragment The URL fragment to use as the navigation destination.\r\n * @param options The navigation options.\r\n */\r\n Router.prototype.navigate = function (fragment, options) {\r\n if (!this.isConfigured && this.parent) {\r\n return this.parent.navigate(fragment, options);\r\n }\r\n this.isExplicitNavigation = true;\r\n return this.history.navigate(_resolveUrl(fragment, this.baseUrl, this.history._hasPushState), options);\r\n };\r\n /**\r\n * Navigates to a new location corresponding to the route and params specified. Equivallent to [[Router.generate]] followed\r\n * by [[Router.navigate]].\r\n *\r\n * @param route The name of the route to use when generating the navigation location.\r\n * @param params The route parameters to be used when populating the route pattern.\r\n * @param options The navigation options.\r\n */\r\n Router.prototype.navigateToRoute = function (route, params, options) {\r\n var path = this.generate(route, params);\r\n return this.navigate(path, options);\r\n };\r\n /**\r\n * Navigates back to the most recent location in history.\r\n */\r\n Router.prototype.navigateBack = function () {\r\n this.isExplicitNavigationBack = true;\r\n this.history.navigateBack();\r\n };\r\n /**\r\n * Creates a child router of the current router.\r\n *\r\n * @param container The [[Container]] to provide to the child router. Uses the current [[Router]]'s [[Container]] if unspecified.\r\n * @returns {Router} The new child Router.\r\n */\r\n Router.prototype.createChild = function (container) {\r\n var childRouter = new Router(container || this.container.createChild(), this.history);\r\n childRouter.parent = this;\r\n return childRouter;\r\n };\r\n /**\r\n * Generates a URL fragment matching the specified route pattern.\r\n *\r\n * @param name The name of the route whose pattern should be used to generate the fragment.\r\n * @param params The route params to be used to populate the route pattern.\r\n * @param options If options.absolute = true, then absolute url will be generated; otherwise, it will be relative url.\r\n * @returns {string} A string containing the generated URL fragment.\r\n */\r\n Router.prototype.generate = function (nameOrRoute, params, options) {\r\n if (params === void 0) { params = {}; }\r\n if (options === void 0) { options = {}; }\r\n // A child recognizer generates routes for potential child routes. Any potential child route is added\r\n // to the childRoute property of params for the childRouter to recognize. When generating routes, we\r\n // use the childRecognizer when childRoute params are available to generate a child router enabled route.\r\n var recognizer = 'childRoute' in params ? this._childRecognizer : this._recognizer;\r\n var hasRoute = recognizer.hasRoute(nameOrRoute);\r\n if (!hasRoute) {\r\n if (this.parent) {\r\n return this.parent.generate(nameOrRoute, params, options);\r\n }\r\n throw new Error(\"A route with name '\" + nameOrRoute + \"' could not be found. Check that `name: '\" + nameOrRoute + \"'` was specified in the route's config.\");\r\n }\r\n var path = recognizer.generate(nameOrRoute, params);\r\n var rootedPath = _createRootedPath(path, this.baseUrl, this.history._hasPushState, options.absolute);\r\n return options.absolute ? \"\" + this.history.getAbsoluteRoot() + rootedPath : rootedPath;\r\n };\r\n /**\r\n * Creates a [[NavModel]] for the specified route config.\r\n *\r\n * @param config The route config.\r\n */\r\n Router.prototype.createNavModel = function (config) {\r\n var navModel = new NavModel(this, 'href' in config\r\n ? config.href\r\n // potential error when config.route is a string[] ?\r\n : config.route);\r\n navModel.title = config.title;\r\n navModel.order = config.nav;\r\n navModel.href = config.href;\r\n navModel.settings = config.settings;\r\n navModel.config = config;\r\n return navModel;\r\n };\r\n /**\r\n * Registers a new route with the router.\r\n *\r\n * @param config The [[RouteConfig]].\r\n * @param navModel The [[NavModel]] to use for the route. May be omitted for single-pattern routes.\r\n */\r\n Router.prototype.addRoute = function (config, navModel) {\r\n if (Array.isArray(config.route)) {\r\n var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n // the following is wrong. todo: fix this after TS refactoring release\r\n routeConfigs.forEach(this.addRoute.bind(this));\r\n return;\r\n }\r\n validateRouteConfig(config);\r\n if (!('viewPorts' in config) && !config.navigationStrategy) {\r\n config.viewPorts = {\r\n 'default': {\r\n moduleId: config.moduleId,\r\n view: config.view\r\n }\r\n };\r\n }\r\n if (!navModel) {\r\n navModel = this.createNavModel(config);\r\n }\r\n this.routes.push(config);\r\n var path = config.route;\r\n if (path.charAt(0) === '/') {\r\n path = path.substr(1);\r\n }\r\n var caseSensitive = config.caseSensitive === true;\r\n var state = this._recognizer.add({\r\n path: path,\r\n handler: config,\r\n caseSensitive: caseSensitive\r\n });\r\n if (path) {\r\n var settings = config.settings;\r\n delete config.settings;\r\n var withChild = JSON.parse(JSON.stringify(config));\r\n config.settings = settings;\r\n withChild.route = path + \"/*childRoute\";\r\n withChild.hasChildRouter = true;\r\n this._childRecognizer.add({\r\n path: withChild.route,\r\n handler: withChild,\r\n caseSensitive: caseSensitive\r\n });\r\n withChild.navModel = navModel;\r\n withChild.settings = config.settings;\r\n withChild.navigationStrategy = config.navigationStrategy;\r\n }\r\n config.navModel = navModel;\r\n var navigation = this.navigation;\r\n if ((navModel.order || navModel.order === 0) && navigation.indexOf(navModel) === -1) {\r\n if ((!navModel.href && navModel.href !== '') && (state.types.dynamics || state.types.stars)) {\r\n throw new Error('Invalid route config for \"' + config.route + '\" : dynamic routes must specify an \"href:\" to be included in the navigation model.');\r\n }\r\n if (typeof navModel.order !== 'number') {\r\n navModel.order = ++this._fallbackOrder;\r\n }\r\n navigation.push(navModel);\r\n // this is a potential error / inconsistency between browsers\r\n //\r\n // MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\r\n // If compareFunction(a, b) returns 0, leave a and b unchanged with respect to each other,\r\n // but sorted with respect to all different elements.\r\n // Note: the ECMAscript standard does not guarantee this behaviour,\r\n // and thus not all browsers (e.g. Mozilla versions dating back to at least 2003) respect this.\r\n navigation.sort(function (a, b) { return a.order - b.order; });\r\n }\r\n };\r\n /**\r\n * Gets a value indicating whether or not this [[Router]] or one of its ancestors has a route registered with the specified name.\r\n *\r\n * @param name The name of the route to check.\r\n */\r\n Router.prototype.hasRoute = function (name) {\r\n return !!(this._recognizer.hasRoute(name) || this.parent && this.parent.hasRoute(name));\r\n };\r\n /**\r\n * Gets a value indicating whether or not this [[Router]] has a route registered with the specified name.\r\n *\r\n * @param name The name of the route to check.\r\n */\r\n Router.prototype.hasOwnRoute = function (name) {\r\n return this._recognizer.hasRoute(name);\r\n };\r\n /**\r\n * Register a handler to use when the incoming URL fragment doesn't match any registered routes.\r\n *\r\n * @param config The moduleId, or a function that selects the moduleId, or a [[RouteConfig]].\r\n */\r\n Router.prototype.handleUnknownRoutes = function (config) {\r\n var _this = this;\r\n if (!config) {\r\n throw new Error('Invalid unknown route handler');\r\n }\r\n this.catchAllHandler = function (instruction) {\r\n return _this\r\n ._createRouteConfig(config, instruction)\r\n .then(function (c) {\r\n instruction.config = c;\r\n return instruction;\r\n });\r\n };\r\n };\r\n /**\r\n * Updates the document title using the current navigation instruction.\r\n */\r\n Router.prototype.updateTitle = function () {\r\n var parentRouter = this.parent;\r\n if (parentRouter) {\r\n return parentRouter.updateTitle();\r\n }\r\n var currentInstruction = this.currentInstruction;\r\n if (currentInstruction) {\r\n currentInstruction._updateTitle();\r\n }\r\n return undefined;\r\n };\r\n /**\r\n * Updates the navigation routes with hrefs relative to the current location.\r\n * Note: This method will likely move to a plugin in a future release.\r\n */\r\n Router.prototype.refreshNavigation = function () {\r\n var nav = this.navigation;\r\n for (var i = 0, length_1 = nav.length; i < length_1; i++) {\r\n var current = nav[i];\r\n if (!current.config.href) {\r\n current.href = _createRootedPath(current.relativeHref, this.baseUrl, this.history._hasPushState);\r\n }\r\n else {\r\n current.href = _normalizeAbsolutePath(current.config.href, this.history._hasPushState);\r\n }\r\n }\r\n };\r\n /**\r\n * Sets the default configuration for the view ports. This specifies how to\r\n * populate a view port for which no module is specified. The default is\r\n * an empty view/view-model pair.\r\n */\r\n Router.prototype.useViewPortDefaults = function ($viewPortDefaults) {\r\n // a workaround to have strong typings while not requiring to expose interface ViewPortInstruction\r\n var viewPortDefaults = $viewPortDefaults;\r\n for (var viewPortName in viewPortDefaults) {\r\n var viewPortConfig = viewPortDefaults[viewPortName];\r\n this.viewPortDefaults[viewPortName] = {\r\n moduleId: viewPortConfig.moduleId\r\n };\r\n }\r\n };\r\n /**@internal */\r\n Router.prototype._refreshBaseUrl = function () {\r\n var parentRouter = this.parent;\r\n if (parentRouter) {\r\n this.baseUrl = generateBaseUrl(parentRouter, parentRouter.currentInstruction);\r\n }\r\n };\r\n /**@internal */\r\n Router.prototype._createNavigationInstruction = function (url, parentInstruction) {\r\n if (url === void 0) { url = ''; }\r\n if (parentInstruction === void 0) { parentInstruction = null; }\r\n var fragment = url;\r\n var queryString = '';\r\n var queryIndex = url.indexOf('?');\r\n if (queryIndex !== -1) {\r\n fragment = url.substr(0, queryIndex);\r\n queryString = url.substr(queryIndex + 1);\r\n }\r\n var urlRecognizationResults = this._recognizer.recognize(url);\r\n if (!urlRecognizationResults || !urlRecognizationResults.length) {\r\n urlRecognizationResults = this._childRecognizer.recognize(url);\r\n }\r\n var instructionInit = {\r\n fragment: fragment,\r\n queryString: queryString,\r\n config: null,\r\n parentInstruction: parentInstruction,\r\n previousInstruction: this.currentInstruction,\r\n router: this,\r\n options: {\r\n compareQueryParams: this.options.compareQueryParams\r\n }\r\n };\r\n var result;\r\n if (urlRecognizationResults && urlRecognizationResults.length) {\r\n var first = urlRecognizationResults[0];\r\n var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n params: first.params,\r\n queryParams: first.queryParams || urlRecognizationResults.queryParams,\r\n config: first.config || first.handler\r\n }));\r\n if (typeof first.handler === 'function') {\r\n result = evaluateNavigationStrategy(instruction, first.handler, first);\r\n }\r\n else if (first.handler && typeof first.handler.navigationStrategy === 'function') {\r\n result = evaluateNavigationStrategy(instruction, first.handler.navigationStrategy, first.handler);\r\n }\r\n else {\r\n result = Promise.resolve(instruction);\r\n }\r\n }\r\n else if (this.catchAllHandler) {\r\n var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n params: { path: fragment },\r\n queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n config: null // config will be created by the catchAllHandler\r\n }));\r\n result = evaluateNavigationStrategy(instruction, this.catchAllHandler);\r\n }\r\n else if (this.parent) {\r\n var router = this._parentCatchAllHandler(this.parent);\r\n if (router) {\r\n var newParentInstruction = this._findParentInstructionFromRouter(router, parentInstruction);\r\n var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n params: { path: fragment },\r\n queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n router: router,\r\n parentInstruction: newParentInstruction,\r\n parentCatchHandler: true,\r\n config: null // config will be created by the chained parent catchAllHandler\r\n }));\r\n result = evaluateNavigationStrategy(instruction, router.catchAllHandler);\r\n }\r\n }\r\n if (result && parentInstruction) {\r\n this.baseUrl = generateBaseUrl(this.parent, parentInstruction);\r\n }\r\n return result || Promise.reject(new Error(\"Route not found: \" + url));\r\n };\r\n /**@internal */\r\n Router.prototype._findParentInstructionFromRouter = function (router, instruction) {\r\n if (instruction.router === router) {\r\n instruction.fragment = router.baseUrl; // need to change the fragment in case of a redirect instead of moduleId\r\n return instruction;\r\n }\r\n else if (instruction.parentInstruction) {\r\n return this._findParentInstructionFromRouter(router, instruction.parentInstruction);\r\n }\r\n return undefined;\r\n };\r\n /**@internal */\r\n Router.prototype._parentCatchAllHandler = function (router) {\r\n if (router.catchAllHandler) {\r\n return router;\r\n }\r\n else if (router.parent) {\r\n return this._parentCatchAllHandler(router.parent);\r\n }\r\n return false;\r\n };\r\n /**\r\n * @internal\r\n */\r\n Router.prototype._createRouteConfig = function (config, instruction) {\r\n var _this = this;\r\n return Promise\r\n .resolve(config)\r\n .then(function (c) {\r\n if (typeof c === 'string') {\r\n return { moduleId: c };\r\n }\r\n else if (typeof c === 'function') {\r\n return c(instruction);\r\n }\r\n return c;\r\n })\r\n // typing here could be either RouteConfig or RedirectConfig\r\n // but temporarily treat both as RouteConfig\r\n // todo: improve typings precision\r\n .then(function (c) { return typeof c === 'string' ? { moduleId: c } : c; })\r\n .then(function (c) {\r\n c.route = instruction.params.path;\r\n validateRouteConfig(c);\r\n if (!c.navModel) {\r\n c.navModel = _this.createNavModel(c);\r\n }\r\n return c;\r\n });\r\n };\r\n return Router;\r\n}());\r\n/* @internal exported for unit testing */\r\nvar generateBaseUrl = function (router, instruction) {\r\n return \"\" + (router.baseUrl || '') + (instruction.getBaseUrl() || '');\r\n};\r\n/* @internal exported for unit testing */\r\nvar validateRouteConfig = function (config) {\r\n if (typeof config !== 'object') {\r\n throw new Error('Invalid Route Config');\r\n }\r\n if (typeof config.route !== 'string') {\r\n var name_1 = config.name || '(no name)';\r\n throw new Error('Invalid Route Config for \"' + name_1 + '\": You must specify a \"route:\" pattern.');\r\n }\r\n if (!('redirect' in config || config.moduleId || config.navigationStrategy || config.viewPorts)) {\r\n throw new Error('Invalid Route Config for \"' + config.route + '\": You must specify a \"moduleId:\", \"redirect:\", \"navigationStrategy:\", or \"viewPorts:\".');\r\n }\r\n};\r\n/* @internal exported for unit testing */\r\nvar evaluateNavigationStrategy = function (instruction, evaluator, context) {\r\n return Promise\r\n .resolve(evaluator.call(context, instruction))\r\n .then(function () {\r\n if (!('viewPorts' in instruction.config)) {\r\n instruction.config.viewPorts = {\r\n 'default': {\r\n moduleId: instruction.config.moduleId\r\n }\r\n };\r\n }\r\n return instruction;\r\n });\r\n};\n\n/**@internal exported for unit testing */\r\nvar createNextFn = function (instruction, steps) {\r\n var index = -1;\r\n var next = function () {\r\n index++;\r\n if (index < steps.length) {\r\n var currentStep = steps[index];\r\n try {\r\n return currentStep(instruction, next);\r\n }\r\n catch (e) {\r\n return next.reject(e);\r\n }\r\n }\r\n else {\r\n return next.complete();\r\n }\r\n };\r\n next.complete = createCompletionHandler(next, \"completed\" /* Completed */);\r\n next.cancel = createCompletionHandler(next, \"canceled\" /* Canceled */);\r\n next.reject = createCompletionHandler(next, \"rejected\" /* Rejected */);\r\n return next;\r\n};\r\n/**@internal exported for unit testing */\r\nvar createCompletionHandler = function (next, status) {\r\n return function (output) { return Promise\r\n .resolve({\r\n status: status,\r\n output: output,\r\n completed: status === \"completed\" /* Completed */\r\n }); };\r\n};\n\n/**\r\n * The class responsible for managing and processing the navigation pipeline.\r\n */\r\nvar Pipeline = /** @class */ (function () {\r\n function Pipeline() {\r\n /**\r\n * The pipeline steps. And steps added via addStep will be converted to a function\r\n * The actualy running functions with correct step contexts of this pipeline\r\n */\r\n this.steps = [];\r\n }\r\n /**\r\n * Adds a step to the pipeline.\r\n *\r\n * @param step The pipeline step.\r\n */\r\n Pipeline.prototype.addStep = function (step) {\r\n var run;\r\n if (typeof step === 'function') {\r\n run = step;\r\n }\r\n else if (typeof step.getSteps === 'function') {\r\n // getSteps is to enable support open slots\r\n // where devs can add multiple steps into the same slot name\r\n var steps = step.getSteps();\r\n for (var i = 0, l = steps.length; i < l; i++) {\r\n this.addStep(steps[i]);\r\n }\r\n return this;\r\n }\r\n else {\r\n run = step.run.bind(step);\r\n }\r\n this.steps.push(run);\r\n return this;\r\n };\r\n /**\r\n * Runs the pipeline.\r\n *\r\n * @param instruction The navigation instruction to process.\r\n */\r\n Pipeline.prototype.run = function (instruction) {\r\n var nextFn = createNextFn(instruction, this.steps);\r\n return nextFn();\r\n };\r\n return Pipeline;\r\n}());\n\n/**\r\n* Determines if the provided object is a navigation command.\r\n* A navigation command is anything with a navigate method.\r\n*\r\n* @param obj The object to check.\r\n*/\r\nfunction isNavigationCommand(obj) {\r\n return obj && typeof obj.navigate === 'function';\r\n}\r\n/**\r\n* Used during the activation lifecycle to cause a redirect.\r\n*/\r\nvar Redirect = /** @class */ (function () {\r\n /**\r\n * @param url The URL fragment to use as the navigation destination.\r\n * @param options The navigation options.\r\n */\r\n function Redirect(url, options) {\r\n if (options === void 0) { options = {}; }\r\n this.url = url;\r\n this.options = Object.assign({ trigger: true, replace: true }, options);\r\n this.shouldContinueProcessing = false;\r\n }\r\n /**\r\n * Called by the activation system to set the child router.\r\n *\r\n * @param router The router.\r\n */\r\n Redirect.prototype.setRouter = function (router) {\r\n this.router = router;\r\n };\r\n /**\r\n * Called by the navigation pipeline to navigate.\r\n *\r\n * @param appRouter The router to be redirected.\r\n */\r\n Redirect.prototype.navigate = function (appRouter) {\r\n var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n navigatingRouter.navigate(this.url, this.options);\r\n };\r\n return Redirect;\r\n}());\r\n/**\r\n * Used during the activation lifecycle to cause a redirect to a named route.\r\n */\r\nvar RedirectToRoute = /** @class */ (function () {\r\n /**\r\n * @param route The name of the route.\r\n * @param params The parameters to be sent to the activation method.\r\n * @param options The options to use for navigation.\r\n */\r\n function RedirectToRoute(route, params, options) {\r\n if (params === void 0) { params = {}; }\r\n if (options === void 0) { options = {}; }\r\n this.route = route;\r\n this.params = params;\r\n this.options = Object.assign({ trigger: true, replace: true }, options);\r\n this.shouldContinueProcessing = false;\r\n }\r\n /**\r\n * Called by the activation system to set the child router.\r\n *\r\n * @param router The router.\r\n */\r\n RedirectToRoute.prototype.setRouter = function (router) {\r\n this.router = router;\r\n };\r\n /**\r\n * Called by the navigation pipeline to navigate.\r\n *\r\n * @param appRouter The router to be redirected.\r\n */\r\n RedirectToRoute.prototype.navigate = function (appRouter) {\r\n var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n navigatingRouter.navigateToRoute(this.route, this.params, this.options);\r\n };\r\n return RedirectToRoute;\r\n}());\n\n/**\r\n * @internal exported for unit testing\r\n */\r\nfunction _buildNavigationPlan(instruction, forceLifecycleMinimum) {\r\n var config = instruction.config;\r\n if ('redirect' in config) {\r\n return buildRedirectPlan(instruction);\r\n }\r\n var prevInstruction = instruction.previousInstruction;\r\n var defaultViewPortConfigs = instruction.router.viewPortDefaults;\r\n if (prevInstruction) {\r\n return buildTransitionPlans(instruction, prevInstruction, defaultViewPortConfigs, forceLifecycleMinimum);\r\n }\r\n // first navigation, only need to prepare a few information for each viewport plan\r\n var viewPortPlans = {};\r\n var viewPortConfigs = config.viewPorts;\r\n for (var viewPortName in viewPortConfigs) {\r\n var viewPortConfig = viewPortConfigs[viewPortName];\r\n if (viewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n viewPortConfig = defaultViewPortConfigs[viewPortName];\r\n }\r\n viewPortPlans[viewPortName] = {\r\n name: viewPortName,\r\n strategy: \"replace\" /* Replace */,\r\n config: viewPortConfig\r\n };\r\n }\r\n return Promise.resolve(viewPortPlans);\r\n}\r\n/**\r\n * Build redirect plan based on config of a navigation instruction\r\n * @internal exported for unit testing\r\n */\r\nvar buildRedirectPlan = function (instruction) {\r\n var config = instruction.config;\r\n var router = instruction.router;\r\n return router\r\n ._createNavigationInstruction(config.redirect)\r\n .then(function (redirectInstruction) {\r\n var params = {};\r\n var originalInstructionParams = instruction.params;\r\n var redirectInstructionParams = redirectInstruction.params;\r\n for (var key in redirectInstructionParams) {\r\n // If the param on the redirect points to another param, e.g. { route: first/:this, redirect: second/:this }\r\n var val = redirectInstructionParams[key];\r\n if (typeof val === 'string' && val[0] === ':') {\r\n val = val.slice(1);\r\n // And if that param is found on the original instruction then use it\r\n if (val in originalInstructionParams) {\r\n params[key] = originalInstructionParams[val];\r\n }\r\n }\r\n else {\r\n params[key] = redirectInstructionParams[key];\r\n }\r\n }\r\n var redirectLocation = router.generate(redirectInstruction.config, params, instruction.options);\r\n // Special handling for child routes\r\n for (var key in originalInstructionParams) {\r\n redirectLocation = redirectLocation.replace(\":\" + key, originalInstructionParams[key]);\r\n }\r\n var queryString = instruction.queryString;\r\n if (queryString) {\r\n redirectLocation += '?' + queryString;\r\n }\r\n return Promise.resolve(new Redirect(redirectLocation));\r\n });\r\n};\r\n/**\r\n * @param viewPortPlans the Plan record that holds information about built plans\r\n * @internal exported for unit testing\r\n */\r\nvar buildTransitionPlans = function (currentInstruction, previousInstruction, defaultViewPortConfigs, forceLifecycleMinimum) {\r\n var viewPortPlans = {};\r\n var newInstructionConfig = currentInstruction.config;\r\n var hasNewParams = hasDifferentParameterValues(previousInstruction, currentInstruction);\r\n var pending = [];\r\n var previousViewPortInstructions = previousInstruction.viewPortInstructions;\r\n var _loop_1 = function (viewPortName) {\r\n var prevViewPortInstruction = previousViewPortInstructions[viewPortName];\r\n var prevViewPortComponent = prevViewPortInstruction.component;\r\n var newInstructionViewPortConfigs = newInstructionConfig.viewPorts;\r\n // if this is invoked on a viewport without any changes, based on new url,\r\n // newViewPortConfig will be the existing viewport instruction\r\n var nextViewPortConfig = viewPortName in newInstructionViewPortConfigs\r\n ? newInstructionViewPortConfigs[viewPortName]\r\n : prevViewPortInstruction;\r\n if (nextViewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n nextViewPortConfig = defaultViewPortConfigs[viewPortName];\r\n }\r\n var viewPortActivationStrategy = determineActivationStrategy(currentInstruction, prevViewPortInstruction, nextViewPortConfig, hasNewParams, forceLifecycleMinimum);\r\n var viewPortPlan = viewPortPlans[viewPortName] = {\r\n name: viewPortName,\r\n // ViewPortInstruction can quack like a RouteConfig\r\n config: nextViewPortConfig,\r\n prevComponent: prevViewPortComponent,\r\n prevModuleId: prevViewPortInstruction.moduleId,\r\n strategy: viewPortActivationStrategy\r\n };\r\n // recursively build nav plans for all existing child routers/viewports of this viewport\r\n // this is possible because existing child viewports and routers already have necessary information\r\n // to process the wildcard path from parent instruction\r\n if (viewPortActivationStrategy !== \"replace\" /* Replace */ && prevViewPortInstruction.childRouter) {\r\n var path = currentInstruction.getWildcardPath();\r\n var task = prevViewPortInstruction\r\n .childRouter\r\n ._createNavigationInstruction(path, currentInstruction)\r\n .then(function (childInstruction) {\r\n viewPortPlan.childNavigationInstruction = childInstruction;\r\n return _buildNavigationPlan(childInstruction, \r\n // is it safe to assume viewPortPlan has not been changed from previous assignment?\r\n // if so, can just use local variable viewPortPlanStrategy\r\n // there could be user code modifying viewport plan during _createNavigationInstruction?\r\n viewPortPlan.strategy === \"invoke-lifecycle\" /* InvokeLifecycle */)\r\n .then(function (childPlan) {\r\n if (childPlan instanceof Redirect) {\r\n return Promise.reject(childPlan);\r\n }\r\n childInstruction.plan = childPlan;\r\n // for bluebird ?\r\n return null;\r\n });\r\n });\r\n pending.push(task);\r\n }\r\n };\r\n for (var viewPortName in previousViewPortInstructions) {\r\n _loop_1(viewPortName);\r\n }\r\n return Promise.all(pending).then(function () { return viewPortPlans; });\r\n};\r\n/**\r\n * @param newViewPortConfig if this is invoked on a viewport without any changes, based on new url, newViewPortConfig will be the existing viewport instruction\r\n * @internal exported for unit testing\r\n */\r\nvar determineActivationStrategy = function (currentNavInstruction, prevViewPortInstruction, newViewPortConfig, \r\n// indicates whether there is difference between old and new url params\r\nhasNewParams, forceLifecycleMinimum) {\r\n var newInstructionConfig = currentNavInstruction.config;\r\n var prevViewPortViewModel = prevViewPortInstruction.component.viewModel;\r\n var viewPortPlanStrategy;\r\n if (prevViewPortInstruction.moduleId !== newViewPortConfig.moduleId) {\r\n viewPortPlanStrategy = \"replace\" /* Replace */;\r\n }\r\n else if ('determineActivationStrategy' in prevViewPortViewModel) {\r\n viewPortPlanStrategy = prevViewPortViewModel.determineActivationStrategy.apply(prevViewPortViewModel, currentNavInstruction.lifecycleArgs);\r\n }\r\n else if (newInstructionConfig.activationStrategy) {\r\n viewPortPlanStrategy = newInstructionConfig.activationStrategy;\r\n }\r\n else if (hasNewParams || forceLifecycleMinimum) {\r\n viewPortPlanStrategy = \"invoke-lifecycle\" /* InvokeLifecycle */;\r\n }\r\n else {\r\n viewPortPlanStrategy = \"no-change\" /* NoChange */;\r\n }\r\n return viewPortPlanStrategy;\r\n};\r\n/**@internal exported for unit testing */\r\nvar hasDifferentParameterValues = function (prev, next) {\r\n var prevParams = prev.params;\r\n var nextParams = next.params;\r\n var nextWildCardName = next.config.hasChildRouter ? next.getWildCardName() : null;\r\n for (var key in nextParams) {\r\n if (key === nextWildCardName) {\r\n continue;\r\n }\r\n if (prevParams[key] !== nextParams[key]) {\r\n return true;\r\n }\r\n }\r\n for (var key in prevParams) {\r\n if (key === nextWildCardName) {\r\n continue;\r\n }\r\n if (prevParams[key] !== nextParams[key]) {\r\n return true;\r\n }\r\n }\r\n if (!next.options.compareQueryParams) {\r\n return false;\r\n }\r\n var prevQueryParams = prev.queryParams;\r\n var nextQueryParams = next.queryParams;\r\n for (var key in nextQueryParams) {\r\n if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n return true;\r\n }\r\n }\r\n for (var key in prevQueryParams) {\r\n if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\n\n/**\r\n * Transform a navigation instruction into viewport plan record object,\r\n * or a redirect request if user viewmodel demands\r\n */\r\nvar BuildNavigationPlanStep = /** @class */ (function () {\r\n function BuildNavigationPlanStep() {\r\n }\r\n BuildNavigationPlanStep.prototype.run = function (navigationInstruction, next) {\r\n return _buildNavigationPlan(navigationInstruction)\r\n .then(function (plan) {\r\n if (plan instanceof Redirect) {\r\n return next.cancel(plan);\r\n }\r\n navigationInstruction.plan = plan;\r\n return next();\r\n })\r\n .catch(next.cancel);\r\n };\r\n return BuildNavigationPlanStep;\r\n}());\n\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadNewRoute = function (routeLoader, navigationInstruction) {\r\n var loadingPlans = determineLoadingPlans(navigationInstruction);\r\n var loadPromises = loadingPlans.map(function (loadingPlan) { return loadRoute(routeLoader, loadingPlan.navigationInstruction, loadingPlan.viewPortPlan); });\r\n return Promise.all(loadPromises);\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar determineLoadingPlans = function (navigationInstruction, loadingPlans) {\r\n if (loadingPlans === void 0) { loadingPlans = []; }\r\n var viewPortPlans = navigationInstruction.plan;\r\n for (var viewPortName in viewPortPlans) {\r\n var viewPortPlan = viewPortPlans[viewPortName];\r\n var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n if (viewPortPlan.strategy === \"replace\" /* Replace */) {\r\n loadingPlans.push({ viewPortPlan: viewPortPlan, navigationInstruction: navigationInstruction });\r\n if (childNavInstruction) {\r\n determineLoadingPlans(childNavInstruction, loadingPlans);\r\n }\r\n }\r\n else {\r\n var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n name: viewPortName,\r\n strategy: viewPortPlan.strategy,\r\n moduleId: viewPortPlan.prevModuleId,\r\n component: viewPortPlan.prevComponent\r\n });\r\n if (childNavInstruction) {\r\n viewPortInstruction.childNavigationInstruction = childNavInstruction;\r\n determineLoadingPlans(childNavInstruction, loadingPlans);\r\n }\r\n }\r\n }\r\n return loadingPlans;\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadRoute = function (routeLoader, navigationInstruction, viewPortPlan) {\r\n var planConfig = viewPortPlan.config;\r\n var moduleId = planConfig ? planConfig.moduleId : null;\r\n return loadComponent(routeLoader, navigationInstruction, planConfig)\r\n .then(function (component) {\r\n var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n name: viewPortPlan.name,\r\n strategy: viewPortPlan.strategy,\r\n moduleId: moduleId,\r\n component: component\r\n });\r\n var childRouter = component.childRouter;\r\n if (childRouter) {\r\n var path = navigationInstruction.getWildcardPath();\r\n return childRouter\r\n ._createNavigationInstruction(path, navigationInstruction)\r\n .then(function (childInstruction) {\r\n viewPortPlan.childNavigationInstruction = childInstruction;\r\n return _buildNavigationPlan(childInstruction)\r\n .then(function (childPlan) {\r\n if (childPlan instanceof Redirect) {\r\n return Promise.reject(childPlan);\r\n }\r\n childInstruction.plan = childPlan;\r\n viewPortInstruction.childNavigationInstruction = childInstruction;\r\n return loadNewRoute(routeLoader, childInstruction);\r\n });\r\n });\r\n }\r\n // ts complains without this, though they are same\r\n return void 0;\r\n });\r\n};\r\n/**\r\n * Load a routed-component based on navigation instruction and route config\r\n * @internal exported for unit testing only\r\n */\r\nvar loadComponent = function (routeLoader, navigationInstruction, config) {\r\n var router = navigationInstruction.router;\r\n var lifecycleArgs = navigationInstruction.lifecycleArgs;\r\n return Promise.resolve()\r\n .then(function () { return routeLoader.loadRoute(router, config, navigationInstruction); })\r\n .then(\r\n /**\r\n * @param component an object carrying information about loaded route\r\n * typically contains information about view model, childContainer, view and router\r\n */\r\n function (component) {\r\n var viewModel = component.viewModel, childContainer = component.childContainer;\r\n component.router = router;\r\n component.config = config;\r\n if ('configureRouter' in viewModel) {\r\n var childRouter_1 = childContainer.getChildRouter();\r\n component.childRouter = childRouter_1;\r\n return childRouter_1\r\n .configure(function (c) { return viewModel.configureRouter(c, childRouter_1, lifecycleArgs[0], lifecycleArgs[1], lifecycleArgs[2]); })\r\n .then(function () { return component; });\r\n }\r\n return component;\r\n });\r\n};\n\n/**\r\n * Abstract class that is responsible for loading view / view model from a route config\r\n * The default implementation can be found in `aurelia-templating-router`\r\n */\r\nvar RouteLoader = /** @class */ (function () {\r\n function RouteLoader() {\r\n }\r\n /**\r\n * Load a route config based on its viewmodel / view configuration\r\n */\r\n // return typing: return typings used to be never\r\n // as it was a throw. Changing it to Promise should not cause any issues\r\n RouteLoader.prototype.loadRoute = function (router, config, navigationInstruction) {\r\n throw new Error('Route loaders must implement \"loadRoute(router, config, navigationInstruction)\".');\r\n };\r\n return RouteLoader;\r\n}());\n\n/**\r\n * A pipeline step responsible for loading a route config of a navigation instruction\r\n */\r\nvar LoadRouteStep = /** @class */ (function () {\r\n function LoadRouteStep(routeLoader) {\r\n this.routeLoader = routeLoader;\r\n }\r\n /**@internal */\r\n LoadRouteStep.inject = function () { return [RouteLoader]; };\r\n /**\r\n * Run the internal to load route config of a navigation instruction to prepare for next steps in the pipeline\r\n */\r\n LoadRouteStep.prototype.run = function (navigationInstruction, next) {\r\n return loadNewRoute(this.routeLoader, navigationInstruction)\r\n .then(next, next.cancel);\r\n };\r\n return LoadRouteStep;\r\n}());\n\n/**\r\n * A pipeline step for instructing a piepline to commit changes on a navigation instruction\r\n */\r\nvar CommitChangesStep = /** @class */ (function () {\r\n function CommitChangesStep() {\r\n }\r\n CommitChangesStep.prototype.run = function (navigationInstruction, next) {\r\n return navigationInstruction\r\n ._commitChanges(/*wait to swap?*/ true)\r\n .then(function () {\r\n navigationInstruction._updateTitle();\r\n return next();\r\n });\r\n };\r\n return CommitChangesStep;\r\n}());\n\n/**\r\n * An optional interface describing the available activation strategies.\r\n * @internal Used internally.\r\n */\r\nvar InternalActivationStrategy;\r\n(function (InternalActivationStrategy) {\r\n /**\r\n * Reuse the existing view model, without invoking Router lifecycle hooks.\r\n */\r\n InternalActivationStrategy[\"NoChange\"] = \"no-change\";\r\n /**\r\n * Reuse the existing view model, invoking Router lifecycle hooks.\r\n */\r\n InternalActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n /**\r\n * Replace the existing view model, invoking Router lifecycle hooks.\r\n */\r\n InternalActivationStrategy[\"Replace\"] = \"replace\";\r\n})(InternalActivationStrategy || (InternalActivationStrategy = {}));\r\n/**\r\n * The strategy to use when activating modules during navigation.\r\n */\r\n// kept for compat reason\r\nvar activationStrategy = {\r\n noChange: \"no-change\" /* NoChange */,\r\n invokeLifecycle: \"invoke-lifecycle\" /* InvokeLifecycle */,\r\n replace: \"replace\" /* Replace */\r\n};\n\n/**\r\n * Recursively find list of deactivate-able view models\r\n * and invoke the either 'canDeactivate' or 'deactivate' on each\r\n * @internal exported for unit testing\r\n */\r\nvar processDeactivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n var plan = navigationInstruction.plan;\r\n var infos = findDeactivatable(plan, callbackName);\r\n var i = infos.length; // query from inside out\r\n function inspect(val) {\r\n if (ignoreResult || shouldContinue(val)) {\r\n return iterate();\r\n }\r\n return next.cancel(val);\r\n }\r\n function iterate() {\r\n if (i--) {\r\n try {\r\n var viewModel = infos[i];\r\n var result = viewModel[callbackName](navigationInstruction);\r\n return processPotential(result, inspect, next.cancel);\r\n }\r\n catch (error) {\r\n return next.cancel(error);\r\n }\r\n }\r\n navigationInstruction.router.couldDeactivate = true;\r\n return next();\r\n }\r\n return iterate();\r\n};\r\n/**\r\n * Recursively find and returns a list of deactivate-able view models\r\n * @internal exported for unit testing\r\n */\r\nvar findDeactivatable = function (plan, callbackName, list) {\r\n if (list === void 0) { list = []; }\r\n for (var viewPortName in plan) {\r\n var viewPortPlan = plan[viewPortName];\r\n var prevComponent = viewPortPlan.prevComponent;\r\n if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle || viewPortPlan.strategy === activationStrategy.replace)\r\n && prevComponent) {\r\n var viewModel = prevComponent.viewModel;\r\n if (callbackName in viewModel) {\r\n list.push(viewModel);\r\n }\r\n }\r\n if (viewPortPlan.strategy === activationStrategy.replace && prevComponent) {\r\n addPreviousDeactivatable(prevComponent, callbackName, list);\r\n }\r\n else if (viewPortPlan.childNavigationInstruction) {\r\n findDeactivatable(viewPortPlan.childNavigationInstruction.plan, callbackName, list);\r\n }\r\n }\r\n return list;\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar addPreviousDeactivatable = function (component, callbackName, list) {\r\n var childRouter = component.childRouter;\r\n if (childRouter && childRouter.currentInstruction) {\r\n var viewPortInstructions = childRouter.currentInstruction.viewPortInstructions;\r\n for (var viewPortName in viewPortInstructions) {\r\n var viewPortInstruction = viewPortInstructions[viewPortName];\r\n var prevComponent = viewPortInstruction.component;\r\n var prevViewModel = prevComponent.viewModel;\r\n if (callbackName in prevViewModel) {\r\n list.push(prevViewModel);\r\n }\r\n addPreviousDeactivatable(prevComponent, callbackName, list);\r\n }\r\n }\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar processActivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n var infos = findActivatable(navigationInstruction, callbackName);\r\n var length = infos.length;\r\n var i = -1; // query from top down\r\n function inspect(val, router) {\r\n if (ignoreResult || shouldContinue(val, router)) {\r\n return iterate();\r\n }\r\n return next.cancel(val);\r\n }\r\n function iterate() {\r\n var _a;\r\n i++;\r\n if (i < length) {\r\n try {\r\n var current_1 = infos[i];\r\n var result = (_a = current_1.viewModel)[callbackName].apply(_a, current_1.lifecycleArgs);\r\n return processPotential(result, function (val) { return inspect(val, current_1.router); }, next.cancel);\r\n }\r\n catch (error) {\r\n return next.cancel(error);\r\n }\r\n }\r\n return next();\r\n }\r\n return iterate();\r\n};\r\n/**\r\n * Find list of activatable view model and add to list (3rd parameter)\r\n * @internal exported for unit testing\r\n */\r\nvar findActivatable = function (navigationInstruction, callbackName, list, router) {\r\n if (list === void 0) { list = []; }\r\n var plan = navigationInstruction.plan;\r\n Object\r\n .keys(plan)\r\n .forEach(function (viewPortName) {\r\n var viewPortPlan = plan[viewPortName];\r\n var viewPortInstruction = navigationInstruction.viewPortInstructions[viewPortName];\r\n var viewPortComponent = viewPortInstruction.component;\r\n var viewModel = viewPortComponent.viewModel;\r\n if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle\r\n || viewPortPlan.strategy === activationStrategy.replace)\r\n && callbackName in viewModel) {\r\n list.push({\r\n viewModel: viewModel,\r\n lifecycleArgs: viewPortInstruction.lifecycleArgs,\r\n router: router\r\n });\r\n }\r\n var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n if (childNavInstruction) {\r\n findActivatable(childNavInstruction, callbackName, list, viewPortComponent.childRouter || router);\r\n }\r\n });\r\n return list;\r\n};\r\nvar shouldContinue = function (output, router) {\r\n if (output instanceof Error) {\r\n return false;\r\n }\r\n if (isNavigationCommand(output)) {\r\n if (typeof output.setRouter === 'function') {\r\n output.setRouter(router);\r\n }\r\n return !!output.shouldContinueProcessing;\r\n }\r\n if (output === undefined) {\r\n return true;\r\n }\r\n return output;\r\n};\r\n/**\r\n * wraps a subscription, allowing unsubscribe calls even if\r\n * the first value comes synchronously\r\n */\r\nvar SafeSubscription = /** @class */ (function () {\r\n function SafeSubscription(subscriptionFunc) {\r\n this._subscribed = true;\r\n this._subscription = subscriptionFunc(this);\r\n if (!this._subscribed) {\r\n this.unsubscribe();\r\n }\r\n }\r\n Object.defineProperty(SafeSubscription.prototype, \"subscribed\", {\r\n get: function () {\r\n return this._subscribed;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n SafeSubscription.prototype.unsubscribe = function () {\r\n if (this._subscribed && this._subscription) {\r\n this._subscription.unsubscribe();\r\n }\r\n this._subscribed = false;\r\n };\r\n return SafeSubscription;\r\n}());\r\n/**\r\n * A function to process return value from `activate`/`canActivate` steps\r\n * Supports observable/promise\r\n *\r\n * For observable, resolve at first next() or on complete()\r\n */\r\nvar processPotential = function (obj, resolve, reject) {\r\n // if promise like\r\n if (obj && typeof obj.then === 'function') {\r\n return Promise.resolve(obj).then(resolve).catch(reject);\r\n }\r\n // if observable\r\n if (obj && typeof obj.subscribe === 'function') {\r\n var obs_1 = obj;\r\n return new SafeSubscription(function (sub) { return obs_1.subscribe({\r\n next: function () {\r\n if (sub.subscribed) {\r\n sub.unsubscribe();\r\n resolve(obj);\r\n }\r\n },\r\n error: function (error) {\r\n if (sub.subscribed) {\r\n sub.unsubscribe();\r\n reject(error);\r\n }\r\n },\r\n complete: function () {\r\n if (sub.subscribed) {\r\n sub.unsubscribe();\r\n resolve(obj);\r\n }\r\n }\r\n }); });\r\n }\r\n // else just resolve\r\n try {\r\n return resolve(obj);\r\n }\r\n catch (error) {\r\n return reject(error);\r\n }\r\n};\n\n/**\r\n * A pipeline step responsible for finding and activating method `canDeactivate` on a view model of a route\r\n */\r\nvar CanDeactivatePreviousStep = /** @class */ (function () {\r\n function CanDeactivatePreviousStep() {\r\n }\r\n CanDeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n return processDeactivatable(navigationInstruction, 'canDeactivate', next);\r\n };\r\n return CanDeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `canActivate` on a view model of a route\r\n */\r\nvar CanActivateNextStep = /** @class */ (function () {\r\n function CanActivateNextStep() {\r\n }\r\n CanActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n return processActivatable(navigationInstruction, 'canActivate', next);\r\n };\r\n return CanActivateNextStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `deactivate` on a view model of a route\r\n */\r\nvar DeactivatePreviousStep = /** @class */ (function () {\r\n function DeactivatePreviousStep() {\r\n }\r\n DeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n return processDeactivatable(navigationInstruction, 'deactivate', next, true);\r\n };\r\n return DeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `activate` on a view model of a route\r\n */\r\nvar ActivateNextStep = /** @class */ (function () {\r\n function ActivateNextStep() {\r\n }\r\n ActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n return processActivatable(navigationInstruction, 'activate', next, true);\r\n };\r\n return ActivateNextStep;\r\n}());\n\n/**\r\n * A multi-slots Pipeline Placeholder Step for hooking into a pipeline execution\r\n */\r\nvar PipelineSlot = /** @class */ (function () {\r\n function PipelineSlot(container, name, alias) {\r\n this.steps = [];\r\n this.container = container;\r\n this.slotName = name;\r\n this.slotAlias = alias;\r\n }\r\n PipelineSlot.prototype.getSteps = function () {\r\n var _this = this;\r\n return this.steps.map(function (x) { return _this.container.get(x); });\r\n };\r\n return PipelineSlot;\r\n}());\r\n/**\r\n * Class responsible for creating the navigation pipeline.\r\n */\r\nvar PipelineProvider = /** @class */ (function () {\r\n function PipelineProvider(container) {\r\n this.container = container;\r\n this.steps = [\r\n BuildNavigationPlanStep,\r\n CanDeactivatePreviousStep,\r\n LoadRouteStep,\r\n createPipelineSlot(container, \"authorize\" /* Authorize */),\r\n CanActivateNextStep,\r\n createPipelineSlot(container, \"preActivate\" /* PreActivate */, 'modelbind'),\r\n // NOTE: app state changes start below - point of no return\r\n DeactivatePreviousStep,\r\n ActivateNextStep,\r\n createPipelineSlot(container, \"preRender\" /* PreRender */, 'precommit'),\r\n CommitChangesStep,\r\n createPipelineSlot(container, \"postRender\" /* PostRender */, 'postcomplete')\r\n ];\r\n }\r\n /**@internal */\r\n PipelineProvider.inject = function () { return [aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_1__[\"Container\"]]; };\r\n /**\r\n * Create the navigation pipeline.\r\n */\r\n PipelineProvider.prototype.createPipeline = function (useCanDeactivateStep) {\r\n var _this = this;\r\n if (useCanDeactivateStep === void 0) { useCanDeactivateStep = true; }\r\n var pipeline = new Pipeline();\r\n this.steps.forEach(function (step) {\r\n if (useCanDeactivateStep || step !== CanDeactivatePreviousStep) {\r\n pipeline.addStep(_this.container.get(step));\r\n }\r\n });\r\n return pipeline;\r\n };\r\n /**@internal */\r\n PipelineProvider.prototype._findStep = function (name) {\r\n // Steps that are not PipelineSlots are constructor functions, and they will automatically fail. Probably.\r\n return this.steps.find(function (x) { return x.slotName === name || x.slotAlias === name; });\r\n };\r\n /**\r\n * Adds a step into the pipeline at a known slot location.\r\n */\r\n PipelineProvider.prototype.addStep = function (name, step) {\r\n var found = this._findStep(name);\r\n if (found) {\r\n var slotSteps = found.steps;\r\n // prevent duplicates\r\n if (!slotSteps.includes(step)) {\r\n slotSteps.push(step);\r\n }\r\n }\r\n else {\r\n throw new Error(\"Invalid pipeline slot name: \" + name + \".\");\r\n }\r\n };\r\n /**\r\n * Removes a step from a slot in the pipeline\r\n */\r\n PipelineProvider.prototype.removeStep = function (name, step) {\r\n var slot = this._findStep(name);\r\n if (slot) {\r\n var slotSteps = slot.steps;\r\n slotSteps.splice(slotSteps.indexOf(step), 1);\r\n }\r\n };\r\n /**\r\n * Clears all steps from a slot in the pipeline\r\n * @internal\r\n */\r\n PipelineProvider.prototype._clearSteps = function (name) {\r\n if (name === void 0) { name = ''; }\r\n var slot = this._findStep(name);\r\n if (slot) {\r\n slot.steps = [];\r\n }\r\n };\r\n /**\r\n * Resets all pipeline slots\r\n */\r\n PipelineProvider.prototype.reset = function () {\r\n this._clearSteps(\"authorize\" /* Authorize */);\r\n this._clearSteps(\"preActivate\" /* PreActivate */);\r\n this._clearSteps(\"preRender\" /* PreRender */);\r\n this._clearSteps(\"postRender\" /* PostRender */);\r\n };\r\n return PipelineProvider;\r\n}());\r\n/**@internal */\r\nvar createPipelineSlot = function (container, name, alias) {\r\n return new PipelineSlot(container, name, alias);\r\n};\n\nvar logger = Object(aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"])('app-router');\r\n/**\r\n * The main application router.\r\n */\r\nvar AppRouter = /** @class */ (function (_super) {\r\n __extends(AppRouter, _super);\r\n function AppRouter(container, history, pipelineProvider, events) {\r\n var _this = _super.call(this, container, history) || this;\r\n _this.pipelineProvider = pipelineProvider;\r\n _this.events = events;\r\n return _this;\r\n }\r\n /**@internal */\r\n AppRouter.inject = function () { return [aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_1__[\"Container\"], aurelia_history__WEBPACK_IMPORTED_MODULE_2__[\"History\"], PipelineProvider, aurelia_event_aggregator__WEBPACK_IMPORTED_MODULE_4__[\"EventAggregator\"]]; };\r\n /**\r\n * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n */\r\n AppRouter.prototype.reset = function () {\r\n _super.prototype.reset.call(this);\r\n this.maxInstructionCount = 10;\r\n if (!this._queue) {\r\n this._queue = [];\r\n }\r\n else {\r\n this._queue.length = 0;\r\n }\r\n };\r\n /**\r\n * Loads the specified URL.\r\n *\r\n * @param url The URL fragment to load.\r\n */\r\n AppRouter.prototype.loadUrl = function (url) {\r\n var _this = this;\r\n return this\r\n ._createNavigationInstruction(url)\r\n .then(function (instruction) { return _this._queueInstruction(instruction); })\r\n .catch(function (error) {\r\n logger.error(error);\r\n restorePreviousLocation(_this);\r\n });\r\n };\r\n /**\r\n * Registers a viewPort to be used as a rendering target for activated routes.\r\n *\r\n * @param viewPort The viewPort. This is typically a element in Aurelia default impl\r\n * @param name The name of the viewPort. 'default' if unspecified.\r\n */\r\n AppRouter.prototype.registerViewPort = function (viewPort, name) {\r\n var _this = this;\r\n // having strong typing without changing public API\r\n var $viewPort = viewPort;\r\n _super.prototype.registerViewPort.call(this, $viewPort, name);\r\n // beside adding viewport to the registry of this instance\r\n // AppRouter also configure routing/history to start routing functionality\r\n // There are situation where there are more than 1 element at root view\r\n // in that case, still only activate once via the following guard\r\n if (!this.isActive) {\r\n var viewModel_1 = this._findViewModel($viewPort);\r\n if ('configureRouter' in viewModel_1) {\r\n // If there are more than one element at root view\r\n // use this flag to guard against configure method being invoked multiple times\r\n // this flag is set inside method configure\r\n if (!this.isConfigured) {\r\n // replace the real resolve with a noop to guarantee that any action in base class Router\r\n // won't resolve the configurePromise prematurely\r\n var resolveConfiguredPromise_1 = this._resolveConfiguredPromise;\r\n this._resolveConfiguredPromise = function () { };\r\n return this\r\n .configure(function (config) {\r\n return Promise\r\n .resolve(viewModel_1.configureRouter(config, _this))\r\n // an issue with configure interface. Should be fixed there\r\n // todo: fix this via configure interface in router\r\n .then(function () { return config; });\r\n })\r\n .then(function () {\r\n _this.activate();\r\n resolveConfiguredPromise_1();\r\n });\r\n }\r\n }\r\n else {\r\n this.activate();\r\n }\r\n }\r\n // when a viewport is added dynamically to a root view that is already activated\r\n // just process the navigation instruction\r\n else {\r\n this._dequeueInstruction();\r\n }\r\n return Promise.resolve();\r\n };\r\n /**\r\n * Activates the router. This instructs the router to begin listening for history changes and processing instructions.\r\n *\r\n * @params options The set of options to activate the router with.\r\n */\r\n AppRouter.prototype.activate = function (options) {\r\n if (this.isActive) {\r\n return;\r\n }\r\n this.isActive = true;\r\n // route handler property is responsible for handling url change\r\n // the interface of aurelia-history isn't clear on this perspective\r\n this.options = Object.assign({ routeHandler: this.loadUrl.bind(this) }, this.options, options);\r\n this.history.activate(this.options);\r\n this._dequeueInstruction();\r\n };\r\n /**\r\n * Deactivates the router.\r\n */\r\n AppRouter.prototype.deactivate = function () {\r\n this.isActive = false;\r\n this.history.deactivate();\r\n };\r\n /**@internal */\r\n AppRouter.prototype._queueInstruction = function (instruction) {\r\n var _this = this;\r\n return new Promise(function (resolve) {\r\n instruction.resolve = resolve;\r\n _this._queue.unshift(instruction);\r\n _this._dequeueInstruction();\r\n });\r\n };\r\n /**@internal */\r\n AppRouter.prototype._dequeueInstruction = function (instructionCount) {\r\n var _this = this;\r\n if (instructionCount === void 0) { instructionCount = 0; }\r\n return Promise.resolve().then(function () {\r\n if (_this.isNavigating && !instructionCount) {\r\n // ts complains about inconsistent returns without void 0\r\n return void 0;\r\n }\r\n var instruction = _this._queue.shift();\r\n _this._queue.length = 0;\r\n if (!instruction) {\r\n // ts complains about inconsistent returns without void 0\r\n return void 0;\r\n }\r\n _this.isNavigating = true;\r\n var navtracker = _this.history.getState('NavigationTracker');\r\n var currentNavTracker = _this.currentNavigationTracker;\r\n if (!navtracker && !currentNavTracker) {\r\n _this.isNavigatingFirst = true;\r\n _this.isNavigatingNew = true;\r\n }\r\n else if (!navtracker) {\r\n _this.isNavigatingNew = true;\r\n }\r\n else if (!currentNavTracker) {\r\n _this.isNavigatingRefresh = true;\r\n }\r\n else if (currentNavTracker < navtracker) {\r\n _this.isNavigatingForward = true;\r\n }\r\n else if (currentNavTracker > navtracker) {\r\n _this.isNavigatingBack = true;\r\n }\r\n if (!navtracker) {\r\n navtracker = Date.now();\r\n _this.history.setState('NavigationTracker', navtracker);\r\n }\r\n _this.currentNavigationTracker = navtracker;\r\n instruction.previousInstruction = _this.currentInstruction;\r\n var maxInstructionCount = _this.maxInstructionCount;\r\n if (!instructionCount) {\r\n _this.events.publish(\"router:navigation:processing\" /* Processing */, { instruction: instruction });\r\n }\r\n else if (instructionCount === maxInstructionCount - 1) {\r\n logger.error(instructionCount + 1 + \" navigation instructions have been attempted without success. Restoring last known good location.\");\r\n restorePreviousLocation(_this);\r\n return _this._dequeueInstruction(instructionCount + 1);\r\n }\r\n else if (instructionCount > maxInstructionCount) {\r\n throw new Error('Maximum navigation attempts exceeded. Giving up.');\r\n }\r\n var pipeline = _this.pipelineProvider.createPipeline(!_this.couldDeactivate);\r\n return pipeline\r\n .run(instruction)\r\n .then(function (result) { return processResult(instruction, result, instructionCount, _this); })\r\n .catch(function (error) {\r\n return { output: error instanceof Error ? error : new Error(error) };\r\n })\r\n .then(function (result) { return resolveInstruction(instruction, result, !!instructionCount, _this); });\r\n });\r\n };\r\n /**@internal */\r\n AppRouter.prototype._findViewModel = function (viewPort) {\r\n if (this.container.viewModel) {\r\n return this.container.viewModel;\r\n }\r\n if (viewPort.container) {\r\n var container = viewPort.container;\r\n while (container) {\r\n if (container.viewModel) {\r\n this.container.viewModel = container.viewModel;\r\n return container.viewModel;\r\n }\r\n container = container.parent;\r\n }\r\n }\r\n return undefined;\r\n };\r\n return AppRouter;\r\n}(Router));\r\nvar processResult = function (instruction, result, instructionCount, router) {\r\n if (!(result && 'completed' in result && 'output' in result)) {\r\n result = result || {};\r\n result.output = new Error(\"Expected router pipeline to return a navigation result, but got [\" + JSON.stringify(result) + \"] instead.\");\r\n }\r\n var finalResult = null;\r\n var navigationCommandResult = null;\r\n if (isNavigationCommand(result.output)) {\r\n navigationCommandResult = result.output.navigate(router);\r\n }\r\n else {\r\n finalResult = result;\r\n if (!result.completed) {\r\n if (result.output instanceof Error) {\r\n logger.error(result.output.toString());\r\n }\r\n restorePreviousLocation(router);\r\n }\r\n }\r\n return Promise.resolve(navigationCommandResult)\r\n .then(function (_) { return router._dequeueInstruction(instructionCount + 1); })\r\n .then(function (innerResult) { return finalResult || innerResult || result; });\r\n};\r\nvar resolveInstruction = function (instruction, result, isInnerInstruction, router) {\r\n instruction.resolve(result);\r\n var eventAggregator = router.events;\r\n var eventArgs = { instruction: instruction, result: result };\r\n if (!isInnerInstruction) {\r\n router.isNavigating = false;\r\n router.isExplicitNavigation = false;\r\n router.isExplicitNavigationBack = false;\r\n router.isNavigatingFirst = false;\r\n router.isNavigatingNew = false;\r\n router.isNavigatingRefresh = false;\r\n router.isNavigatingForward = false;\r\n router.isNavigatingBack = false;\r\n router.couldDeactivate = false;\r\n var eventName = void 0;\r\n if (result.output instanceof Error) {\r\n eventName = \"router:navigation:error\" /* Error */;\r\n }\r\n else if (!result.completed) {\r\n eventName = \"router:navigation:canceled\" /* Canceled */;\r\n }\r\n else {\r\n var queryString = instruction.queryString ? ('?' + instruction.queryString) : '';\r\n router.history.previousLocation = instruction.fragment + queryString;\r\n eventName = \"router:navigation:success\" /* Success */;\r\n }\r\n eventAggregator.publish(eventName, eventArgs);\r\n eventAggregator.publish(\"router:navigation:complete\" /* Complete */, eventArgs);\r\n }\r\n else {\r\n eventAggregator.publish(\"router:navigation:child:complete\" /* ChildComplete */, eventArgs);\r\n }\r\n return result;\r\n};\r\nvar restorePreviousLocation = function (router) {\r\n var previousLocation = router.history.previousLocation;\r\n if (previousLocation) {\r\n router.navigate(previousLocation, { trigger: false, replace: true });\r\n }\r\n else if (router.fallbackRoute) {\r\n router.navigate(router.fallbackRoute, { trigger: true, replace: true });\r\n }\r\n else {\r\n logger.error('Router navigation failed, and no previous location or fallbackRoute could be restored.');\r\n }\r\n};\n\n/**\r\n* The status of a Pipeline.\r\n*/\r\nvar PipelineStatus;\r\n(function (PipelineStatus) {\r\n PipelineStatus[\"Completed\"] = \"completed\";\r\n PipelineStatus[\"Canceled\"] = \"canceled\";\r\n PipelineStatus[\"Rejected\"] = \"rejected\";\r\n PipelineStatus[\"Running\"] = \"running\";\r\n})(PipelineStatus || (PipelineStatus = {}));\n\n/**\r\n * A list of known router events used by the Aurelia router\r\n * to signal the pipeline has come to a certain state\r\n */\r\n// const enum is preserved in tsconfig\r\nvar RouterEvent;\r\n(function (RouterEvent) {\r\n RouterEvent[\"Processing\"] = \"router:navigation:processing\";\r\n RouterEvent[\"Error\"] = \"router:navigation:error\";\r\n RouterEvent[\"Canceled\"] = \"router:navigation:canceled\";\r\n RouterEvent[\"Complete\"] = \"router:navigation:complete\";\r\n RouterEvent[\"Success\"] = \"router:navigation:success\";\r\n RouterEvent[\"ChildComplete\"] = \"router:navigation:child:complete\";\r\n})(RouterEvent || (RouterEvent = {}));\n\n/**\r\n * Available pipeline slot names to insert interceptor into router pipeline\r\n */\r\n// const enum is preserved in tsconfig\r\nvar PipelineSlotName;\r\n(function (PipelineSlotName) {\r\n /**\r\n * Authorization slot. Invoked early in the pipeline,\r\n * before `canActivate` hook of incoming route\r\n */\r\n PipelineSlotName[\"Authorize\"] = \"authorize\";\r\n /**\r\n * Pre-activation slot. Invoked early in the pipeline,\r\n * Invoked timing:\r\n * - after Authorization slot\r\n * - after canActivate hook on new view model\r\n * - before deactivate hook on old view model\r\n * - before activate hook on new view model\r\n */\r\n PipelineSlotName[\"PreActivate\"] = \"preActivate\";\r\n /**\r\n * Pre-render slot. Invoked later in the pipeline\r\n * Invokcation timing:\r\n * - after activate hook on new view model\r\n * - before commit step on new navigation instruction\r\n */\r\n PipelineSlotName[\"PreRender\"] = \"preRender\";\r\n /**\r\n * Post-render slot. Invoked last in the pipeline\r\n */\r\n PipelineSlotName[\"PostRender\"] = \"postRender\";\r\n})(PipelineSlotName || (PipelineSlotName = {}));\n\n\n//# sourceMappingURL=aurelia-router.js.map\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! bluebird */ \"./node_modules/bluebird/js/browser/bluebird.js-exposed\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS1yb3V0ZXIvZGlzdC9uYXRpdmUtbW9kdWxlcy9hdXJlbGlhLXJvdXRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hdXJlbGlhLXJvdXRlci9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtcm91dGVyLmpzP2UzMmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ2F1cmVsaWEtaGlzdG9yeSc7XG5pbXBvcnQgeyBSb3V0ZVJlY29nbml6ZXIgfSBmcm9tICdhdXJlbGlhLXJvdXRlLXJlY29nbml6ZXInO1xuaW1wb3J0IHsgRXZlbnRBZ2dyZWdhdG9yIH0gZnJvbSAnYXVyZWxpYS1ldmVudC1hZ2dyZWdhdG9yJztcblxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxuXG4vKipcclxuICogQ2xhc3MgdXNlZCB0byByZXByZXNlbnQgYW4gaW5zdHJ1Y3Rpb24gZHVyaW5nIGEgbmF2aWdhdGlvbi5cclxuICovXHJcbnZhciBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24oaW5pdCkge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1cnJlbnQgYnVpbHQgdmlld3BvcnQgcGxhbiBvZiB0aGlzIG5hdiBpbnN0cnVjdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucGxhbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge307XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcclxuICAgICAgICB0aGlzLnBhcmFtcyA9IHRoaXMucGFyYW1zIHx8IHt9O1xyXG4gICAgICAgIHRoaXMudmlld1BvcnRJbnN0cnVjdGlvbnMgPSB7fTtcclxuICAgICAgICB2YXIgYW5jZXN0b3JQYXJhbXMgPSBbXTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXM7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQucGFyYW1zKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQuY29uZmlnICYmIGN1cnJlbnQuY29uZmlnLmhhc0NoaWxkUm91dGVyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHBhcmFtIGZvciB0aGUgaW5qZWN0ZWQgY2hpbGQgcm91dGUgc2VnbWVudFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnRQYXJhbXNbY3VycmVudC5nZXRXaWxkQ2FyZE5hbWUoKV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYW5jZXN0b3JQYXJhbXMudW5zaGlmdChjdXJyZW50UGFyYW1zKTtcclxuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7XHJcbiAgICAgICAgdmFyIGFsbFBhcmFtcyA9IE9iamVjdC5hc3NpZ24uYXBwbHkoT2JqZWN0LCBbe30sIHRoaXMucXVlcnlQYXJhbXNdLmNvbmNhdChhbmNlc3RvclBhcmFtcykpO1xyXG4gICAgICAgIHRoaXMubGlmZWN5Y2xlQXJncyA9IFthbGxQYXJhbXMsIHRoaXMuY29uZmlnLCB0aGlzXTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbiBhcnJheSBjb250YWluaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gYW5kIGFsbCBjaGlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb24uXHJcbiAgICAgKi9cclxuICAgIE5hdmlnYXRpb25JbnN0cnVjdGlvbi5wcm90b3R5cGUuZ2V0QWxsSW5zdHJ1Y3Rpb25zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbnMgPSBbdGhpc107XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0SW5zdHJ1Y3Rpb25zID0gdGhpcy52aWV3UG9ydEluc3RydWN0aW9ucztcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmlld1BvcnRJbnN0cnVjdGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkSW5zdHJ1Y3Rpb24gPSB2aWV3UG9ydEluc3RydWN0aW9uc1trZXldLmNoaWxkTmF2aWdhdGlvbkluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2guYXBwbHkoaW5zdHJ1Y3Rpb25zLCBjaGlsZEluc3RydWN0aW9uLmdldEFsbEluc3RydWN0aW9ucygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25zO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBpbnN0cnVjdGlvbiBhbmQgYWxsIGNoaWxkIGluc3RydWN0aW9ucyBmb3IgdGhlIHByZXZpb3VzIG5hdmlnYXRpb24uXHJcbiAgICAgKiBQcmV2aW91cyBpbnN0cnVjdGlvbnMgYXJlIG5vIGxvbmdlciBhdmFpbGFibGUgYWZ0ZXIgbmF2aWdhdGlvbiBjb21wbGV0ZXMuXHJcbiAgICAgKi9cclxuICAgIE5hdmlnYXRpb25JbnN0cnVjdGlvbi5wcm90b3R5cGUuZ2V0QWxsUHJldmlvdXNJbnN0cnVjdGlvbnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsSW5zdHJ1Y3Rpb25zKCkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnByZXZpb3VzSW5zdHJ1Y3Rpb247IH0pLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gYzsgfSk7XHJcbiAgICB9O1xyXG4gICAgTmF2aWdhdGlvbkluc3RydWN0aW9uLnByb3RvdHlwZS5hZGRWaWV3UG9ydEluc3RydWN0aW9uID0gZnVuY3Rpb24gKG5hbWVPckluaXRPcHRpb25zLCBzdHJhdGVneSwgbW9kdWxlSWQsIGNvbXBvbmVudCkge1xyXG4gICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9uO1xyXG4gICAgICAgIHZhciB2aWV3UG9ydE5hbWUgPSB0eXBlb2YgbmFtZU9ySW5pdE9wdGlvbnMgPT09ICdzdHJpbmcnID8gbmFtZU9ySW5pdE9wdGlvbnMgOiBuYW1lT3JJbml0T3B0aW9ucy5uYW1lO1xyXG4gICAgICAgIHZhciBsaWZlY3ljbGVBcmdzID0gdGhpcy5saWZlY3ljbGVBcmdzO1xyXG4gICAgICAgIHZhciBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBsaWZlY3ljbGVBcmdzWzFdLCB7IGN1cnJlbnRWaWV3UG9ydDogdmlld1BvcnROYW1lIH0pO1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmFtZU9ySW5pdE9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHZpZXdQb3J0SW5zdHJ1Y3Rpb24gPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lT3JJbml0T3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneSxcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiBtb2R1bGVJZCxcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgY2hpbGRSb3V0ZXI6IGNvbXBvbmVudC5jaGlsZFJvdXRlcixcclxuICAgICAgICAgICAgICAgIGxpZmVjeWNsZUFyZ3M6IFtsaWZlY3ljbGVBcmdzWzBdLCBjb25maWcsIGxpZmVjeWNsZUFyZ3NbMl1dXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2aWV3UG9ydEluc3RydWN0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdmlld1BvcnROYW1lLFxyXG4gICAgICAgICAgICAgICAgc3RyYXRlZ3k6IG5hbWVPckluaXRPcHRpb25zLnN0cmF0ZWd5LFxyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBuYW1lT3JJbml0T3B0aW9ucy5jb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogbmFtZU9ySW5pdE9wdGlvbnMubW9kdWxlSWQsXHJcbiAgICAgICAgICAgICAgICBjaGlsZFJvdXRlcjogbmFtZU9ySW5pdE9wdGlvbnMuY29tcG9uZW50LmNoaWxkUm91dGVyLFxyXG4gICAgICAgICAgICAgICAgbGlmZWN5Y2xlQXJnczogW2xpZmVjeWNsZUFyZ3NbMF0sIGNvbmZpZywgbGlmZWN5Y2xlQXJnc1syXV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld1BvcnRJbnN0cnVjdGlvbnNbdmlld1BvcnROYW1lXSA9IHZpZXdQb3J0SW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSBwYXR0ZXJuJ3Mgd2lsZGNhcmQgcGFyYW1ldGVyLCBpZiBhcHBsaWNhYmxlLlxyXG4gICAgICovXHJcbiAgICBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmdldFdpbGRDYXJkTmFtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyB0b2RvOiBwb3RlbnRpYWwgaXNzdWUsIG9yIGF0IGxlYXN0IHVuc2FmZSB0eXBpbmdzXHJcbiAgICAgICAgdmFyIGNvbmZpZ1JvdXRlID0gdGhpcy5jb25maWcucm91dGU7XHJcbiAgICAgICAgdmFyIHdpbGRjYXJkSW5kZXggPSBjb25maWdSb3V0ZS5sYXN0SW5kZXhPZignKicpO1xyXG4gICAgICAgIHJldHVybiBjb25maWdSb3V0ZS5zdWJzdHIod2lsZGNhcmRJbmRleCArIDEpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcGF0aCBhbmQgcXVlcnkgc3RyaW5nIGNyZWF0ZWQgYnkgZmlsbGluZyB0aGUgcm91dGVcclxuICAgICAqIHBhdHRlcm4ncyB3aWxkY2FyZCBwYXJhbWV0ZXIgd2l0aCB0aGUgbWF0Y2hpbmcgcGFyYW0uXHJcbiAgICAgKi9cclxuICAgIE5hdmlnYXRpb25JbnN0cnVjdGlvbi5wcm90b3R5cGUuZ2V0V2lsZGNhcmRQYXRoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3aWxkY2FyZE5hbWUgPSB0aGlzLmdldFdpbGRDYXJkTmFtZSgpO1xyXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5wYXJhbXNbd2lsZGNhcmROYW1lXSB8fCAnJztcclxuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSB0aGlzLnF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICBwYXRoICs9ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluc3RydWN0aW9uJ3MgYmFzZSBVUkwsIGFjY291bnRpbmcgZm9yIHdpbGRjYXJkIHJvdXRlIHBhcmFtZXRlcnMuXHJcbiAgICAgKi9cclxuICAgIE5hdmlnYXRpb25JbnN0cnVjdGlvbi5wcm90b3R5cGUuZ2V0QmFzZVVybCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciAkZW5jb2RlVVJJID0gZW5jb2RlVVJJO1xyXG4gICAgICAgIHZhciBmcmFnbWVudCA9IGRlY29kZVVSSSh0aGlzLmZyYWdtZW50KTtcclxuICAgICAgICBpZiAoZnJhZ21lbnQgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHZhciBub25FbXB0eVJvdXRlID0gdGhpcy5yb3V0ZXIucm91dGVzLmZpbmQoZnVuY3Rpb24gKHJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcm91dGUubmFtZSA9PT0gX3RoaXMuY29uZmlnLm5hbWUgJiZcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZS5yb3V0ZSAhPT0gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAobm9uRW1wdHlSb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBub25FbXB0eVJvdXRlLnJvdXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5wYXJhbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuICRlbmNvZGVVUkkoZnJhZ21lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lsZGNhcmROYW1lID0gdGhpcy5nZXRXaWxkQ2FyZE5hbWUoKTtcclxuICAgICAgICB2YXIgcGF0aCA9IHRoaXMucGFyYW1zW3dpbGRjYXJkTmFtZV0gfHwgJyc7XHJcbiAgICAgICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkZW5jb2RlVVJJKGZyYWdtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICRlbmNvZGVVUkkoZnJhZ21lbnQuc3Vic3RyKDAsIGZyYWdtZW50Lmxhc3RJbmRleE9mKHBhdGgpKSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5hbGl6ZSBhIHZpZXdwb3J0IGluc3RydWN0aW9uXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgTmF2aWdhdGlvbkluc3RydWN0aW9uLnByb3RvdHlwZS5fY29tbWl0Q2hhbmdlcyA9IGZ1bmN0aW9uICh3YWl0VG9Td2FwKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7XHJcbiAgICAgICAgcm91dGVyLmN1cnJlbnRJbnN0cnVjdGlvbiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHByZXZpb3VzSW5zdHJ1Y3Rpb24gPSB0aGlzLnByZXZpb3VzSW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgaWYgKHByZXZpb3VzSW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgcHJldmlvdXNJbnN0cnVjdGlvbi5jb25maWcubmF2TW9kZWwuaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25maWcubmF2TW9kZWwuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHJvdXRlci5yZWZyZXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgIHZhciBsb2FkcyA9IFtdO1xyXG4gICAgICAgIHZhciBkZWxheVN3YXBzID0gW107XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0SW5zdHJ1Y3Rpb25zID0gdGhpcy52aWV3UG9ydEluc3RydWN0aW9ucztcclxuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uICh2aWV3UG9ydE5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHZpZXdQb3J0SW5zdHJ1Y3Rpb24gPSB2aWV3UG9ydEluc3RydWN0aW9uc1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgdmlld1BvcnQgPSByb3V0ZXIudmlld1BvcnRzW3ZpZXdQb3J0TmFtZV07XHJcbiAgICAgICAgICAgIGlmICghdmlld1BvcnQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZXJlIHdhcyBubyByb3V0ZXItdmlldyBmb3VuZCBpbiB0aGUgdmlldyBmb3IgXCIgKyB2aWV3UG9ydEluc3RydWN0aW9uLm1vZHVsZUlkICsgXCIuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjaGlsZE5hdkluc3RydWN0aW9uID0gdmlld1BvcnRJbnN0cnVjdGlvbi5jaGlsZE5hdmlnYXRpb25JbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgaWYgKHZpZXdQb3J0SW5zdHJ1Y3Rpb24uc3RyYXRlZ3kgPT09IFwicmVwbGFjZVwiIC8qIFJlcGxhY2UgKi8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5hdkluc3RydWN0aW9uICYmIGNoaWxkTmF2SW5zdHJ1Y3Rpb24ucGFyZW50Q2F0Y2hIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZHMucHVzaChjaGlsZE5hdkluc3RydWN0aW9uLl9jb21taXRDaGFuZ2VzKHdhaXRUb1N3YXApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VG9Td2FwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5U3dhcHMucHVzaCh7IHZpZXdQb3J0OiB2aWV3UG9ydCwgdmlld1BvcnRJbnN0cnVjdGlvbjogdmlld1BvcnRJbnN0cnVjdGlvbiB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZHMucHVzaCh2aWV3UG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucHJvY2Vzcyh2aWV3UG9ydEluc3RydWN0aW9uLCB3YWl0VG9Td2FwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBjaGlsZE5hdkluc3RydWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY2hpbGROYXZJbnN0cnVjdGlvbi5fY29tbWl0Q2hhbmdlcyh3YWl0VG9Td2FwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpOyB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGROYXZJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRzLnB1c2goY2hpbGROYXZJbnN0cnVjdGlvbi5fY29tbWl0Q2hhbmdlcyh3YWl0VG9Td2FwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAodmFyIHZpZXdQb3J0TmFtZSBpbiB2aWV3UG9ydEluc3RydWN0aW9ucykge1xyXG4gICAgICAgICAgICBfbG9vcF8xKHZpZXdQb3J0TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlXHJcbiAgICAgICAgICAgIC5hbGwobG9hZHMpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZGVsYXlTd2Fwcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnZpZXdQb3J0LnN3YXAoeC52aWV3UG9ydEluc3RydWN0aW9uKTsgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBydW5lKF90aGlzKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLl91cGRhdGVUaXRsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7XHJcbiAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5fYnVpbGRUaXRsZShyb3V0ZXIudGl0bGVTZXBhcmF0b3IpO1xyXG4gICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICByb3V0ZXIuaGlzdG9yeS5zZXRUaXRsZSh0aXRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKkBpbnRlcm5hbCAqL1xyXG4gICAgTmF2aWdhdGlvbkluc3RydWN0aW9uLnByb3RvdHlwZS5fYnVpbGRUaXRsZSA9IGZ1bmN0aW9uIChzZXBhcmF0b3IpIHtcclxuICAgICAgICBpZiAoc2VwYXJhdG9yID09PSB2b2lkIDApIHsgc2VwYXJhdG9yID0gJyB8ICc7IH1cclxuICAgICAgICB2YXIgdGl0bGUgPSAnJztcclxuICAgICAgICB2YXIgY2hpbGRUaXRsZXMgPSBbXTtcclxuICAgICAgICB2YXIgbmF2TW9kZWxUaXRsZSA9IHRoaXMuY29uZmlnLm5hdk1vZGVsLnRpdGxlO1xyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvblJvdXRlciA9IHRoaXMucm91dGVyO1xyXG4gICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9ucyA9IHRoaXMudmlld1BvcnRJbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgaWYgKG5hdk1vZGVsVGl0bGUpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSBpbnN0cnVjdGlvblJvdXRlci50cmFuc2Zvcm1UaXRsZShuYXZNb2RlbFRpdGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgdmlld1BvcnROYW1lIGluIHZpZXdQb3J0SW5zdHJ1Y3Rpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9uID0gdmlld1BvcnRJbnN0cnVjdGlvbnNbdmlld1BvcnROYW1lXTtcclxuICAgICAgICAgICAgdmFyIGNoaWxkX25hdl9pbnN0cnVjdGlvbiA9IHZpZXdQb3J0SW5zdHJ1Y3Rpb24uY2hpbGROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgIGlmIChjaGlsZF9uYXZfaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGlsZFRpdGxlID0gY2hpbGRfbmF2X2luc3RydWN0aW9uLl9idWlsZFRpdGxlKHNlcGFyYXRvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRUaXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVGl0bGVzLnB1c2goY2hpbGRUaXRsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkVGl0bGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aXRsZSA9IGNoaWxkVGl0bGVzLmpvaW4oc2VwYXJhdG9yKSArICh0aXRsZSA/IHNlcGFyYXRvciA6ICcnKSArIHRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb25Sb3V0ZXIudGl0bGUpIHtcclxuICAgICAgICAgICAgdGl0bGUgKz0gKHRpdGxlID8gc2VwYXJhdG9yIDogJycpICsgaW5zdHJ1Y3Rpb25Sb3V0ZXIudHJhbnNmb3JtVGl0bGUoaW5zdHJ1Y3Rpb25Sb3V0ZXIudGl0bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGl0bGU7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE5hdmlnYXRpb25JbnN0cnVjdGlvbjtcclxufSgpKTtcclxudmFyIHBydW5lID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICBpbnN0cnVjdGlvbi5wcmV2aW91c0luc3RydWN0aW9uID0gbnVsbDtcclxuICAgIGluc3RydWN0aW9uLnBsYW4gPSBudWxsO1xyXG59O1xuXG4vKipcclxuKiBDbGFzcyBmb3Igc3RvcmluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBhIHJvdXRlJ3MgbmF2aWdhdGlvbiBzZXR0aW5ncy5cclxuKi9cclxudmFyIE5hdk1vZGVsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTmF2TW9kZWwocm91dGVyLCByZWxhdGl2ZUhyZWYpIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAqIFRydWUgaWYgdGhpcyBuYXYgaXRlbSBpcyBjdXJyZW50bHkgYWN0aXZlLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogVGhlIHRpdGxlLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgdGhpcy50aXRsZSA9IG51bGw7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBUaGlzIG5hdiBpdGVtJ3MgYWJzb2x1dGUgaHJlZi5cclxuICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuaHJlZiA9IG51bGw7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBUaGlzIG5hdiBpdGVtJ3MgcmVsYXRpdmUgaHJlZi5cclxuICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMucmVsYXRpdmVIcmVmID0gbnVsbDtcclxuICAgICAgICAvKipcclxuICAgICAgICAqIERhdGEgYXR0YWNoZWQgdG8gdGhlIHJvdXRlIGF0IGNvbmZpZ3VyYXRpb24gdGltZS5cclxuICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB7fTtcclxuICAgICAgICAvKipcclxuICAgICAgICAqIFRoZSByb3V0ZSBjb25maWcuXHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XHJcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUhyZWYgPSByZWxhdGl2ZUhyZWY7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICogU2V0cyB0aGUgcm91dGUncyB0aXRsZSBhbmQgdXBkYXRlcyBkb2N1bWVudC50aXRsZS5cclxuICAgICogIElmIHRoZSBhIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBjaGFuZ2Ugd2lsbCBiZSBhcHBsaWVkXHJcbiAgICAqICB0byBkb2N1bWVudC50aXRsZSB3aGVuIHRoZSBuYXZpZ2F0aW9uIGNvbXBsZXRlcy5cclxuICAgICpcclxuICAgICogQHBhcmFtIHRpdGxlIFRoZSBuZXcgdGl0bGUuXHJcbiAgICAqL1xyXG4gICAgTmF2TW9kZWwucHJvdG90eXBlLnNldFRpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLnVwZGF0ZVRpdGxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBOYXZNb2RlbDtcclxufSgpKTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUFic29sdXRlUGF0aChwYXRoLCBoYXNQdXNoU3RhdGUsIGFic29sdXRlKSB7XHJcbiAgICBpZiAoYWJzb2x1dGUgPT09IHZvaWQgMCkgeyBhYnNvbHV0ZSA9IGZhbHNlOyB9XHJcbiAgICBpZiAoIWhhc1B1c2hTdGF0ZSAmJiBwYXRoWzBdICE9PSAnIycpIHtcclxuICAgICAgICBwYXRoID0gJyMnICsgcGF0aDtcclxuICAgIH1cclxuICAgIGlmIChoYXNQdXNoU3RhdGUgJiYgYWJzb2x1dGUpIHtcclxuICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSwgcGF0aC5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbn1cclxuZnVuY3Rpb24gX2NyZWF0ZVJvb3RlZFBhdGgoZnJhZ21lbnQsIGJhc2VVcmwsIGhhc1B1c2hTdGF0ZSwgYWJzb2x1dGUpIHtcclxuICAgIGlmIChpc0Fic29sdXRlVXJsLnRlc3QoZnJhZ21lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyYWdtZW50O1xyXG4gICAgfVxyXG4gICAgdmFyIHBhdGggPSAnJztcclxuICAgIGlmIChiYXNlVXJsLmxlbmd0aCAmJiBiYXNlVXJsWzBdICE9PSAnLycpIHtcclxuICAgICAgICBwYXRoICs9ICcvJztcclxuICAgIH1cclxuICAgIHBhdGggKz0gYmFzZVVybDtcclxuICAgIGlmICgoIXBhdGgubGVuZ3RoIHx8IHBhdGhbcGF0aC5sZW5ndGggLSAxXSAhPT0gJy8nKSAmJiBmcmFnbWVudFswXSAhPT0gJy8nKSB7XHJcbiAgICAgICAgcGF0aCArPSAnLyc7XHJcbiAgICB9XHJcbiAgICBpZiAocGF0aC5sZW5ndGggJiYgcGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSAnLycgJiYgZnJhZ21lbnRbMF0gPT09ICcvJykge1xyXG4gICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9ub3JtYWxpemVBYnNvbHV0ZVBhdGgocGF0aCArIGZyYWdtZW50LCBoYXNQdXNoU3RhdGUsIGFic29sdXRlKTtcclxufVxyXG5mdW5jdGlvbiBfcmVzb2x2ZVVybChmcmFnbWVudCwgYmFzZVVybCwgaGFzUHVzaFN0YXRlKSB7XHJcbiAgICBpZiAoaXNSb290ZWRQYXRoLnRlc3QoZnJhZ21lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIF9ub3JtYWxpemVBYnNvbHV0ZVBhdGgoZnJhZ21lbnQsIGhhc1B1c2hTdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX2NyZWF0ZVJvb3RlZFBhdGgoZnJhZ21lbnQsIGJhc2VVcmwsIGhhc1B1c2hTdGF0ZSk7XHJcbn1cclxuZnVuY3Rpb24gX2Vuc3VyZUFycmF5V2l0aFNpbmdsZVJvdXRlUGVyQ29uZmlnKGNvbmZpZykge1xyXG4gICAgdmFyIHJvdXRlQ29uZmlncyA9IFtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnLnJvdXRlKSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNvbmZpZy5yb3V0ZS5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKTtcclxuICAgICAgICAgICAgY3VycmVudC5yb3V0ZSA9IGNvbmZpZy5yb3V0ZVtpXTtcclxuICAgICAgICAgICAgcm91dGVDb25maWdzLnB1c2goY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcm91dGVDb25maWdzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm91dGVDb25maWdzO1xyXG59XHJcbnZhciBpc1Jvb3RlZFBhdGggPSAvXiM/XFwvLztcclxudmFyIGlzQWJzb2x1dGVVcmwgPSAvXihbYS16XVthLXowLTkrXFwtLl0qOik/XFwvXFwvL2k7XG5cbi8qKlxyXG4gKiBDbGFzcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIFtbUm91dGVyXV0gaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxudmFyIFJvdXRlckNvbmZpZ3VyYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSb3V0ZXJDb25maWd1cmF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5waXBlbGluZVN0ZXBzID0gW107XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBzdGVwIHRvIGJlIHJ1biBkdXJpbmcgdGhlIFtbUm91dGVyXV0ncyBuYXZpZ2F0aW9uIHBpcGVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwaXBlbGluZSBzbG90IHRvIGluc2VydCB0aGUgc3RlcCBpbnRvLlxyXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHBpcGVsaW5lIHN0ZXAuXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIFJvdXRlckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmFkZFBpcGVsaW5lU3RlcCA9IGZ1bmN0aW9uIChuYW1lLCBzdGVwKSB7XHJcbiAgICAgICAgaWYgKHN0ZXAgPT09IG51bGwgfHwgc3RlcCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgc3RlcCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGlwZWxpbmVTdGVwcy5wdXNoKHsgbmFtZTogbmFtZSwgc3RlcDogc3RlcCB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBzdGVwIHRvIGJlIHJ1biBkdXJpbmcgdGhlIFtbUm91dGVyXV0ncyBhdXRob3JpemUgcGlwZWxpbmUgc2xvdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3RlcCBUaGUgcGlwZWxpbmUgc3RlcC5cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuYWRkQXV0aG9yaXplU3RlcCA9IGZ1bmN0aW9uIChzdGVwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUGlwZWxpbmVTdGVwKFwiYXV0aG9yaXplXCIgLyogQXV0aG9yaXplICovLCBzdGVwKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBzdGVwIHRvIGJlIHJ1biBkdXJpbmcgdGhlIFtbUm91dGVyXV0ncyBwcmVBY3RpdmF0ZSBwaXBlbGluZSBzbG90LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGVwIFRoZSBwaXBlbGluZSBzdGVwLlxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBSb3V0ZXJDb25maWd1cmF0aW9uLnByb3RvdHlwZS5hZGRQcmVBY3RpdmF0ZVN0ZXAgPSBmdW5jdGlvbiAoc3RlcCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFBpcGVsaW5lU3RlcChcInByZUFjdGl2YXRlXCIgLyogUHJlQWN0aXZhdGUgKi8sIHN0ZXApO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIHN0ZXAgdG8gYmUgcnVuIGR1cmluZyB0aGUgW1tSb3V0ZXJdXSdzIHByZVJlbmRlciBwaXBlbGluZSBzbG90LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGVwIFRoZSBwaXBlbGluZSBzdGVwLlxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBSb3V0ZXJDb25maWd1cmF0aW9uLnByb3RvdHlwZS5hZGRQcmVSZW5kZXJTdGVwID0gZnVuY3Rpb24gKHN0ZXApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRQaXBlbGluZVN0ZXAoXCJwcmVSZW5kZXJcIiAvKiBQcmVSZW5kZXIgKi8sIHN0ZXApO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIHN0ZXAgdG8gYmUgcnVuIGR1cmluZyB0aGUgW1tSb3V0ZXJdXSdzIHBvc3RSZW5kZXIgcGlwZWxpbmUgc2xvdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3RlcCBUaGUgcGlwZWxpbmUgc3RlcC5cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuYWRkUG9zdFJlbmRlclN0ZXAgPSBmdW5jdGlvbiAoc3RlcCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFBpcGVsaW5lU3RlcChcInBvc3RSZW5kZXJcIiAvKiBQb3N0UmVuZGVyICovLCBzdGVwKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENvbmZpZ3VyZXMgYSByb3V0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBwcmV2aW91cyBsb2NhdGlvbiBhdmFpbGFibGUgb24gbmF2aWdhdGlvbiBjYW5jZWxsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZyYWdtZW50IFRoZSBVUkwgZnJhZ21lbnQgdG8gdXNlIGFzIHRoZSBuYXZpZ2F0aW9uIGRlc3RpbmF0aW9uLlxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBSb3V0ZXJDb25maWd1cmF0aW9uLnByb3RvdHlwZS5mYWxsYmFja1JvdXRlID0gZnVuY3Rpb24gKGZyYWdtZW50KSB7XHJcbiAgICAgICAgdGhpcy5fZmFsbGJhY2tSb3V0ZSA9IGZyYWdtZW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTWFwcyBvbmUgb3IgbW9yZSByb3V0ZXMgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSByb3V0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlIFRoZSBbW1JvdXRlQ29uZmlnXV0gdG8gbWFwLCBvciBhbiBhcnJheSBvZiBbW1JvdXRlQ29uZmlnXV0gdG8gbWFwLlxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBSb3V0ZXJDb25maWd1cmF0aW9uLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAocm91dGUpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvdXRlKSkge1xyXG4gICAgICAgICAgICByb3V0ZS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IHJldHVybiBfdGhpcy5tYXAocik7IH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwUm91dGUocm91dGUpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ29uZmlndXJlcyBkZWZhdWx0cyB0byB1c2UgZm9yIGFueSB2aWV3IHBvcnRzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2aWV3UG9ydENvbmZpZyBhIHZpZXcgcG9ydCBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2UgYXMgYVxyXG4gICAgICogIGRlZmF1bHQsIG9mIHRoZSBmb3JtIHsgdmlld1BvcnROYW1lOiB7IG1vZHVsZUlkIH0gfS5cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgUm91dGVyQ29uZmlndXJhdGlvbi5wcm90b3R5cGUudXNlVmlld1BvcnREZWZhdWx0cyA9IGZ1bmN0aW9uICh2aWV3UG9ydENvbmZpZykge1xyXG4gICAgICAgIHRoaXMudmlld1BvcnREZWZhdWx0cyA9IHZpZXdQb3J0Q29uZmlnO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTWFwcyBhIHNpbmdsZSByb3V0ZSB0byBiZSByZWdpc3RlcmVkIHdpdGggdGhlIHJvdXRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcm91dGUgVGhlIFtbUm91dGVDb25maWddXSB0byBtYXAuXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIFJvdXRlckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLm1hcFJvdXRlID0gZnVuY3Rpb24gKGNvbmZpZykge1xyXG4gICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnB1c2goZnVuY3Rpb24gKHJvdXRlcikge1xyXG4gICAgICAgICAgICB2YXIgcm91dGVDb25maWdzID0gX2Vuc3VyZUFycmF5V2l0aFNpbmdsZVJvdXRlUGVyQ29uZmlnKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIHZhciBuYXZNb2RlbDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcm91dGVDb25maWdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIHZhciByb3V0ZUNvbmZpZyA9IHJvdXRlQ29uZmlnc1tpXTtcclxuICAgICAgICAgICAgICAgIHJvdXRlQ29uZmlnLnNldHRpbmdzID0gcm91dGVDb25maWcuc2V0dGluZ3MgfHwge307XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5hdk1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmF2TW9kZWwgPSByb3V0ZXIuY3JlYXRlTmF2TW9kZWwocm91dGVDb25maWcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcm91dGVyLmFkZFJvdXRlKHJvdXRlQ29uZmlnLCBuYXZNb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhbiB1bmtub3duIHJvdXRlIGhhbmRsZXIgdG8gYmUgcnVuIHdoZW4gdGhlIFVSTCBmcmFnbWVudCBkb2Vzbid0IG1hdGNoIGFueSByZWdpc3RlcmVkIHJvdXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBtb2R1bGVJZCB0byBsb2FkLCBvciBhIFtbUm91dGVDb25maWddXSwgb3IgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZVxyXG4gICAgICogIFtbTmF2aWdhdGlvbkluc3RydWN0aW9uXV0gYW5kIHNlbGVjdHMgYSBtb2R1bGVJZCB0byBsb2FkLlxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBSb3V0ZXJDb25maWd1cmF0aW9uLnByb3RvdHlwZS5tYXBVbmtub3duUm91dGVzID0gZnVuY3Rpb24gKGNvbmZpZykge1xyXG4gICAgICAgIHRoaXMudW5rbm93blJvdXRlQ29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbGllcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHRvIHRoZSBzcGVjaWZpZWQgW1tSb3V0ZXJdXS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcm91dGVyIFRoZSBbW1JvdXRlcl1dIHRvIGFwcGx5IHRoZSBjb25maWd1cmF0aW9uIHRvLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXJDb25maWd1cmF0aW9uLnByb3RvdHlwZS5leHBvcnRUb1JvdXRlciA9IGZ1bmN0aW9uIChyb3V0ZXIpIHtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gdGhpcy5pbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gaW5zdHJ1Y3Rpb25zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldKHJvdXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHRpdGxlID0gX2EudGl0bGUsIHRpdGxlU2VwYXJhdG9yID0gX2EudGl0bGVTZXBhcmF0b3IsIHVua25vd25Sb3V0ZUNvbmZpZyA9IF9hLnVua25vd25Sb3V0ZUNvbmZpZywgX2ZhbGxiYWNrUm91dGUgPSBfYS5fZmFsbGJhY2tSb3V0ZSwgdmlld1BvcnREZWZhdWx0cyA9IF9hLnZpZXdQb3J0RGVmYXVsdHM7XHJcbiAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICAgIHJvdXRlci50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGl0bGVTZXBhcmF0b3IpIHtcclxuICAgICAgICAgICAgcm91dGVyLnRpdGxlU2VwYXJhdG9yID0gdGl0bGVTZXBhcmF0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmtub3duUm91dGVDb25maWcpIHtcclxuICAgICAgICAgICAgcm91dGVyLmhhbmRsZVVua25vd25Sb3V0ZXModW5rbm93blJvdXRlQ29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF9mYWxsYmFja1JvdXRlKSB7XHJcbiAgICAgICAgICAgIHJvdXRlci5mYWxsYmFja1JvdXRlID0gX2ZhbGxiYWNrUm91dGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2aWV3UG9ydERlZmF1bHRzKSB7XHJcbiAgICAgICAgICAgIHJvdXRlci51c2VWaWV3UG9ydERlZmF1bHRzKHZpZXdQb3J0RGVmYXVsdHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuYXNzaWduKHJvdXRlci5vcHRpb25zLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgICAgIHZhciBwaXBlbGluZVN0ZXBzID0gdGhpcy5waXBlbGluZVN0ZXBzO1xyXG4gICAgICAgIHZhciBwaXBlbGluZVN0ZXBDb3VudCA9IHBpcGVsaW5lU3RlcHMubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwaXBlbGluZVN0ZXBDb3VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXJvdXRlci5pc1Jvb3QpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgc3RlcHMgY2FuIG9ubHkgYmUgYWRkZWQgdG8gdGhlIHJvb3Qgcm91dGVyJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBpcGVsaW5lUHJvdmlkZXIgPSByb3V0ZXIucGlwZWxpbmVQcm92aWRlcjtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcGlwZWxpbmVTdGVwQ291bnQ7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2IgPSBwaXBlbGluZVN0ZXBzW2ldLCBuYW1lXzEgPSBfYi5uYW1lLCBzdGVwID0gX2Iuc3RlcDtcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lUHJvdmlkZXIuYWRkU3RlcChuYW1lXzEsIHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBSb3V0ZXJDb25maWd1cmF0aW9uO1xyXG59KCkpO1xuXG4vKipcclxuICogVGhlIHByaW1hcnkgY2xhc3MgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHJvdXRpbmcgYW5kIG5hdmlnYXRpb24uXHJcbiAqL1xyXG52YXIgUm91dGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyIFRoZSBbW0NvbnRhaW5lcl1dIHRvIHVzZSB3aGVuIGNoaWxkIHJvdXRlcnMuXHJcbiAgICAgKiBAcGFyYW0gaGlzdG9yeSBUaGUgW1tIaXN0b3J5XV0gaW1wbGVtZW50YXRpb24gdG8gZGVsZWdhdGUgbmF2aWdhdGlvbiByZXF1ZXN0cyB0by5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUm91dGVyKGNvbnRhaW5lciwgaGlzdG9yeSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHBhcmVudCByb3V0ZXIsIG9yIG51bGwgaWYgdGhpcyBpbnN0YW5jZSBpcyBub3QgYSBjaGlsZCByb3V0ZXIuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBkZWZhdWx0cyB1c2VkIHdoZW4gYSB2aWV3cG9ydCBsYWNrcyBzcGVjaWZpZWQgY29udGVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMudmlld1BvcnREZWZhdWx0cyA9IHt9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEV4dGVuc2lvbiBwb2ludCB0byB0cmFuc2Zvcm0gdGhlIGRvY3VtZW50IHRpdGxlIGJlZm9yZSBpdCBpcyBidWlsdCBhbmQgZGlzcGxheWVkLlxyXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIGNoaWxkIHJvdXRlcnMgZGVsZWdhdGUgdG8gdGhlIHBhcmVudCByb3V0ZXIsIGFuZCB0aGUgYXBwIHJvdXRlclxyXG4gICAgICAgICAqIHJldHVybnMgdGhlIHRpdGxlIHVuY2hhbmdlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnRyYW5zZm9ybVRpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5wYXJlbnQudHJhbnNmb3JtVGl0bGUodGl0bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aXRsZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IGhpc3Rvcnk7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBGdWxseSByZXNldHMgdGhlIHJvdXRlcidzIGludGVybmFsIHN0YXRlLiBQcmltYXJpbHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBmcmFtZXdvcmsgd2hlbiBtdWx0aXBsZSBjYWxscyB0byBzZXRSb290IGFyZSBtYWRlLlxyXG4gICAgICogVXNlIHdpdGggY2F1dGlvbiAoYWN0dWFsbHksIGF2b2lkIHVzaW5nIHRoaXMpLiBEbyBub3QgdXNlIHRoaXMgdG8gc2ltcGx5IGNoYW5nZSB5b3VyIG5hdmlnYXRpb24gbW9kZWwuXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLnZpZXdQb3J0cyA9IHt9O1xyXG4gICAgICAgIHRoaXMucm91dGVzID0gW107XHJcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gJyc7XHJcbiAgICAgICAgdGhpcy5pc0NvbmZpZ3VyZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNFeHBsaWNpdE5hdmlnYXRpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRXhwbGljaXROYXZpZ2F0aW9uQmFjayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNOYXZpZ2F0aW5nRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTmF2aWdhdGluZ05ldyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNOYXZpZ2F0aW5nUmVmcmVzaCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNOYXZpZ2F0aW5nRm9yd2FyZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNOYXZpZ2F0aW5nQmFjayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY291bGREZWFjdGl2YXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gW107XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlld1BvcnREZWZhdWx0cyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2ZhbGxiYWNrT3JkZXIgPSAxMDA7XHJcbiAgICAgICAgdGhpcy5fcmVjb2duaXplciA9IG5ldyBSb3V0ZVJlY29nbml6ZXIoKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFJlY29nbml6ZXIgPSBuZXcgUm91dGVSZWNvZ25pemVyKCk7XHJcbiAgICAgICAgdGhpcy5fY29uZmlndXJlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5fcmVzb2x2ZUNvbmZpZ3VyZWRQcm9taXNlID0gcmVzb2x2ZTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUm91dGVyLnByb3RvdHlwZSwgXCJpc1Jvb3RcIiwge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoaXMgW1tSb3V0ZXJdXSBpcyB0aGUgcm9vdCBpbiB0aGUgcm91dGVyIHRyZWUuIEkuZS4sIGl0IGhhcyBubyBwYXJlbnQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhIHZpZXdQb3J0IHRvIGJlIHVzZWQgYXMgYSByZW5kZXJpbmcgdGFyZ2V0IGZvciBhY3RpdmF0ZWQgcm91dGVzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2aWV3UG9ydCBUaGUgdmlld1BvcnQuXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmlld1BvcnQuICdkZWZhdWx0JyBpZiB1bnNwZWNpZmllZC5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5yZWdpc3RlclZpZXdQb3J0ID0gZnVuY3Rpb24gKHZpZXdQb3J0LCBuYW1lKSB7XHJcbiAgICAgICAgbmFtZSA9IG5hbWUgfHwgJ2RlZmF1bHQnO1xyXG4gICAgICAgIHRoaXMudmlld1BvcnRzW25hbWVdID0gdmlld1BvcnQ7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJvdXRlciBpcyBjb25maWd1cmVkLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLmVuc3VyZUNvbmZpZ3VyZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyZWRQcm9taXNlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ29uZmlndXJlcyB0aGUgcm91dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjYWxsYmFja09yQ29uZmlnIFRoZSBbW1JvdXRlckNvbmZpZ3VyYXRpb25dXSBvciBhIGNhbGxiYWNrIHRoYXQgdGFrZXMgYSBbW1JvdXRlckNvbmZpZ3VyYXRpb25dXS5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5jb25maWd1cmUgPSBmdW5jdGlvbiAoY2FsbGJhY2tPckNvbmZpZykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5pc0NvbmZpZ3VyZWQgPSB0cnVlO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFja09yQ29uZmlnO1xyXG4gICAgICAgIHZhciBjb25maWc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja09yQ29uZmlnID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZyA9IG5ldyBSb3V0ZXJDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrT3JDb25maWcoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2VcclxuICAgICAgICAgICAgLnJlc29sdmUocmVzdWx0KVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICBpZiAoYyAmJiBjLmV4cG9ydFRvUm91dGVyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25maWcgPSBjO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbmZpZy5leHBvcnRUb1JvdXRlcihfdGhpcyk7XHJcbiAgICAgICAgICAgIF90aGlzLmlzQ29uZmlndXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIF90aGlzLl9yZXNvbHZlQ29uZmlndXJlZFByb21pc2UoKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byBhIG5ldyBsb2NhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZnJhZ21lbnQgVGhlIFVSTCBmcmFnbWVudCB0byB1c2UgYXMgdGhlIG5hdmlnYXRpb24gZGVzdGluYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgbmF2aWdhdGlvbiBvcHRpb25zLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLm5hdmlnYXRlID0gZnVuY3Rpb24gKGZyYWdtZW50LCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29uZmlndXJlZCAmJiB0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQubmF2aWdhdGUoZnJhZ21lbnQsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzRXhwbGljaXROYXZpZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5Lm5hdmlnYXRlKF9yZXNvbHZlVXJsKGZyYWdtZW50LCB0aGlzLmJhc2VVcmwsIHRoaXMuaGlzdG9yeS5faGFzUHVzaFN0YXRlKSwgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBuZXcgbG9jYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcm91dGUgYW5kIHBhcmFtcyBzcGVjaWZpZWQuIEVxdWl2YWxsZW50IHRvIFtbUm91dGVyLmdlbmVyYXRlXV0gZm9sbG93ZWRcclxuICAgICAqIGJ5IFtbUm91dGVyLm5hdmlnYXRlXV0uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlIFRoZSBuYW1lIG9mIHRoZSByb3V0ZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIHRoZSBuYXZpZ2F0aW9uIGxvY2F0aW9uLlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBUaGUgcm91dGUgcGFyYW1ldGVycyB0byBiZSB1c2VkIHdoZW4gcG9wdWxhdGluZyB0aGUgcm91dGUgcGF0dGVybi5cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBuYXZpZ2F0aW9uIG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUubmF2aWdhdGVUb1JvdXRlID0gZnVuY3Rpb24gKHJvdXRlLCBwYXJhbXMsIG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuZ2VuZXJhdGUocm91dGUsIHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUocGF0aCwgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgYmFjayB0byB0aGUgbW9zdCByZWNlbnQgbG9jYXRpb24gaW4gaGlzdG9yeS5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5uYXZpZ2F0ZUJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGxpY2l0TmF2aWdhdGlvbkJhY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5uYXZpZ2F0ZUJhY2soKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBjaGlsZCByb3V0ZXIgb2YgdGhlIGN1cnJlbnQgcm91dGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250YWluZXIgVGhlIFtbQ29udGFpbmVyXV0gdG8gcHJvdmlkZSB0byB0aGUgY2hpbGQgcm91dGVyLiBVc2VzIHRoZSBjdXJyZW50IFtbUm91dGVyXV0ncyBbW0NvbnRhaW5lcl1dIGlmIHVuc3BlY2lmaWVkLlxyXG4gICAgICogQHJldHVybnMge1JvdXRlcn0gVGhlIG5ldyBjaGlsZCBSb3V0ZXIuXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuY3JlYXRlQ2hpbGQgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkUm91dGVyID0gbmV3IFJvdXRlcihjb250YWluZXIgfHwgdGhpcy5jb250YWluZXIuY3JlYXRlQ2hpbGQoKSwgdGhpcy5oaXN0b3J5KTtcclxuICAgICAgICBjaGlsZFJvdXRlci5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBjaGlsZFJvdXRlcjtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIFVSTCBmcmFnbWVudCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIHJvdXRlIHBhdHRlcm4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHJvdXRlIHdob3NlIHBhdHRlcm4gc2hvdWxkIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGZyYWdtZW50LlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBUaGUgcm91dGUgcGFyYW1zIHRvIGJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHJvdXRlIHBhdHRlcm4uXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBJZiBvcHRpb25zLmFic29sdXRlID0gdHJ1ZSwgdGhlbiBhYnNvbHV0ZSB1cmwgd2lsbCBiZSBnZW5lcmF0ZWQ7IG90aGVyd2lzZSwgaXQgd2lsbCBiZSByZWxhdGl2ZSB1cmwuXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgVVJMIGZyYWdtZW50LlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gKG5hbWVPclJvdXRlLCBwYXJhbXMsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAocGFyYW1zID09PSB2b2lkIDApIHsgcGFyYW1zID0ge307IH1cclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgICAgIC8vIEEgY2hpbGQgcmVjb2duaXplciBnZW5lcmF0ZXMgcm91dGVzIGZvciBwb3RlbnRpYWwgY2hpbGQgcm91dGVzLiBBbnkgcG90ZW50aWFsIGNoaWxkIHJvdXRlIGlzIGFkZGVkXHJcbiAgICAgICAgLy8gdG8gdGhlIGNoaWxkUm91dGUgcHJvcGVydHkgb2YgcGFyYW1zIGZvciB0aGUgY2hpbGRSb3V0ZXIgdG8gcmVjb2duaXplLiBXaGVuIGdlbmVyYXRpbmcgcm91dGVzLCB3ZVxyXG4gICAgICAgIC8vIHVzZSB0aGUgY2hpbGRSZWNvZ25pemVyIHdoZW4gY2hpbGRSb3V0ZSBwYXJhbXMgYXJlIGF2YWlsYWJsZSB0byBnZW5lcmF0ZSBhIGNoaWxkIHJvdXRlciBlbmFibGVkIHJvdXRlLlxyXG4gICAgICAgIHZhciByZWNvZ25pemVyID0gJ2NoaWxkUm91dGUnIGluIHBhcmFtcyA/IHRoaXMuX2NoaWxkUmVjb2duaXplciA6IHRoaXMuX3JlY29nbml6ZXI7XHJcbiAgICAgICAgdmFyIGhhc1JvdXRlID0gcmVjb2duaXplci5oYXNSb3V0ZShuYW1lT3JSb3V0ZSk7XHJcbiAgICAgICAgaWYgKCFoYXNSb3V0ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZW5lcmF0ZShuYW1lT3JSb3V0ZSwgcGFyYW1zLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHJvdXRlIHdpdGggbmFtZSAnXCIgKyBuYW1lT3JSb3V0ZSArIFwiJyBjb3VsZCBub3QgYmUgZm91bmQuIENoZWNrIHRoYXQgYG5hbWU6ICdcIiArIG5hbWVPclJvdXRlICsgXCInYCB3YXMgc3BlY2lmaWVkIGluIHRoZSByb3V0ZSdzIGNvbmZpZy5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwYXRoID0gcmVjb2duaXplci5nZW5lcmF0ZShuYW1lT3JSb3V0ZSwgcGFyYW1zKTtcclxuICAgICAgICB2YXIgcm9vdGVkUGF0aCA9IF9jcmVhdGVSb290ZWRQYXRoKHBhdGgsIHRoaXMuYmFzZVVybCwgdGhpcy5oaXN0b3J5Ll9oYXNQdXNoU3RhdGUsIG9wdGlvbnMuYWJzb2x1dGUpO1xyXG4gICAgICAgIHJldHVybiBvcHRpb25zLmFic29sdXRlID8gXCJcIiArIHRoaXMuaGlzdG9yeS5nZXRBYnNvbHV0ZVJvb3QoKSArIHJvb3RlZFBhdGggOiByb290ZWRQYXRoO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFtbTmF2TW9kZWxdXSBmb3IgdGhlIHNwZWNpZmllZCByb3V0ZSBjb25maWcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgcm91dGUgY29uZmlnLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLmNyZWF0ZU5hdk1vZGVsID0gZnVuY3Rpb24gKGNvbmZpZykge1xyXG4gICAgICAgIHZhciBuYXZNb2RlbCA9IG5ldyBOYXZNb2RlbCh0aGlzLCAnaHJlZicgaW4gY29uZmlnXHJcbiAgICAgICAgICAgID8gY29uZmlnLmhyZWZcclxuICAgICAgICAgICAgLy8gcG90ZW50aWFsIGVycm9yIHdoZW4gY29uZmlnLnJvdXRlIGlzIGEgc3RyaW5nW10gP1xyXG4gICAgICAgICAgICA6IGNvbmZpZy5yb3V0ZSk7XHJcbiAgICAgICAgbmF2TW9kZWwudGl0bGUgPSBjb25maWcudGl0bGU7XHJcbiAgICAgICAgbmF2TW9kZWwub3JkZXIgPSBjb25maWcubmF2O1xyXG4gICAgICAgIG5hdk1vZGVsLmhyZWYgPSBjb25maWcuaHJlZjtcclxuICAgICAgICBuYXZNb2RlbC5zZXR0aW5ncyA9IGNvbmZpZy5zZXR0aW5ncztcclxuICAgICAgICBuYXZNb2RlbC5jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgcmV0dXJuIG5hdk1vZGVsO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJzIGEgbmV3IHJvdXRlIHdpdGggdGhlIHJvdXRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSBbW1JvdXRlQ29uZmlnXV0uXHJcbiAgICAgKiBAcGFyYW0gbmF2TW9kZWwgVGhlIFtbTmF2TW9kZWxdXSB0byB1c2UgZm9yIHRoZSByb3V0ZS4gTWF5IGJlIG9taXR0ZWQgZm9yIHNpbmdsZS1wYXR0ZXJuIHJvdXRlcy5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5hZGRSb3V0ZSA9IGZ1bmN0aW9uIChjb25maWcsIG5hdk1vZGVsKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnLnJvdXRlKSkge1xyXG4gICAgICAgICAgICB2YXIgcm91dGVDb25maWdzID0gX2Vuc3VyZUFycmF5V2l0aFNpbmdsZVJvdXRlUGVyQ29uZmlnKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgd3JvbmcuIHRvZG86IGZpeCB0aGlzIGFmdGVyIFRTIHJlZmFjdG9yaW5nIHJlbGVhc2VcclxuICAgICAgICAgICAgcm91dGVDb25maWdzLmZvckVhY2godGhpcy5hZGRSb3V0ZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWxpZGF0ZVJvdXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgICAgICAgaWYgKCEoJ3ZpZXdQb3J0cycgaW4gY29uZmlnKSAmJiAhY29uZmlnLm5hdmlnYXRpb25TdHJhdGVneSkge1xyXG4gICAgICAgICAgICBjb25maWcudmlld1BvcnRzID0ge1xyXG4gICAgICAgICAgICAgICAgJ2RlZmF1bHQnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlSWQ6IGNvbmZpZy5tb2R1bGVJZCxcclxuICAgICAgICAgICAgICAgICAgICB2aWV3OiBjb25maWcudmlld1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW5hdk1vZGVsKSB7XHJcbiAgICAgICAgICAgIG5hdk1vZGVsID0gdGhpcy5jcmVhdGVOYXZNb2RlbChjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvdXRlcy5wdXNoKGNvbmZpZyk7XHJcbiAgICAgICAgdmFyIHBhdGggPSBjb25maWcucm91dGU7XHJcbiAgICAgICAgaWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHtcclxuICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FzZVNlbnNpdGl2ZSA9IGNvbmZpZy5jYXNlU2Vuc2l0aXZlID09PSB0cnVlO1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlY29nbml6ZXIuYWRkKHtcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgaGFuZGxlcjogY29uZmlnLFxyXG4gICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHBhdGgpIHtcclxuICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gY29uZmlnLnNldHRpbmdzO1xyXG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLnNldHRpbmdzO1xyXG4gICAgICAgICAgICB2YXIgd2l0aENoaWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb25maWcpKTtcclxuICAgICAgICAgICAgY29uZmlnLnNldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgICAgIHdpdGhDaGlsZC5yb3V0ZSA9IHBhdGggKyBcIi8qY2hpbGRSb3V0ZVwiO1xyXG4gICAgICAgICAgICB3aXRoQ2hpbGQuaGFzQ2hpbGRSb3V0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGlsZFJlY29nbml6ZXIuYWRkKHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IHdpdGhDaGlsZC5yb3V0ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IHdpdGhDaGlsZCxcclxuICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IGNhc2VTZW5zaXRpdmVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpdGhDaGlsZC5uYXZNb2RlbCA9IG5hdk1vZGVsO1xyXG4gICAgICAgICAgICB3aXRoQ2hpbGQuc2V0dGluZ3MgPSBjb25maWcuc2V0dGluZ3M7XHJcbiAgICAgICAgICAgIHdpdGhDaGlsZC5uYXZpZ2F0aW9uU3RyYXRlZ3kgPSBjb25maWcubmF2aWdhdGlvblN0cmF0ZWd5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25maWcubmF2TW9kZWwgPSBuYXZNb2RlbDtcclxuICAgICAgICB2YXIgbmF2aWdhdGlvbiA9IHRoaXMubmF2aWdhdGlvbjtcclxuICAgICAgICBpZiAoKG5hdk1vZGVsLm9yZGVyIHx8IG5hdk1vZGVsLm9yZGVyID09PSAwKSAmJiBuYXZpZ2F0aW9uLmluZGV4T2YobmF2TW9kZWwpID09PSAtMSkge1xyXG4gICAgICAgICAgICBpZiAoKCFuYXZNb2RlbC5ocmVmICYmIG5hdk1vZGVsLmhyZWYgIT09ICcnKSAmJiAoc3RhdGUudHlwZXMuZHluYW1pY3MgfHwgc3RhdGUudHlwZXMuc3RhcnMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcm91dGUgY29uZmlnIGZvciBcIicgKyBjb25maWcucm91dGUgKyAnXCIgOiBkeW5hbWljIHJvdXRlcyBtdXN0IHNwZWNpZnkgYW4gXCJocmVmOlwiIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBuYXZpZ2F0aW9uIG1vZGVsLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmF2TW9kZWwub3JkZXIgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICBuYXZNb2RlbC5vcmRlciA9ICsrdGhpcy5fZmFsbGJhY2tPcmRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYXZpZ2F0aW9uLnB1c2gobmF2TW9kZWwpO1xyXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGEgcG90ZW50aWFsIGVycm9yIC8gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIGJyb3dzZXJzXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIE1ETjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc29ydFxyXG4gICAgICAgICAgICAvLyBJZiBjb21wYXJlRnVuY3Rpb24oYSwgYikgcmV0dXJucyAwLCBsZWF2ZSBhIGFuZCBiIHVuY2hhbmdlZCB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlcixcclxuICAgICAgICAgICAgLy8gYnV0IHNvcnRlZCB3aXRoIHJlc3BlY3QgdG8gYWxsIGRpZmZlcmVudCBlbGVtZW50cy5cclxuICAgICAgICAgICAgLy8gTm90ZTogdGhlIEVDTUFzY3JpcHQgc3RhbmRhcmQgZG9lcyBub3QgZ3VhcmFudGVlIHRoaXMgYmVoYXZpb3VyLFxyXG4gICAgICAgICAgICAvLyBhbmQgdGh1cyBub3QgYWxsIGJyb3dzZXJzIChlLmcuIE1vemlsbGEgdmVyc2lvbnMgZGF0aW5nIGJhY2sgdG8gYXQgbGVhc3QgMjAwMykgcmVzcGVjdCB0aGlzLlxyXG4gICAgICAgICAgICBuYXZpZ2F0aW9uLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGlzIFtbUm91dGVyXV0gb3Igb25lIG9mIGl0cyBhbmNlc3RvcnMgaGFzIGEgcm91dGUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcm91dGUgdG8gY2hlY2suXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuaGFzUm91dGUgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhISh0aGlzLl9yZWNvZ25pemVyLmhhc1JvdXRlKG5hbWUpIHx8IHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50Lmhhc1JvdXRlKG5hbWUpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoaXMgW1tSb3V0ZXJdXSBoYXMgYSByb3V0ZSByZWdpc3RlcmVkIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSByb3V0ZSB0byBjaGVjay5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5oYXNPd25Sb3V0ZSA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29nbml6ZXIuaGFzUm91dGUobmFtZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlciBhIGhhbmRsZXIgdG8gdXNlIHdoZW4gdGhlIGluY29taW5nIFVSTCBmcmFnbWVudCBkb2Vzbid0IG1hdGNoIGFueSByZWdpc3RlcmVkIHJvdXRlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSBtb2R1bGVJZCwgb3IgYSBmdW5jdGlvbiB0aGF0IHNlbGVjdHMgdGhlIG1vZHVsZUlkLCBvciBhIFtbUm91dGVDb25maWddXS5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5oYW5kbGVVbmtub3duUm91dGVzID0gZnVuY3Rpb24gKGNvbmZpZykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVua25vd24gcm91dGUgaGFuZGxlcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhdGNoQWxsSGFuZGxlciA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gX3RoaXNcclxuICAgICAgICAgICAgICAgIC5fY3JlYXRlUm91dGVDb25maWcoY29uZmlnLCBpbnN0cnVjdGlvbilcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5jb25maWcgPSBjO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgZG9jdW1lbnQgdGl0bGUgdXNpbmcgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBpbnN0cnVjdGlvbi5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS51cGRhdGVUaXRsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcGFyZW50Um91dGVyID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgaWYgKHBhcmVudFJvdXRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50Um91dGVyLnVwZGF0ZVRpdGxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdXJyZW50SW5zdHJ1Y3Rpb24gPSB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbjtcclxuICAgICAgICBpZiAoY3VycmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRJbnN0cnVjdGlvbi5fdXBkYXRlVGl0bGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIG5hdmlnYXRpb24gcm91dGVzIHdpdGggaHJlZnMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24uXHJcbiAgICAgKiBOb3RlOiBUaGlzIG1ldGhvZCB3aWxsIGxpa2VseSBtb3ZlIHRvIGEgcGx1Z2luIGluIGEgZnV0dXJlIHJlbGVhc2UuXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUucmVmcmVzaE5hdmlnYXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG5hdiA9IHRoaXMubmF2aWdhdGlvbjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoXzEgPSBuYXYubGVuZ3RoOyBpIDwgbGVuZ3RoXzE7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IG5hdltpXTtcclxuICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZy5ocmVmKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LmhyZWYgPSBfY3JlYXRlUm9vdGVkUGF0aChjdXJyZW50LnJlbGF0aXZlSHJlZiwgdGhpcy5iYXNlVXJsLCB0aGlzLmhpc3RvcnkuX2hhc1B1c2hTdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LmhyZWYgPSBfbm9ybWFsaXplQWJzb2x1dGVQYXRoKGN1cnJlbnQuY29uZmlnLmhyZWYsIHRoaXMuaGlzdG9yeS5faGFzUHVzaFN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHZpZXcgcG9ydHMuIFRoaXMgc3BlY2lmaWVzIGhvdyB0b1xyXG4gICAgICogIHBvcHVsYXRlIGEgdmlldyBwb3J0IGZvciB3aGljaCBubyBtb2R1bGUgaXMgc3BlY2lmaWVkLiBUaGUgZGVmYXVsdCBpc1xyXG4gICAgICogIGFuIGVtcHR5IHZpZXcvdmlldy1tb2RlbCBwYWlyLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLnVzZVZpZXdQb3J0RGVmYXVsdHMgPSBmdW5jdGlvbiAoJHZpZXdQb3J0RGVmYXVsdHMpIHtcclxuICAgICAgICAvLyBhIHdvcmthcm91bmQgdG8gaGF2ZSBzdHJvbmcgdHlwaW5ncyB3aGlsZSBub3QgcmVxdWlyaW5nIHRvIGV4cG9zZSBpbnRlcmZhY2UgVmlld1BvcnRJbnN0cnVjdGlvblxyXG4gICAgICAgIHZhciB2aWV3UG9ydERlZmF1bHRzID0gJHZpZXdQb3J0RGVmYXVsdHM7XHJcbiAgICAgICAgZm9yICh2YXIgdmlld1BvcnROYW1lIGluIHZpZXdQb3J0RGVmYXVsdHMpIHtcclxuICAgICAgICAgICAgdmFyIHZpZXdQb3J0Q29uZmlnID0gdmlld1BvcnREZWZhdWx0c1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdQb3J0RGVmYXVsdHNbdmlld1BvcnROYW1lXSA9IHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB2aWV3UG9ydENvbmZpZy5tb2R1bGVJZFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuX3JlZnJlc2hCYXNlVXJsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwYXJlbnRSb3V0ZXIgPSB0aGlzLnBhcmVudDtcclxuICAgICAgICBpZiAocGFyZW50Um91dGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZVVybCA9IGdlbmVyYXRlQmFzZVVybChwYXJlbnRSb3V0ZXIsIHBhcmVudFJvdXRlci5jdXJyZW50SW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuX2NyZWF0ZU5hdmlnYXRpb25JbnN0cnVjdGlvbiA9IGZ1bmN0aW9uICh1cmwsIHBhcmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9ICcnOyB9XHJcbiAgICAgICAgaWYgKHBhcmVudEluc3RydWN0aW9uID09PSB2b2lkIDApIHsgcGFyZW50SW5zdHJ1Y3Rpb24gPSBudWxsOyB9XHJcbiAgICAgICAgdmFyIGZyYWdtZW50ID0gdXJsO1xyXG4gICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgIHZhciBxdWVyeUluZGV4ID0gdXJsLmluZGV4T2YoJz8nKTtcclxuICAgICAgICBpZiAocXVlcnlJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgZnJhZ21lbnQgPSB1cmwuc3Vic3RyKDAsIHF1ZXJ5SW5kZXgpO1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHVybC5zdWJzdHIocXVlcnlJbmRleCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdXJsUmVjb2duaXphdGlvblJlc3VsdHMgPSB0aGlzLl9yZWNvZ25pemVyLnJlY29nbml6ZSh1cmwpO1xyXG4gICAgICAgIGlmICghdXJsUmVjb2duaXphdGlvblJlc3VsdHMgfHwgIXVybFJlY29nbml6YXRpb25SZXN1bHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB1cmxSZWNvZ25pemF0aW9uUmVzdWx0cyA9IHRoaXMuX2NoaWxkUmVjb2duaXplci5yZWNvZ25pemUodXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGluc3RydWN0aW9uSW5pdCA9IHtcclxuICAgICAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50LFxyXG4gICAgICAgICAgICBxdWVyeVN0cmluZzogcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgIGNvbmZpZzogbnVsbCxcclxuICAgICAgICAgICAgcGFyZW50SW5zdHJ1Y3Rpb246IHBhcmVudEluc3RydWN0aW9uLFxyXG4gICAgICAgICAgICBwcmV2aW91c0luc3RydWN0aW9uOiB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbixcclxuICAgICAgICAgICAgcm91dGVyOiB0aGlzLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJlUXVlcnlQYXJhbXM6IHRoaXMub3B0aW9ucy5jb21wYXJlUXVlcnlQYXJhbXNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICBpZiAodXJsUmVjb2duaXphdGlvblJlc3VsdHMgJiYgdXJsUmVjb2duaXphdGlvblJlc3VsdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBmaXJzdCA9IHVybFJlY29nbml6YXRpb25SZXN1bHRzWzBdO1xyXG4gICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgTmF2aWdhdGlvbkluc3RydWN0aW9uKE9iamVjdC5hc3NpZ24oe30sIGluc3RydWN0aW9uSW5pdCwge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBmaXJzdC5wYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogZmlyc3QucXVlcnlQYXJhbXMgfHwgdXJsUmVjb2duaXphdGlvblJlc3VsdHMucXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBjb25maWc6IGZpcnN0LmNvbmZpZyB8fCBmaXJzdC5oYW5kbGVyXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaXJzdC5oYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBldmFsdWF0ZU5hdmlnYXRpb25TdHJhdGVneShpbnN0cnVjdGlvbiwgZmlyc3QuaGFuZGxlciwgZmlyc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0LmhhbmRsZXIgJiYgdHlwZW9mIGZpcnN0LmhhbmRsZXIubmF2aWdhdGlvblN0cmF0ZWd5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBldmFsdWF0ZU5hdmlnYXRpb25TdHJhdGVneShpbnN0cnVjdGlvbiwgZmlyc3QuaGFuZGxlci5uYXZpZ2F0aW9uU3RyYXRlZ3ksIGZpcnN0LmhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKGluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNhdGNoQWxsSGFuZGxlcikge1xyXG4gICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgTmF2aWdhdGlvbkluc3RydWN0aW9uKE9iamVjdC5hc3NpZ24oe30sIGluc3RydWN0aW9uSW5pdCwge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7IHBhdGg6IGZyYWdtZW50IH0sXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogdXJsUmVjb2duaXphdGlvblJlc3VsdHMgPyB1cmxSZWNvZ25pemF0aW9uUmVzdWx0cy5xdWVyeVBhcmFtcyA6IHt9LFxyXG4gICAgICAgICAgICAgICAgY29uZmlnOiBudWxsIC8vIGNvbmZpZyB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIGNhdGNoQWxsSGFuZGxlclxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGV2YWx1YXRlTmF2aWdhdGlvblN0cmF0ZWd5KGluc3RydWN0aW9uLCB0aGlzLmNhdGNoQWxsSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLl9wYXJlbnRDYXRjaEFsbEhhbmRsZXIodGhpcy5wYXJlbnQpO1xyXG4gICAgICAgICAgICBpZiAocm91dGVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyZW50SW5zdHJ1Y3Rpb24gPSB0aGlzLl9maW5kUGFyZW50SW5zdHJ1Y3Rpb25Gcm9tUm91dGVyKHJvdXRlciwgcGFyZW50SW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgdmFyIGluc3RydWN0aW9uID0gbmV3IE5hdmlnYXRpb25JbnN0cnVjdGlvbihPYmplY3QuYXNzaWduKHt9LCBpbnN0cnVjdGlvbkluaXQsIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgcGF0aDogZnJhZ21lbnQgfSxcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogdXJsUmVjb2duaXphdGlvblJlc3VsdHMgPyB1cmxSZWNvZ25pemF0aW9uUmVzdWx0cy5xdWVyeVBhcmFtcyA6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlcjogcm91dGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RydWN0aW9uOiBuZXdQYXJlbnRJbnN0cnVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDYXRjaEhhbmRsZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBudWxsIC8vIGNvbmZpZyB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIGNoYWluZWQgcGFyZW50IGNhdGNoQWxsSGFuZGxlclxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbHVhdGVOYXZpZ2F0aW9uU3RyYXRlZ3koaW5zdHJ1Y3Rpb24sIHJvdXRlci5jYXRjaEFsbEhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcGFyZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlVXJsID0gZ2VuZXJhdGVCYXNlVXJsKHRoaXMucGFyZW50LCBwYXJlbnRJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQgfHwgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiUm91dGUgbm90IGZvdW5kOiBcIiArIHVybCkpO1xyXG4gICAgfTtcclxuICAgIC8qKkBpbnRlcm5hbCAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5fZmluZFBhcmVudEluc3RydWN0aW9uRnJvbVJvdXRlciA9IGZ1bmN0aW9uIChyb3V0ZXIsIGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKGluc3RydWN0aW9uLnJvdXRlciA9PT0gcm91dGVyKSB7XHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uLmZyYWdtZW50ID0gcm91dGVyLmJhc2VVcmw7IC8vIG5lZWQgdG8gY2hhbmdlIHRoZSBmcmFnbWVudCBpbiBjYXNlIG9mIGEgcmVkaXJlY3QgaW5zdGVhZCBvZiBtb2R1bGVJZFxyXG4gICAgICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uLnBhcmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kUGFyZW50SW5zdHJ1Y3Rpb25Gcm9tUm91dGVyKHJvdXRlciwgaW5zdHJ1Y3Rpb24ucGFyZW50SW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIC8qKkBpbnRlcm5hbCAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5fcGFyZW50Q2F0Y2hBbGxIYW5kbGVyID0gZnVuY3Rpb24gKHJvdXRlcikge1xyXG4gICAgICAgIGlmIChyb3V0ZXIuY2F0Y2hBbGxIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb3V0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJvdXRlci5wYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudENhdGNoQWxsSGFuZGxlcihyb3V0ZXIucGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuX2NyZWF0ZVJvdXRlQ29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZywgaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlXHJcbiAgICAgICAgICAgIC5yZXNvbHZlKGNvbmZpZylcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbW9kdWxlSWQ6IGMgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGMoaW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC8vIHR5cGluZyBoZXJlIGNvdWxkIGJlIGVpdGhlciBSb3V0ZUNvbmZpZyBvciBSZWRpcmVjdENvbmZpZ1xyXG4gICAgICAgICAgICAvLyBidXQgdGVtcG9yYXJpbHkgdHJlYXQgYm90aCBhcyBSb3V0ZUNvbmZpZ1xyXG4gICAgICAgICAgICAvLyB0b2RvOiBpbXByb3ZlIHR5cGluZ3MgcHJlY2lzaW9uXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjKSB7IHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZycgPyB7IG1vZHVsZUlkOiBjIH0gOiBjOyB9KVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICBjLnJvdXRlID0gaW5zdHJ1Y3Rpb24ucGFyYW1zLnBhdGg7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlUm91dGVDb25maWcoYyk7XHJcbiAgICAgICAgICAgIGlmICghYy5uYXZNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgYy5uYXZNb2RlbCA9IF90aGlzLmNyZWF0ZU5hdk1vZGVsKGMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSb3V0ZXI7XHJcbn0oKSk7XHJcbi8qIEBpbnRlcm5hbCBleHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nICovXHJcbnZhciBnZW5lcmF0ZUJhc2VVcmwgPSBmdW5jdGlvbiAocm91dGVyLCBpbnN0cnVjdGlvbikge1xyXG4gICAgcmV0dXJuIFwiXCIgKyAocm91dGVyLmJhc2VVcmwgfHwgJycpICsgKGluc3RydWN0aW9uLmdldEJhc2VVcmwoKSB8fCAnJyk7XHJcbn07XHJcbi8qIEBpbnRlcm5hbCBleHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nICovXHJcbnZhciB2YWxpZGF0ZVJvdXRlQ29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykge1xyXG4gICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFJvdXRlIENvbmZpZycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBjb25maWcucm91dGUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdmFyIG5hbWVfMSA9IGNvbmZpZy5uYW1lIHx8ICcobm8gbmFtZSknO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBSb3V0ZSBDb25maWcgZm9yIFwiJyArIG5hbWVfMSArICdcIjogWW91IG11c3Qgc3BlY2lmeSBhIFwicm91dGU6XCIgcGF0dGVybi4nKTtcclxuICAgIH1cclxuICAgIGlmICghKCdyZWRpcmVjdCcgaW4gY29uZmlnIHx8IGNvbmZpZy5tb2R1bGVJZCB8fCBjb25maWcubmF2aWdhdGlvblN0cmF0ZWd5IHx8IGNvbmZpZy52aWV3UG9ydHMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFJvdXRlIENvbmZpZyBmb3IgXCInICsgY29uZmlnLnJvdXRlICsgJ1wiOiBZb3UgbXVzdCBzcGVjaWZ5IGEgXCJtb2R1bGVJZDpcIiwgXCJyZWRpcmVjdDpcIiwgXCJuYXZpZ2F0aW9uU3RyYXRlZ3k6XCIsIG9yIFwidmlld1BvcnRzOlwiLicpO1xyXG4gICAgfVxyXG59O1xyXG4vKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZyAqL1xyXG52YXIgZXZhbHVhdGVOYXZpZ2F0aW9uU3RyYXRlZ3kgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24sIGV2YWx1YXRvciwgY29udGV4dCkge1xyXG4gICAgcmV0dXJuIFByb21pc2VcclxuICAgICAgICAucmVzb2x2ZShldmFsdWF0b3IuY2FsbChjb250ZXh0LCBpbnN0cnVjdGlvbikpXHJcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghKCd2aWV3UG9ydHMnIGluIGluc3RydWN0aW9uLmNvbmZpZykpIHtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uY29uZmlnLnZpZXdQb3J0cyA9IHtcclxuICAgICAgICAgICAgICAgICdkZWZhdWx0Jzoge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZUlkOiBpbnN0cnVjdGlvbi5jb25maWcubW9kdWxlSWRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgfSk7XHJcbn07XG5cbi8qKkBpbnRlcm5hbCBleHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nICovXHJcbnZhciBjcmVhdGVOZXh0Rm4gPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24sIHN0ZXBzKSB7XHJcbiAgICB2YXIgaW5kZXggPSAtMTtcclxuICAgIHZhciBuZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgc3RlcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50U3RlcCA9IHN0ZXBzW2luZGV4XTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U3RlcChpbnN0cnVjdGlvbiwgbmV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LnJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuY29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbmV4dC5jb21wbGV0ZSA9IGNyZWF0ZUNvbXBsZXRpb25IYW5kbGVyKG5leHQsIFwiY29tcGxldGVkXCIgLyogQ29tcGxldGVkICovKTtcclxuICAgIG5leHQuY2FuY2VsID0gY3JlYXRlQ29tcGxldGlvbkhhbmRsZXIobmV4dCwgXCJjYW5jZWxlZFwiIC8qIENhbmNlbGVkICovKTtcclxuICAgIG5leHQucmVqZWN0ID0gY3JlYXRlQ29tcGxldGlvbkhhbmRsZXIobmV4dCwgXCJyZWplY3RlZFwiIC8qIFJlamVjdGVkICovKTtcclxuICAgIHJldHVybiBuZXh0O1xyXG59O1xyXG4vKipAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZyAqL1xyXG52YXIgY3JlYXRlQ29tcGxldGlvbkhhbmRsZXIgPSBmdW5jdGlvbiAobmV4dCwgc3RhdHVzKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG91dHB1dCkgeyByZXR1cm4gUHJvbWlzZVxyXG4gICAgICAgIC5yZXNvbHZlKHtcclxuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICBvdXRwdXQ6IG91dHB1dCxcclxuICAgICAgICBjb21wbGV0ZWQ6IHN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIiAvKiBDb21wbGV0ZWQgKi9cclxuICAgIH0pOyB9O1xyXG59O1xuXG4vKipcclxuICogVGhlIGNsYXNzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhbmQgcHJvY2Vzc2luZyB0aGUgbmF2aWdhdGlvbiBwaXBlbGluZS5cclxuICovXHJcbnZhciBQaXBlbGluZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFBpcGVsaW5lKCkge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBwaXBlbGluZSBzdGVwcy4gQW5kIHN0ZXBzIGFkZGVkIHZpYSBhZGRTdGVwIHdpbGwgYmUgY29udmVydGVkIHRvIGEgZnVuY3Rpb25cclxuICAgICAgICAgKiBUaGUgYWN0dWFseSBydW5uaW5nIGZ1bmN0aW9ucyB3aXRoIGNvcnJlY3Qgc3RlcCBjb250ZXh0cyBvZiB0aGlzIHBpcGVsaW5lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgc3RlcCB0byB0aGUgcGlwZWxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHBpcGVsaW5lIHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIFBpcGVsaW5lLnByb3RvdHlwZS5hZGRTdGVwID0gZnVuY3Rpb24gKHN0ZXApIHtcclxuICAgICAgICB2YXIgcnVuO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RlcCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBydW4gPSBzdGVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc3RlcC5nZXRTdGVwcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAvLyBnZXRTdGVwcyBpcyB0byBlbmFibGUgc3VwcG9ydCBvcGVuIHNsb3RzXHJcbiAgICAgICAgICAgIC8vIHdoZXJlIGRldnMgY2FuIGFkZCBtdWx0aXBsZSBzdGVwcyBpbnRvIHRoZSBzYW1lIHNsb3QgbmFtZVxyXG4gICAgICAgICAgICB2YXIgc3RlcHMgPSBzdGVwLmdldFN0ZXBzKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3RlcHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFN0ZXAoc3RlcHNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcnVuID0gc3RlcC5ydW4uYmluZChzdGVwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGVwcy5wdXNoKHJ1bik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSdW5zIHRoZSBwaXBlbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb24gVGhlIG5hdmlnYXRpb24gaW5zdHJ1Y3Rpb24gdG8gcHJvY2Vzcy5cclxuICAgICAqL1xyXG4gICAgUGlwZWxpbmUucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBuZXh0Rm4gPSBjcmVhdGVOZXh0Rm4oaW5zdHJ1Y3Rpb24sIHRoaXMuc3RlcHMpO1xyXG4gICAgICAgIHJldHVybiBuZXh0Rm4oKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUGlwZWxpbmU7XHJcbn0oKSk7XG5cbi8qKlxyXG4qIERldGVybWluZXMgaWYgdGhlIHByb3ZpZGVkIG9iamVjdCBpcyBhIG5hdmlnYXRpb24gY29tbWFuZC5cclxuKiBBIG5hdmlnYXRpb24gY29tbWFuZCBpcyBhbnl0aGluZyB3aXRoIGEgbmF2aWdhdGUgbWV0aG9kLlxyXG4qXHJcbiogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIGNoZWNrLlxyXG4qL1xyXG5mdW5jdGlvbiBpc05hdmlnYXRpb25Db21tYW5kKG9iaikge1xyXG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqLm5hdmlnYXRlID09PSAnZnVuY3Rpb24nO1xyXG59XHJcbi8qKlxyXG4qIFVzZWQgZHVyaW5nIHRoZSBhY3RpdmF0aW9uIGxpZmVjeWNsZSB0byBjYXVzZSBhIHJlZGlyZWN0LlxyXG4qL1xyXG52YXIgUmVkaXJlY3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB1cmwgVGhlIFVSTCBmcmFnbWVudCB0byB1c2UgYXMgdGhlIG5hdmlnYXRpb24gZGVzdGluYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgbmF2aWdhdGlvbiBvcHRpb25zLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZWRpcmVjdCh1cmwsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyB0cmlnZ2VyOiB0cnVlLCByZXBsYWNlOiB0cnVlIH0sIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuc2hvdWxkQ29udGludWVQcm9jZXNzaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB0aGUgYWN0aXZhdGlvbiBzeXN0ZW0gdG8gc2V0IHRoZSBjaGlsZCByb3V0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlciBUaGUgcm91dGVyLlxyXG4gICAgICovXHJcbiAgICBSZWRpcmVjdC5wcm90b3R5cGUuc2V0Um91dGVyID0gZnVuY3Rpb24gKHJvdXRlcikge1xyXG4gICAgICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBuYXZpZ2F0aW9uIHBpcGVsaW5lIHRvIG5hdmlnYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcHBSb3V0ZXIgVGhlIHJvdXRlciB0byBiZSByZWRpcmVjdGVkLlxyXG4gICAgICovXHJcbiAgICBSZWRpcmVjdC5wcm90b3R5cGUubmF2aWdhdGUgPSBmdW5jdGlvbiAoYXBwUm91dGVyKSB7XHJcbiAgICAgICAgdmFyIG5hdmlnYXRpbmdSb3V0ZXIgPSB0aGlzLm9wdGlvbnMudXNlQXBwUm91dGVyID8gYXBwUm91dGVyIDogKHRoaXMucm91dGVyIHx8IGFwcFJvdXRlcik7XHJcbiAgICAgICAgbmF2aWdhdGluZ1JvdXRlci5uYXZpZ2F0ZSh0aGlzLnVybCwgdGhpcy5vcHRpb25zKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVkaXJlY3Q7XHJcbn0oKSk7XHJcbi8qKlxyXG4gKiBVc2VkIGR1cmluZyB0aGUgYWN0aXZhdGlvbiBsaWZlY3ljbGUgdG8gY2F1c2UgYSByZWRpcmVjdCB0byBhIG5hbWVkIHJvdXRlLlxyXG4gKi9cclxudmFyIFJlZGlyZWN0VG9Sb3V0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHJvdXRlIFRoZSBuYW1lIG9mIHRoZSByb3V0ZS5cclxuICAgICAqIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgdG8gYmUgc2VudCB0byB0aGUgYWN0aXZhdGlvbiBtZXRob2QuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0byB1c2UgZm9yIG5hdmlnYXRpb24uXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJlZGlyZWN0VG9Sb3V0ZShyb3V0ZSwgcGFyYW1zLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHBhcmFtcyA9PT0gdm9pZCAwKSB7IHBhcmFtcyA9IHt9OyB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgICAgICB0aGlzLnJvdXRlID0gcm91dGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IHRyaWdnZXI6IHRydWUsIHJlcGxhY2U6IHRydWUgfSwgb3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5zaG91bGRDb250aW51ZVByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBhY3RpdmF0aW9uIHN5c3RlbSB0byBzZXQgdGhlIGNoaWxkIHJvdXRlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcm91dGVyIFRoZSByb3V0ZXIuXHJcbiAgICAgKi9cclxuICAgIFJlZGlyZWN0VG9Sb3V0ZS5wcm90b3R5cGUuc2V0Um91dGVyID0gZnVuY3Rpb24gKHJvdXRlcikge1xyXG4gICAgICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBuYXZpZ2F0aW9uIHBpcGVsaW5lIHRvIG5hdmlnYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcHBSb3V0ZXIgVGhlIHJvdXRlciB0byBiZSByZWRpcmVjdGVkLlxyXG4gICAgICovXHJcbiAgICBSZWRpcmVjdFRvUm91dGUucHJvdG90eXBlLm5hdmlnYXRlID0gZnVuY3Rpb24gKGFwcFJvdXRlcikge1xyXG4gICAgICAgIHZhciBuYXZpZ2F0aW5nUm91dGVyID0gdGhpcy5vcHRpb25zLnVzZUFwcFJvdXRlciA/IGFwcFJvdXRlciA6ICh0aGlzLnJvdXRlciB8fCBhcHBSb3V0ZXIpO1xyXG4gICAgICAgIG5hdmlnYXRpbmdSb3V0ZXIubmF2aWdhdGVUb1JvdXRlKHRoaXMucm91dGUsIHRoaXMucGFyYW1zLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZWRpcmVjdFRvUm91dGU7XHJcbn0oKSk7XG5cbi8qKlxyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxuZnVuY3Rpb24gX2J1aWxkTmF2aWdhdGlvblBsYW4oaW5zdHJ1Y3Rpb24sIGZvcmNlTGlmZWN5Y2xlTWluaW11bSkge1xyXG4gICAgdmFyIGNvbmZpZyA9IGluc3RydWN0aW9uLmNvbmZpZztcclxuICAgIGlmICgncmVkaXJlY3QnIGluIGNvbmZpZykge1xyXG4gICAgICAgIHJldHVybiBidWlsZFJlZGlyZWN0UGxhbihpbnN0cnVjdGlvbik7XHJcbiAgICB9XHJcbiAgICB2YXIgcHJldkluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24ucHJldmlvdXNJbnN0cnVjdGlvbjtcclxuICAgIHZhciBkZWZhdWx0Vmlld1BvcnRDb25maWdzID0gaW5zdHJ1Y3Rpb24ucm91dGVyLnZpZXdQb3J0RGVmYXVsdHM7XHJcbiAgICBpZiAocHJldkluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkVHJhbnNpdGlvblBsYW5zKGluc3RydWN0aW9uLCBwcmV2SW5zdHJ1Y3Rpb24sIGRlZmF1bHRWaWV3UG9ydENvbmZpZ3MsIGZvcmNlTGlmZWN5Y2xlTWluaW11bSk7XHJcbiAgICB9XHJcbiAgICAvLyBmaXJzdCBuYXZpZ2F0aW9uLCBvbmx5IG5lZWQgdG8gcHJlcGFyZSBhIGZldyBpbmZvcm1hdGlvbiBmb3IgZWFjaCB2aWV3cG9ydCBwbGFuXHJcbiAgICB2YXIgdmlld1BvcnRQbGFucyA9IHt9O1xyXG4gICAgdmFyIHZpZXdQb3J0Q29uZmlncyA9IGNvbmZpZy52aWV3UG9ydHM7XHJcbiAgICBmb3IgKHZhciB2aWV3UG9ydE5hbWUgaW4gdmlld1BvcnRDb25maWdzKSB7XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0Q29uZmlnID0gdmlld1BvcnRDb25maWdzW3ZpZXdQb3J0TmFtZV07XHJcbiAgICAgICAgaWYgKHZpZXdQb3J0Q29uZmlnLm1vZHVsZUlkID09PSBudWxsICYmIHZpZXdQb3J0TmFtZSBpbiBkZWZhdWx0Vmlld1BvcnRDb25maWdzKSB7XHJcbiAgICAgICAgICAgIHZpZXdQb3J0Q29uZmlnID0gZGVmYXVsdFZpZXdQb3J0Q29uZmlnc1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2aWV3UG9ydFBsYW5zW3ZpZXdQb3J0TmFtZV0gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHZpZXdQb3J0TmFtZSxcclxuICAgICAgICAgICAgc3RyYXRlZ3k6IFwicmVwbGFjZVwiIC8qIFJlcGxhY2UgKi8sXHJcbiAgICAgICAgICAgIGNvbmZpZzogdmlld1BvcnRDb25maWdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2aWV3UG9ydFBsYW5zKTtcclxufVxyXG4vKipcclxuICogQnVpbGQgcmVkaXJlY3QgcGxhbiBiYXNlZCBvbiBjb25maWcgb2YgYSBuYXZpZ2F0aW9uIGluc3RydWN0aW9uXHJcbiAqIEBpbnRlcm5hbCBleHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nXHJcbiAqL1xyXG52YXIgYnVpbGRSZWRpcmVjdFBsYW4gPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgIHZhciBjb25maWcgPSBpbnN0cnVjdGlvbi5jb25maWc7XHJcbiAgICB2YXIgcm91dGVyID0gaW5zdHJ1Y3Rpb24ucm91dGVyO1xyXG4gICAgcmV0dXJuIHJvdXRlclxyXG4gICAgICAgIC5fY3JlYXRlTmF2aWdhdGlvbkluc3RydWN0aW9uKGNvbmZpZy5yZWRpcmVjdClcclxuICAgICAgICAudGhlbihmdW5jdGlvbiAocmVkaXJlY3RJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fTtcclxuICAgICAgICB2YXIgb3JpZ2luYWxJbnN0cnVjdGlvblBhcmFtcyA9IGluc3RydWN0aW9uLnBhcmFtcztcclxuICAgICAgICB2YXIgcmVkaXJlY3RJbnN0cnVjdGlvblBhcmFtcyA9IHJlZGlyZWN0SW5zdHJ1Y3Rpb24ucGFyYW1zO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiByZWRpcmVjdEluc3RydWN0aW9uUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBwYXJhbSBvbiB0aGUgcmVkaXJlY3QgcG9pbnRzIHRvIGFub3RoZXIgcGFyYW0sIGUuZy4geyByb3V0ZTogZmlyc3QvOnRoaXMsIHJlZGlyZWN0OiBzZWNvbmQvOnRoaXMgfVxyXG4gICAgICAgICAgICB2YXIgdmFsID0gcmVkaXJlY3RJbnN0cnVjdGlvblBhcmFtc1trZXldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsWzBdID09PSAnOicpIHtcclxuICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgxKTtcclxuICAgICAgICAgICAgICAgIC8vIEFuZCBpZiB0aGF0IHBhcmFtIGlzIGZvdW5kIG9uIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiB0aGVuIHVzZSBpdFxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCBpbiBvcmlnaW5hbEluc3RydWN0aW9uUGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBvcmlnaW5hbEluc3RydWN0aW9uUGFyYW1zW3ZhbF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXNba2V5XSA9IHJlZGlyZWN0SW5zdHJ1Y3Rpb25QYXJhbXNba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVkaXJlY3RMb2NhdGlvbiA9IHJvdXRlci5nZW5lcmF0ZShyZWRpcmVjdEluc3RydWN0aW9uLmNvbmZpZywgcGFyYW1zLCBpbnN0cnVjdGlvbi5vcHRpb25zKTtcclxuICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBjaGlsZCByb3V0ZXNcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3JpZ2luYWxJbnN0cnVjdGlvblBhcmFtcykge1xyXG4gICAgICAgICAgICByZWRpcmVjdExvY2F0aW9uID0gcmVkaXJlY3RMb2NhdGlvbi5yZXBsYWNlKFwiOlwiICsga2V5LCBvcmlnaW5hbEluc3RydWN0aW9uUGFyYW1zW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBpbnN0cnVjdGlvbi5xdWVyeVN0cmluZztcclxuICAgICAgICBpZiAocXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmVkaXJlY3RMb2NhdGlvbiArPSAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgUmVkaXJlY3QocmVkaXJlY3RMb2NhdGlvbikpO1xyXG4gICAgfSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gdmlld1BvcnRQbGFucyB0aGUgUGxhbiByZWNvcmQgdGhhdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBidWlsdCBwbGFuc1xyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIGJ1aWxkVHJhbnNpdGlvblBsYW5zID0gZnVuY3Rpb24gKGN1cnJlbnRJbnN0cnVjdGlvbiwgcHJldmlvdXNJbnN0cnVjdGlvbiwgZGVmYXVsdFZpZXdQb3J0Q29uZmlncywgZm9yY2VMaWZlY3ljbGVNaW5pbXVtKSB7XHJcbiAgICB2YXIgdmlld1BvcnRQbGFucyA9IHt9O1xyXG4gICAgdmFyIG5ld0luc3RydWN0aW9uQ29uZmlnID0gY3VycmVudEluc3RydWN0aW9uLmNvbmZpZztcclxuICAgIHZhciBoYXNOZXdQYXJhbXMgPSBoYXNEaWZmZXJlbnRQYXJhbWV0ZXJWYWx1ZXMocHJldmlvdXNJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uKTtcclxuICAgIHZhciBwZW5kaW5nID0gW107XHJcbiAgICB2YXIgcHJldmlvdXNWaWV3UG9ydEluc3RydWN0aW9ucyA9IHByZXZpb3VzSW5zdHJ1Y3Rpb24udmlld1BvcnRJbnN0cnVjdGlvbnM7XHJcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uICh2aWV3UG9ydE5hbWUpIHtcclxuICAgICAgICB2YXIgcHJldlZpZXdQb3J0SW5zdHJ1Y3Rpb24gPSBwcmV2aW91c1ZpZXdQb3J0SW5zdHJ1Y3Rpb25zW3ZpZXdQb3J0TmFtZV07XHJcbiAgICAgICAgdmFyIHByZXZWaWV3UG9ydENvbXBvbmVudCA9IHByZXZWaWV3UG9ydEluc3RydWN0aW9uLmNvbXBvbmVudDtcclxuICAgICAgICB2YXIgbmV3SW5zdHJ1Y3Rpb25WaWV3UG9ydENvbmZpZ3MgPSBuZXdJbnN0cnVjdGlvbkNvbmZpZy52aWV3UG9ydHM7XHJcbiAgICAgICAgLy8gaWYgdGhpcyBpcyBpbnZva2VkIG9uIGEgdmlld3BvcnQgd2l0aG91dCBhbnkgY2hhbmdlcywgYmFzZWQgb24gbmV3IHVybCxcclxuICAgICAgICAvLyBuZXdWaWV3UG9ydENvbmZpZyB3aWxsIGJlIHRoZSBleGlzdGluZyB2aWV3cG9ydCBpbnN0cnVjdGlvblxyXG4gICAgICAgIHZhciBuZXh0Vmlld1BvcnRDb25maWcgPSB2aWV3UG9ydE5hbWUgaW4gbmV3SW5zdHJ1Y3Rpb25WaWV3UG9ydENvbmZpZ3NcclxuICAgICAgICAgICAgPyBuZXdJbnN0cnVjdGlvblZpZXdQb3J0Q29uZmlnc1t2aWV3UG9ydE5hbWVdXHJcbiAgICAgICAgICAgIDogcHJldlZpZXdQb3J0SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgaWYgKG5leHRWaWV3UG9ydENvbmZpZy5tb2R1bGVJZCA9PT0gbnVsbCAmJiB2aWV3UG9ydE5hbWUgaW4gZGVmYXVsdFZpZXdQb3J0Q29uZmlncykge1xyXG4gICAgICAgICAgICBuZXh0Vmlld1BvcnRDb25maWcgPSBkZWZhdWx0Vmlld1BvcnRDb25maWdzW3ZpZXdQb3J0TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2aWV3UG9ydEFjdGl2YXRpb25TdHJhdGVneSA9IGRldGVybWluZUFjdGl2YXRpb25TdHJhdGVneShjdXJyZW50SW5zdHJ1Y3Rpb24sIHByZXZWaWV3UG9ydEluc3RydWN0aW9uLCBuZXh0Vmlld1BvcnRDb25maWcsIGhhc05ld1BhcmFtcywgZm9yY2VMaWZlY3ljbGVNaW5pbXVtKTtcclxuICAgICAgICB2YXIgdmlld1BvcnRQbGFuID0gdmlld1BvcnRQbGFuc1t2aWV3UG9ydE5hbWVdID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB2aWV3UG9ydE5hbWUsXHJcbiAgICAgICAgICAgIC8vIFZpZXdQb3J0SW5zdHJ1Y3Rpb24gY2FuIHF1YWNrIGxpa2UgYSBSb3V0ZUNvbmZpZ1xyXG4gICAgICAgICAgICBjb25maWc6IG5leHRWaWV3UG9ydENvbmZpZyxcclxuICAgICAgICAgICAgcHJldkNvbXBvbmVudDogcHJldlZpZXdQb3J0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICBwcmV2TW9kdWxlSWQ6IHByZXZWaWV3UG9ydEluc3RydWN0aW9uLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICBzdHJhdGVneTogdmlld1BvcnRBY3RpdmF0aW9uU3RyYXRlZ3lcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGJ1aWxkIG5hdiBwbGFucyBmb3IgYWxsIGV4aXN0aW5nIGNoaWxkIHJvdXRlcnMvdmlld3BvcnRzIG9mIHRoaXMgdmlld3BvcnRcclxuICAgICAgICAvLyB0aGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgZXhpc3RpbmcgY2hpbGQgdmlld3BvcnRzIGFuZCByb3V0ZXJzIGFscmVhZHkgaGF2ZSBuZWNlc3NhcnkgaW5mb3JtYXRpb25cclxuICAgICAgICAvLyB0byBwcm9jZXNzIHRoZSB3aWxkY2FyZCBwYXRoIGZyb20gcGFyZW50IGluc3RydWN0aW9uXHJcbiAgICAgICAgaWYgKHZpZXdQb3J0QWN0aXZhdGlvblN0cmF0ZWd5ICE9PSBcInJlcGxhY2VcIiAvKiBSZXBsYWNlICovICYmIHByZXZWaWV3UG9ydEluc3RydWN0aW9uLmNoaWxkUm91dGVyKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXRoID0gY3VycmVudEluc3RydWN0aW9uLmdldFdpbGRjYXJkUGF0aCgpO1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHByZXZWaWV3UG9ydEluc3RydWN0aW9uXHJcbiAgICAgICAgICAgICAgICAuY2hpbGRSb3V0ZXJcclxuICAgICAgICAgICAgICAgIC5fY3JlYXRlTmF2aWdhdGlvbkluc3RydWN0aW9uKHBhdGgsIGN1cnJlbnRJbnN0cnVjdGlvbilcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjaGlsZEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3UG9ydFBsYW4uY2hpbGROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24gPSBjaGlsZEluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9idWlsZE5hdmlnYXRpb25QbGFuKGNoaWxkSW5zdHJ1Y3Rpb24sIFxyXG4gICAgICAgICAgICAgICAgLy8gaXMgaXQgc2FmZSB0byBhc3N1bWUgdmlld1BvcnRQbGFuIGhhcyBub3QgYmVlbiBjaGFuZ2VkIGZyb20gcHJldmlvdXMgYXNzaWdubWVudD9cclxuICAgICAgICAgICAgICAgIC8vIGlmIHNvLCBjYW4ganVzdCB1c2UgbG9jYWwgdmFyaWFibGUgdmlld1BvcnRQbGFuU3RyYXRlZ3lcclxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGNvdWxkIGJlIHVzZXIgY29kZSBtb2RpZnlpbmcgdmlld3BvcnQgcGxhbiBkdXJpbmcgX2NyZWF0ZU5hdmlnYXRpb25JbnN0cnVjdGlvbj9cclxuICAgICAgICAgICAgICAgIHZpZXdQb3J0UGxhbi5zdHJhdGVneSA9PT0gXCJpbnZva2UtbGlmZWN5Y2xlXCIgLyogSW52b2tlTGlmZWN5Y2xlICovKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjaGlsZFBsYW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRQbGFuIGluc3RhbmNlb2YgUmVkaXJlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGNoaWxkUGxhbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkSW5zdHJ1Y3Rpb24ucGxhbiA9IGNoaWxkUGxhbjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYmx1ZWJpcmQgP1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwZW5kaW5nLnB1c2godGFzayk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIHZpZXdQb3J0TmFtZSBpbiBwcmV2aW91c1ZpZXdQb3J0SW5zdHJ1Y3Rpb25zKSB7XHJcbiAgICAgICAgX2xvb3BfMSh2aWV3UG9ydE5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHBlbmRpbmcpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gdmlld1BvcnRQbGFuczsgfSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gbmV3Vmlld1BvcnRDb25maWcgaWYgdGhpcyBpcyBpbnZva2VkIG9uIGEgdmlld3BvcnQgd2l0aG91dCBhbnkgY2hhbmdlcywgYmFzZWQgb24gbmV3IHVybCwgbmV3Vmlld1BvcnRDb25maWcgd2lsbCBiZSB0aGUgZXhpc3Rpbmcgdmlld3BvcnQgaW5zdHJ1Y3Rpb25cclxuICogQGludGVybmFsIGV4cG9ydGVkIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbnZhciBkZXRlcm1pbmVBY3RpdmF0aW9uU3RyYXRlZ3kgPSBmdW5jdGlvbiAoY3VycmVudE5hdkluc3RydWN0aW9uLCBwcmV2Vmlld1BvcnRJbnN0cnVjdGlvbiwgbmV3Vmlld1BvcnRDb25maWcsIFxyXG4vLyBpbmRpY2F0ZXMgd2hldGhlciB0aGVyZSBpcyBkaWZmZXJlbmNlIGJldHdlZW4gb2xkIGFuZCBuZXcgdXJsIHBhcmFtc1xyXG5oYXNOZXdQYXJhbXMsIGZvcmNlTGlmZWN5Y2xlTWluaW11bSkge1xyXG4gICAgdmFyIG5ld0luc3RydWN0aW9uQ29uZmlnID0gY3VycmVudE5hdkluc3RydWN0aW9uLmNvbmZpZztcclxuICAgIHZhciBwcmV2Vmlld1BvcnRWaWV3TW9kZWwgPSBwcmV2Vmlld1BvcnRJbnN0cnVjdGlvbi5jb21wb25lbnQudmlld01vZGVsO1xyXG4gICAgdmFyIHZpZXdQb3J0UGxhblN0cmF0ZWd5O1xyXG4gICAgaWYgKHByZXZWaWV3UG9ydEluc3RydWN0aW9uLm1vZHVsZUlkICE9PSBuZXdWaWV3UG9ydENvbmZpZy5tb2R1bGVJZCkge1xyXG4gICAgICAgIHZpZXdQb3J0UGxhblN0cmF0ZWd5ID0gXCJyZXBsYWNlXCIgLyogUmVwbGFjZSAqLztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCdkZXRlcm1pbmVBY3RpdmF0aW9uU3RyYXRlZ3knIGluIHByZXZWaWV3UG9ydFZpZXdNb2RlbCkge1xyXG4gICAgICAgIHZpZXdQb3J0UGxhblN0cmF0ZWd5ID0gcHJldlZpZXdQb3J0Vmlld01vZGVsLmRldGVybWluZUFjdGl2YXRpb25TdHJhdGVneS5hcHBseShwcmV2Vmlld1BvcnRWaWV3TW9kZWwsIGN1cnJlbnROYXZJbnN0cnVjdGlvbi5saWZlY3ljbGVBcmdzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5ld0luc3RydWN0aW9uQ29uZmlnLmFjdGl2YXRpb25TdHJhdGVneSkge1xyXG4gICAgICAgIHZpZXdQb3J0UGxhblN0cmF0ZWd5ID0gbmV3SW5zdHJ1Y3Rpb25Db25maWcuYWN0aXZhdGlvblN0cmF0ZWd5O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaGFzTmV3UGFyYW1zIHx8IGZvcmNlTGlmZWN5Y2xlTWluaW11bSkge1xyXG4gICAgICAgIHZpZXdQb3J0UGxhblN0cmF0ZWd5ID0gXCJpbnZva2UtbGlmZWN5Y2xlXCIgLyogSW52b2tlTGlmZWN5Y2xlICovO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmlld1BvcnRQbGFuU3RyYXRlZ3kgPSBcIm5vLWNoYW5nZVwiIC8qIE5vQ2hhbmdlICovO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpZXdQb3J0UGxhblN0cmF0ZWd5O1xyXG59O1xyXG4vKipAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZyAqL1xyXG52YXIgaGFzRGlmZmVyZW50UGFyYW1ldGVyVmFsdWVzID0gZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcclxuICAgIHZhciBwcmV2UGFyYW1zID0gcHJldi5wYXJhbXM7XHJcbiAgICB2YXIgbmV4dFBhcmFtcyA9IG5leHQucGFyYW1zO1xyXG4gICAgdmFyIG5leHRXaWxkQ2FyZE5hbWUgPSBuZXh0LmNvbmZpZy5oYXNDaGlsZFJvdXRlciA/IG5leHQuZ2V0V2lsZENhcmROYW1lKCkgOiBudWxsO1xyXG4gICAgZm9yICh2YXIga2V5IGluIG5leHRQYXJhbXMpIHtcclxuICAgICAgICBpZiAoa2V5ID09PSBuZXh0V2lsZENhcmROYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJldlBhcmFtc1trZXldICE9PSBuZXh0UGFyYW1zW2tleV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIHByZXZQYXJhbXMpIHtcclxuICAgICAgICBpZiAoa2V5ID09PSBuZXh0V2lsZENhcmROYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJldlBhcmFtc1trZXldICE9PSBuZXh0UGFyYW1zW2tleV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFuZXh0Lm9wdGlvbnMuY29tcGFyZVF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdmFyIHByZXZRdWVyeVBhcmFtcyA9IHByZXYucXVlcnlQYXJhbXM7XHJcbiAgICB2YXIgbmV4dFF1ZXJ5UGFyYW1zID0gbmV4dC5xdWVyeVBhcmFtcztcclxuICAgIGZvciAodmFyIGtleSBpbiBuZXh0UXVlcnlQYXJhbXMpIHtcclxuICAgICAgICBpZiAocHJldlF1ZXJ5UGFyYW1zW2tleV0gIT09IG5leHRRdWVyeVBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBwcmV2UXVlcnlQYXJhbXMpIHtcclxuICAgICAgICBpZiAocHJldlF1ZXJ5UGFyYW1zW2tleV0gIT09IG5leHRRdWVyeVBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcblxuLyoqXHJcbiAqIFRyYW5zZm9ybSBhIG5hdmlnYXRpb24gaW5zdHJ1Y3Rpb24gaW50byB2aWV3cG9ydCBwbGFuIHJlY29yZCBvYmplY3QsXHJcbiAqIG9yIGEgcmVkaXJlY3QgcmVxdWVzdCBpZiB1c2VyIHZpZXdtb2RlbCBkZW1hbmRzXHJcbiAqL1xyXG52YXIgQnVpbGROYXZpZ2F0aW9uUGxhblN0ZXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBCdWlsZE5hdmlnYXRpb25QbGFuU3RlcCgpIHtcclxuICAgIH1cclxuICAgIEJ1aWxkTmF2aWdhdGlvblBsYW5TdGVwLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBuZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIF9idWlsZE5hdmlnYXRpb25QbGFuKG5hdmlnYXRpb25JbnN0cnVjdGlvbilcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHBsYW4pIHtcclxuICAgICAgICAgICAgaWYgKHBsYW4gaW5zdGFuY2VvZiBSZWRpcmVjdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuY2FuY2VsKHBsYW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5hdmlnYXRpb25JbnN0cnVjdGlvbi5wbGFuID0gcGxhbjtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2gobmV4dC5jYW5jZWwpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCdWlsZE5hdmlnYXRpb25QbGFuU3RlcDtcclxufSgpKTtcblxuLyoqXHJcbiAqIEBpbnRlcm5hbCBFeHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nXHJcbiAqL1xyXG52YXIgbG9hZE5ld1JvdXRlID0gZnVuY3Rpb24gKHJvdXRlTG9hZGVyLCBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pIHtcclxuICAgIHZhciBsb2FkaW5nUGxhbnMgPSBkZXRlcm1pbmVMb2FkaW5nUGxhbnMobmF2aWdhdGlvbkluc3RydWN0aW9uKTtcclxuICAgIHZhciBsb2FkUHJvbWlzZXMgPSBsb2FkaW5nUGxhbnMubWFwKGZ1bmN0aW9uIChsb2FkaW5nUGxhbikgeyByZXR1cm4gbG9hZFJvdXRlKHJvdXRlTG9hZGVyLCBsb2FkaW5nUGxhbi5uYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIGxvYWRpbmdQbGFuLnZpZXdQb3J0UGxhbik7IH0pO1xyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGxvYWRQcm9taXNlcyk7XHJcbn07XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWwgRXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIGRldGVybWluZUxvYWRpbmdQbGFucyA9IGZ1bmN0aW9uIChuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIGxvYWRpbmdQbGFucykge1xyXG4gICAgaWYgKGxvYWRpbmdQbGFucyA9PT0gdm9pZCAwKSB7IGxvYWRpbmdQbGFucyA9IFtdOyB9XHJcbiAgICB2YXIgdmlld1BvcnRQbGFucyA9IG5hdmlnYXRpb25JbnN0cnVjdGlvbi5wbGFuO1xyXG4gICAgZm9yICh2YXIgdmlld1BvcnROYW1lIGluIHZpZXdQb3J0UGxhbnMpIHtcclxuICAgICAgICB2YXIgdmlld1BvcnRQbGFuID0gdmlld1BvcnRQbGFuc1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgIHZhciBjaGlsZE5hdkluc3RydWN0aW9uID0gdmlld1BvcnRQbGFuLmNoaWxkTmF2aWdhdGlvbkluc3RydWN0aW9uO1xyXG4gICAgICAgIGlmICh2aWV3UG9ydFBsYW4uc3RyYXRlZ3kgPT09IFwicmVwbGFjZVwiIC8qIFJlcGxhY2UgKi8pIHtcclxuICAgICAgICAgICAgbG9hZGluZ1BsYW5zLnB1c2goeyB2aWV3UG9ydFBsYW46IHZpZXdQb3J0UGxhbiwgbmF2aWdhdGlvbkluc3RydWN0aW9uOiBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24gfSk7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZE5hdkluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBkZXRlcm1pbmVMb2FkaW5nUGxhbnMoY2hpbGROYXZJbnN0cnVjdGlvbiwgbG9hZGluZ1BsYW5zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHZpZXdQb3J0SW5zdHJ1Y3Rpb24gPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24uYWRkVmlld1BvcnRJbnN0cnVjdGlvbih7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2aWV3UG9ydE5hbWUsXHJcbiAgICAgICAgICAgICAgICBzdHJhdGVneTogdmlld1BvcnRQbGFuLnN0cmF0ZWd5LFxyXG4gICAgICAgICAgICAgICAgbW9kdWxlSWQ6IHZpZXdQb3J0UGxhbi5wcmV2TW9kdWxlSWQsXHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHZpZXdQb3J0UGxhbi5wcmV2Q29tcG9uZW50XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGROYXZJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdmlld1BvcnRJbnN0cnVjdGlvbi5jaGlsZE5hdmlnYXRpb25JbnN0cnVjdGlvbiA9IGNoaWxkTmF2SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICBkZXRlcm1pbmVMb2FkaW5nUGxhbnMoY2hpbGROYXZJbnN0cnVjdGlvbiwgbG9hZGluZ1BsYW5zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsb2FkaW5nUGxhbnM7XHJcbn07XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWwgRXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIGxvYWRSb3V0ZSA9IGZ1bmN0aW9uIChyb3V0ZUxvYWRlciwgbmF2aWdhdGlvbkluc3RydWN0aW9uLCB2aWV3UG9ydFBsYW4pIHtcclxuICAgIHZhciBwbGFuQ29uZmlnID0gdmlld1BvcnRQbGFuLmNvbmZpZztcclxuICAgIHZhciBtb2R1bGVJZCA9IHBsYW5Db25maWcgPyBwbGFuQ29uZmlnLm1vZHVsZUlkIDogbnVsbDtcclxuICAgIHJldHVybiBsb2FkQ29tcG9uZW50KHJvdXRlTG9hZGVyLCBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIHBsYW5Db25maWcpXHJcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNvbXBvbmVudCkge1xyXG4gICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9uID0gbmF2aWdhdGlvbkluc3RydWN0aW9uLmFkZFZpZXdQb3J0SW5zdHJ1Y3Rpb24oe1xyXG4gICAgICAgICAgICBuYW1lOiB2aWV3UG9ydFBsYW4ubmFtZSxcclxuICAgICAgICAgICAgc3RyYXRlZ3k6IHZpZXdQb3J0UGxhbi5zdHJhdGVneSxcclxuICAgICAgICAgICAgbW9kdWxlSWQ6IG1vZHVsZUlkLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciBjaGlsZFJvdXRlciA9IGNvbXBvbmVudC5jaGlsZFJvdXRlcjtcclxuICAgICAgICBpZiAoY2hpbGRSb3V0ZXIpIHtcclxuICAgICAgICAgICAgdmFyIHBhdGggPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24uZ2V0V2lsZGNhcmRQYXRoKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZFJvdXRlclxyXG4gICAgICAgICAgICAgICAgLl9jcmVhdGVOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ocGF0aCwgbmF2aWdhdGlvbkluc3RydWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNoaWxkSW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHZpZXdQb3J0UGxhbi5jaGlsZE5hdmlnYXRpb25JbnN0cnVjdGlvbiA9IGNoaWxkSW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX2J1aWxkTmF2aWdhdGlvblBsYW4oY2hpbGRJbnN0cnVjdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2hpbGRQbGFuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUGxhbiBpbnN0YW5jZW9mIFJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChjaGlsZFBsYW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjaGlsZEluc3RydWN0aW9uLnBsYW4gPSBjaGlsZFBsYW47XHJcbiAgICAgICAgICAgICAgICAgICAgdmlld1BvcnRJbnN0cnVjdGlvbi5jaGlsZE5hdmlnYXRpb25JbnN0cnVjdGlvbiA9IGNoaWxkSW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWROZXdSb3V0ZShyb3V0ZUxvYWRlciwgY2hpbGRJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRzIGNvbXBsYWlucyB3aXRob3V0IHRoaXMsIHRob3VnaCB0aGV5IGFyZSBzYW1lXHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH0pO1xyXG59O1xyXG4vKipcclxuICogTG9hZCBhIHJvdXRlZC1jb21wb25lbnQgYmFzZWQgb24gbmF2aWdhdGlvbiBpbnN0cnVjdGlvbiBhbmQgcm91dGUgY29uZmlnXHJcbiAqIEBpbnRlcm5hbCBleHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nIG9ubHlcclxuICovXHJcbnZhciBsb2FkQ29tcG9uZW50ID0gZnVuY3Rpb24gKHJvdXRlTG9hZGVyLCBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIGNvbmZpZykge1xyXG4gICAgdmFyIHJvdXRlciA9IG5hdmlnYXRpb25JbnN0cnVjdGlvbi5yb3V0ZXI7XHJcbiAgICB2YXIgbGlmZWN5Y2xlQXJncyA9IG5hdmlnYXRpb25JbnN0cnVjdGlvbi5saWZlY3ljbGVBcmdzO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXHJcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gcm91dGVMb2FkZXIubG9hZFJvdXRlKHJvdXRlciwgY29uZmlnLCBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pOyB9KVxyXG4gICAgICAgIC50aGVuKFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50IGFuIG9iamVjdCBjYXJyeWluZyBpbmZvcm1hdGlvbiBhYm91dCBsb2FkZWQgcm91dGVcclxuICAgICAqIHR5cGljYWxseSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB2aWV3IG1vZGVsLCBjaGlsZENvbnRhaW5lciwgdmlldyBhbmQgcm91dGVyXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIChjb21wb25lbnQpIHtcclxuICAgICAgICB2YXIgdmlld01vZGVsID0gY29tcG9uZW50LnZpZXdNb2RlbCwgY2hpbGRDb250YWluZXIgPSBjb21wb25lbnQuY2hpbGRDb250YWluZXI7XHJcbiAgICAgICAgY29tcG9uZW50LnJvdXRlciA9IHJvdXRlcjtcclxuICAgICAgICBjb21wb25lbnQuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIGlmICgnY29uZmlndXJlUm91dGVyJyBpbiB2aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkUm91dGVyXzEgPSBjaGlsZENvbnRhaW5lci5nZXRDaGlsZFJvdXRlcigpO1xyXG4gICAgICAgICAgICBjb21wb25lbnQuY2hpbGRSb3V0ZXIgPSBjaGlsZFJvdXRlcl8xO1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRSb3V0ZXJfMVxyXG4gICAgICAgICAgICAgICAgLmNvbmZpZ3VyZShmdW5jdGlvbiAoYykgeyByZXR1cm4gdmlld01vZGVsLmNvbmZpZ3VyZVJvdXRlcihjLCBjaGlsZFJvdXRlcl8xLCBsaWZlY3ljbGVBcmdzWzBdLCBsaWZlY3ljbGVBcmdzWzFdLCBsaWZlY3ljbGVBcmdzWzJdKTsgfSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbXBvbmVudDsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XHJcbiAgICB9KTtcclxufTtcblxuLyoqXHJcbiAqIEFic3RyYWN0IGNsYXNzIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdmlldyAvIHZpZXcgbW9kZWwgZnJvbSBhIHJvdXRlIGNvbmZpZ1xyXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gYGF1cmVsaWEtdGVtcGxhdGluZy1yb3V0ZXJgXHJcbiAqL1xyXG52YXIgUm91dGVMb2FkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSb3V0ZUxvYWRlcigpIHtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCBhIHJvdXRlIGNvbmZpZyBiYXNlZCBvbiBpdHMgdmlld21vZGVsIC8gdmlldyBjb25maWd1cmF0aW9uXHJcbiAgICAgKi9cclxuICAgIC8vIHJldHVybiB0eXBpbmc6IHJldHVybiB0eXBpbmdzIHVzZWQgdG8gYmUgbmV2ZXJcclxuICAgIC8vIGFzIGl0IHdhcyBhIHRocm93LiBDaGFuZ2luZyBpdCB0byBQcm9taXNlPGFueT4gc2hvdWxkIG5vdCBjYXVzZSBhbnkgaXNzdWVzXHJcbiAgICBSb3V0ZUxvYWRlci5wcm90b3R5cGUubG9hZFJvdXRlID0gZnVuY3Rpb24gKHJvdXRlciwgY29uZmlnLCBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvdXRlIGxvYWRlcnMgbXVzdCBpbXBsZW1lbnQgXCJsb2FkUm91dGUocm91dGVyLCBjb25maWcsIG5hdmlnYXRpb25JbnN0cnVjdGlvbilcIi4nKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUm91dGVMb2FkZXI7XHJcbn0oKSk7XG5cbi8qKlxyXG4gKiBBIHBpcGVsaW5lIHN0ZXAgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYSByb3V0ZSBjb25maWcgb2YgYSBuYXZpZ2F0aW9uIGluc3RydWN0aW9uXHJcbiAqL1xyXG52YXIgTG9hZFJvdXRlU3RlcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIExvYWRSb3V0ZVN0ZXAocm91dGVMb2FkZXIpIHtcclxuICAgICAgICB0aGlzLnJvdXRlTG9hZGVyID0gcm91dGVMb2FkZXI7XHJcbiAgICB9XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIExvYWRSb3V0ZVN0ZXAuaW5qZWN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW1JvdXRlTG9hZGVyXTsgfTtcclxuICAgIC8qKlxyXG4gICAgICogUnVuIHRoZSBpbnRlcm5hbCB0byBsb2FkIHJvdXRlIGNvbmZpZyBvZiBhIG5hdmlnYXRpb24gaW5zdHJ1Y3Rpb24gdG8gcHJlcGFyZSBmb3IgbmV4dCBzdGVwcyBpbiB0aGUgcGlwZWxpbmVcclxuICAgICAqL1xyXG4gICAgTG9hZFJvdXRlU3RlcC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKG5hdmlnYXRpb25JbnN0cnVjdGlvbiwgbmV4dCkge1xyXG4gICAgICAgIHJldHVybiBsb2FkTmV3Um91dGUodGhpcy5yb3V0ZUxvYWRlciwgbmF2aWdhdGlvbkluc3RydWN0aW9uKVxyXG4gICAgICAgICAgICAudGhlbihuZXh0LCBuZXh0LmNhbmNlbCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIExvYWRSb3V0ZVN0ZXA7XHJcbn0oKSk7XG5cbi8qKlxyXG4gKiBBIHBpcGVsaW5lIHN0ZXAgZm9yIGluc3RydWN0aW5nIGEgcGllcGxpbmUgdG8gY29tbWl0IGNoYW5nZXMgb24gYSBuYXZpZ2F0aW9uIGluc3RydWN0aW9uXHJcbiAqL1xyXG52YXIgQ29tbWl0Q2hhbmdlc1N0ZXAgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb21taXRDaGFuZ2VzU3RlcCgpIHtcclxuICAgIH1cclxuICAgIENvbW1pdENoYW5nZXNTdGVwLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBuZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRpb25JbnN0cnVjdGlvblxyXG4gICAgICAgICAgICAuX2NvbW1pdENoYW5nZXMoLyp3YWl0IHRvIHN3YXA/Ki8gdHJ1ZSlcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24uX3VwZGF0ZVRpdGxlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIENvbW1pdENoYW5nZXNTdGVwO1xyXG59KCkpO1xuXG4vKipcclxuICogQW4gb3B0aW9uYWwgaW50ZXJmYWNlIGRlc2NyaWJpbmcgdGhlIGF2YWlsYWJsZSBhY3RpdmF0aW9uIHN0cmF0ZWdpZXMuXHJcbiAqIEBpbnRlcm5hbCBVc2VkIGludGVybmFsbHkuXHJcbiAqL1xyXG52YXIgSW50ZXJuYWxBY3RpdmF0aW9uU3RyYXRlZ3k7XHJcbihmdW5jdGlvbiAoSW50ZXJuYWxBY3RpdmF0aW9uU3RyYXRlZ3kpIHtcclxuICAgIC8qKlxyXG4gICAgICogUmV1c2UgdGhlIGV4aXN0aW5nIHZpZXcgbW9kZWwsIHdpdGhvdXQgaW52b2tpbmcgUm91dGVyIGxpZmVjeWNsZSBob29rcy5cclxuICAgICAqL1xyXG4gICAgSW50ZXJuYWxBY3RpdmF0aW9uU3RyYXRlZ3lbXCJOb0NoYW5nZVwiXSA9IFwibm8tY2hhbmdlXCI7XHJcbiAgICAvKipcclxuICAgICAqIFJldXNlIHRoZSBleGlzdGluZyB2aWV3IG1vZGVsLCBpbnZva2luZyBSb3V0ZXIgbGlmZWN5Y2xlIGhvb2tzLlxyXG4gICAgICovXHJcbiAgICBJbnRlcm5hbEFjdGl2YXRpb25TdHJhdGVneVtcIkludm9rZUxpZmVjeWNsZVwiXSA9IFwiaW52b2tlLWxpZmVjeWNsZVwiO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBsYWNlIHRoZSBleGlzdGluZyB2aWV3IG1vZGVsLCBpbnZva2luZyBSb3V0ZXIgbGlmZWN5Y2xlIGhvb2tzLlxyXG4gICAgICovXHJcbiAgICBJbnRlcm5hbEFjdGl2YXRpb25TdHJhdGVneVtcIlJlcGxhY2VcIl0gPSBcInJlcGxhY2VcIjtcclxufSkoSW50ZXJuYWxBY3RpdmF0aW9uU3RyYXRlZ3kgfHwgKEludGVybmFsQWN0aXZhdGlvblN0cmF0ZWd5ID0ge30pKTtcclxuLyoqXHJcbiAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBhY3RpdmF0aW5nIG1vZHVsZXMgZHVyaW5nIG5hdmlnYXRpb24uXHJcbiAqL1xyXG4vLyBrZXB0IGZvciBjb21wYXQgcmVhc29uXHJcbnZhciBhY3RpdmF0aW9uU3RyYXRlZ3kgPSB7XHJcbiAgICBub0NoYW5nZTogXCJuby1jaGFuZ2VcIiAvKiBOb0NoYW5nZSAqLyxcclxuICAgIGludm9rZUxpZmVjeWNsZTogXCJpbnZva2UtbGlmZWN5Y2xlXCIgLyogSW52b2tlTGlmZWN5Y2xlICovLFxyXG4gICAgcmVwbGFjZTogXCJyZXBsYWNlXCIgLyogUmVwbGFjZSAqL1xyXG59O1xuXG4vKipcclxuICogUmVjdXJzaXZlbHkgZmluZCBsaXN0IG9mIGRlYWN0aXZhdGUtYWJsZSB2aWV3IG1vZGVsc1xyXG4gKiBhbmQgaW52b2tlIHRoZSBlaXRoZXIgJ2NhbkRlYWN0aXZhdGUnIG9yICdkZWFjdGl2YXRlJyBvbiBlYWNoXHJcbiAqIEBpbnRlcm5hbCBleHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nXHJcbiAqL1xyXG52YXIgcHJvY2Vzc0RlYWN0aXZhdGFibGUgPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBjYWxsYmFja05hbWUsIG5leHQsIGlnbm9yZVJlc3VsdCkge1xyXG4gICAgdmFyIHBsYW4gPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucGxhbjtcclxuICAgIHZhciBpbmZvcyA9IGZpbmREZWFjdGl2YXRhYmxlKHBsYW4sIGNhbGxiYWNrTmFtZSk7XHJcbiAgICB2YXIgaSA9IGluZm9zLmxlbmd0aDsgLy8gcXVlcnkgZnJvbSBpbnNpZGUgb3V0XHJcbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbCkge1xyXG4gICAgICAgIGlmIChpZ25vcmVSZXN1bHQgfHwgc2hvdWxkQ29udGludWUodmFsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dC5jYW5jZWwodmFsKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGl0ZXJhdGUoKSB7XHJcbiAgICAgICAgaWYgKGktLSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZXdNb2RlbCA9IGluZm9zW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZpZXdNb2RlbFtjYWxsYmFja05hbWVdKG5hdmlnYXRpb25JbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1BvdGVudGlhbChyZXN1bHQsIGluc3BlY3QsIG5leHQuY2FuY2VsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmNhbmNlbChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uLnJvdXRlci5jb3VsZERlYWN0aXZhdGUgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlcmF0ZSgpO1xyXG59O1xyXG4vKipcclxuICogUmVjdXJzaXZlbHkgZmluZCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZGVhY3RpdmF0ZS1hYmxlIHZpZXcgbW9kZWxzXHJcbiAqIEBpbnRlcm5hbCBleHBvcnRlZCBmb3IgdW5pdCB0ZXN0aW5nXHJcbiAqL1xyXG52YXIgZmluZERlYWN0aXZhdGFibGUgPSBmdW5jdGlvbiAocGxhbiwgY2FsbGJhY2tOYW1lLCBsaXN0KSB7XHJcbiAgICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7IGxpc3QgPSBbXTsgfVxyXG4gICAgZm9yICh2YXIgdmlld1BvcnROYW1lIGluIHBsYW4pIHtcclxuICAgICAgICB2YXIgdmlld1BvcnRQbGFuID0gcGxhblt2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgIHZhciBwcmV2Q29tcG9uZW50ID0gdmlld1BvcnRQbGFuLnByZXZDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKCh2aWV3UG9ydFBsYW4uc3RyYXRlZ3kgPT09IGFjdGl2YXRpb25TdHJhdGVneS5pbnZva2VMaWZlY3ljbGUgfHwgdmlld1BvcnRQbGFuLnN0cmF0ZWd5ID09PSBhY3RpdmF0aW9uU3RyYXRlZ3kucmVwbGFjZSlcclxuICAgICAgICAgICAgJiYgcHJldkNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB2YXIgdmlld01vZGVsID0gcHJldkNvbXBvbmVudC52aWV3TW9kZWw7XHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFja05hbWUgaW4gdmlld01vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBsaXN0LnB1c2godmlld01vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlld1BvcnRQbGFuLnN0cmF0ZWd5ID09PSBhY3RpdmF0aW9uU3RyYXRlZ3kucmVwbGFjZSAmJiBwcmV2Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIGFkZFByZXZpb3VzRGVhY3RpdmF0YWJsZShwcmV2Q29tcG9uZW50LCBjYWxsYmFja05hbWUsIGxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2aWV3UG9ydFBsYW4uY2hpbGROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgZmluZERlYWN0aXZhdGFibGUodmlld1BvcnRQbGFuLmNoaWxkTmF2aWdhdGlvbkluc3RydWN0aW9uLnBsYW4sIGNhbGxiYWNrTmFtZSwgbGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3Q7XHJcbn07XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIGFkZFByZXZpb3VzRGVhY3RpdmF0YWJsZSA9IGZ1bmN0aW9uIChjb21wb25lbnQsIGNhbGxiYWNrTmFtZSwgbGlzdCkge1xyXG4gICAgdmFyIGNoaWxkUm91dGVyID0gY29tcG9uZW50LmNoaWxkUm91dGVyO1xyXG4gICAgaWYgKGNoaWxkUm91dGVyICYmIGNoaWxkUm91dGVyLmN1cnJlbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciB2aWV3UG9ydEluc3RydWN0aW9ucyA9IGNoaWxkUm91dGVyLmN1cnJlbnRJbnN0cnVjdGlvbi52aWV3UG9ydEluc3RydWN0aW9ucztcclxuICAgICAgICBmb3IgKHZhciB2aWV3UG9ydE5hbWUgaW4gdmlld1BvcnRJbnN0cnVjdGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIHZpZXdQb3J0SW5zdHJ1Y3Rpb24gPSB2aWV3UG9ydEluc3RydWN0aW9uc1t2aWV3UG9ydE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgcHJldkNvbXBvbmVudCA9IHZpZXdQb3J0SW5zdHJ1Y3Rpb24uY29tcG9uZW50O1xyXG4gICAgICAgICAgICB2YXIgcHJldlZpZXdNb2RlbCA9IHByZXZDb21wb25lbnQudmlld01vZGVsO1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tOYW1lIGluIHByZXZWaWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIGxpc3QucHVzaChwcmV2Vmlld01vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhZGRQcmV2aW91c0RlYWN0aXZhdGFibGUocHJldkNvbXBvbmVudCwgY2FsbGJhY2tOYW1lLCBsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIHByb2Nlc3NBY3RpdmF0YWJsZSA9IGZ1bmN0aW9uIChuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIGNhbGxiYWNrTmFtZSwgbmV4dCwgaWdub3JlUmVzdWx0KSB7XHJcbiAgICB2YXIgaW5mb3MgPSBmaW5kQWN0aXZhdGFibGUobmF2aWdhdGlvbkluc3RydWN0aW9uLCBjYWxsYmFja05hbWUpO1xyXG4gICAgdmFyIGxlbmd0aCA9IGluZm9zLmxlbmd0aDtcclxuICAgIHZhciBpID0gLTE7IC8vIHF1ZXJ5IGZyb20gdG9wIGRvd25cclxuICAgIGZ1bmN0aW9uIGluc3BlY3QodmFsLCByb3V0ZXIpIHtcclxuICAgICAgICBpZiAoaWdub3JlUmVzdWx0IHx8IHNob3VsZENvbnRpbnVlKHZhbCwgcm91dGVyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dC5jYW5jZWwodmFsKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGl0ZXJhdGUoKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIGkrKztcclxuICAgICAgICBpZiAoaSA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfMSA9IGluZm9zW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IChfYSA9IGN1cnJlbnRfMS52aWV3TW9kZWwpW2NhbGxiYWNrTmFtZV0uYXBwbHkoX2EsIGN1cnJlbnRfMS5saWZlY3ljbGVBcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzUG90ZW50aWFsKHJlc3VsdCwgZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gaW5zcGVjdCh2YWwsIGN1cnJlbnRfMS5yb3V0ZXIpOyB9LCBuZXh0LmNhbmNlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5jYW5jZWwoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlcmF0ZSgpO1xyXG59O1xyXG4vKipcclxuICogRmluZCBsaXN0IG9mIGFjdGl2YXRhYmxlIHZpZXcgbW9kZWwgYW5kIGFkZCB0byBsaXN0ICgzcmQgcGFyYW1ldGVyKVxyXG4gKiBAaW50ZXJuYWwgZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdGluZ1xyXG4gKi9cclxudmFyIGZpbmRBY3RpdmF0YWJsZSA9IGZ1bmN0aW9uIChuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIGNhbGxiYWNrTmFtZSwgbGlzdCwgcm91dGVyKSB7XHJcbiAgICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7IGxpc3QgPSBbXTsgfVxyXG4gICAgdmFyIHBsYW4gPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucGxhbjtcclxuICAgIE9iamVjdFxyXG4gICAgICAgIC5rZXlzKHBsYW4pXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHZpZXdQb3J0TmFtZSkge1xyXG4gICAgICAgIHZhciB2aWV3UG9ydFBsYW4gPSBwbGFuW3ZpZXdQb3J0TmFtZV07XHJcbiAgICAgICAgdmFyIHZpZXdQb3J0SW5zdHJ1Y3Rpb24gPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24udmlld1BvcnRJbnN0cnVjdGlvbnNbdmlld1BvcnROYW1lXTtcclxuICAgICAgICB2YXIgdmlld1BvcnRDb21wb25lbnQgPSB2aWV3UG9ydEluc3RydWN0aW9uLmNvbXBvbmVudDtcclxuICAgICAgICB2YXIgdmlld01vZGVsID0gdmlld1BvcnRDb21wb25lbnQudmlld01vZGVsO1xyXG4gICAgICAgIGlmICgodmlld1BvcnRQbGFuLnN0cmF0ZWd5ID09PSBhY3RpdmF0aW9uU3RyYXRlZ3kuaW52b2tlTGlmZWN5Y2xlXHJcbiAgICAgICAgICAgIHx8IHZpZXdQb3J0UGxhbi5zdHJhdGVneSA9PT0gYWN0aXZhdGlvblN0cmF0ZWd5LnJlcGxhY2UpXHJcbiAgICAgICAgICAgICYmIGNhbGxiYWNrTmFtZSBpbiB2aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgbGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHZpZXdNb2RlbDogdmlld01vZGVsLFxyXG4gICAgICAgICAgICAgICAgbGlmZWN5Y2xlQXJnczogdmlld1BvcnRJbnN0cnVjdGlvbi5saWZlY3ljbGVBcmdzLFxyXG4gICAgICAgICAgICAgICAgcm91dGVyOiByb3V0ZXJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZE5hdkluc3RydWN0aW9uID0gdmlld1BvcnRQbGFuLmNoaWxkTmF2aWdhdGlvbkluc3RydWN0aW9uO1xyXG4gICAgICAgIGlmIChjaGlsZE5hdkluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGZpbmRBY3RpdmF0YWJsZShjaGlsZE5hdkluc3RydWN0aW9uLCBjYWxsYmFja05hbWUsIGxpc3QsIHZpZXdQb3J0Q29tcG9uZW50LmNoaWxkUm91dGVyIHx8IHJvdXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbGlzdDtcclxufTtcclxudmFyIHNob3VsZENvbnRpbnVlID0gZnVuY3Rpb24gKG91dHB1dCwgcm91dGVyKSB7XHJcbiAgICBpZiAob3V0cHV0IGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNOYXZpZ2F0aW9uQ29tbWFuZChvdXRwdXQpKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXQuc2V0Um91dGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG91dHB1dC5zZXRSb3V0ZXIocm91dGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhb3V0cHV0LnNob3VsZENvbnRpbnVlUHJvY2Vzc2luZztcclxuICAgIH1cclxuICAgIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufTtcclxuLyoqXHJcbiAqIHdyYXBzIGEgc3Vic2NyaXB0aW9uLCBhbGxvd2luZyB1bnN1YnNjcmliZSBjYWxscyBldmVuIGlmXHJcbiAqIHRoZSBmaXJzdCB2YWx1ZSBjb21lcyBzeW5jaHJvbm91c2x5XHJcbiAqL1xyXG52YXIgU2FmZVN1YnNjcmlwdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uRnVuYykge1xyXG4gICAgICAgIHRoaXMuX3N1YnNjcmliZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbkZ1bmModGhpcyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9zdWJzY3JpYmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2FmZVN1YnNjcmlwdGlvbi5wcm90b3R5cGUsIFwic3Vic2NyaWJlZFwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmVkO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgU2FmZVN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmliZWQgJiYgdGhpcy5fc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVkID0gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpcHRpb247XHJcbn0oKSk7XHJcbi8qKlxyXG4gKiBBIGZ1bmN0aW9uIHRvIHByb2Nlc3MgcmV0dXJuIHZhbHVlIGZyb20gYGFjdGl2YXRlYC9gY2FuQWN0aXZhdGVgIHN0ZXBzXHJcbiAqIFN1cHBvcnRzIG9ic2VydmFibGUvcHJvbWlzZVxyXG4gKlxyXG4gKiBGb3Igb2JzZXJ2YWJsZSwgcmVzb2x2ZSBhdCBmaXJzdCBuZXh0KCkgb3Igb24gY29tcGxldGUoKVxyXG4gKi9cclxudmFyIHByb2Nlc3NQb3RlbnRpYWwgPSBmdW5jdGlvbiAob2JqLCByZXNvbHZlLCByZWplY3QpIHtcclxuICAgIC8vIGlmIHByb21pc2UgbGlrZVxyXG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9iaikudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgb2JzZXJ2YWJsZVxyXG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHZhciBvYnNfMSA9IG9iajtcclxuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpcHRpb24oZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gb2JzXzEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Yi5zdWJzY3JpYmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViLnN1YnNjcmliZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Yi5zdWJzY3JpYmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgfVxyXG4gICAgLy8gZWxzZSBqdXN0IHJlc29sdmVcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmUob2JqKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xyXG4gICAgfVxyXG59O1xuXG4vKipcclxuICogQSBwaXBlbGluZSBzdGVwIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGFuZCBhY3RpdmF0aW5nIG1ldGhvZCBgY2FuRGVhY3RpdmF0ZWAgb24gYSB2aWV3IG1vZGVsIG9mIGEgcm91dGVcclxuICovXHJcbnZhciBDYW5EZWFjdGl2YXRlUHJldmlvdXNTdGVwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ2FuRGVhY3RpdmF0ZVByZXZpb3VzU3RlcCgpIHtcclxuICAgIH1cclxuICAgIENhbkRlYWN0aXZhdGVQcmV2aW91c1N0ZXAucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIG5leHQpIHtcclxuICAgICAgICByZXR1cm4gcHJvY2Vzc0RlYWN0aXZhdGFibGUobmF2aWdhdGlvbkluc3RydWN0aW9uLCAnY2FuRGVhY3RpdmF0ZScsIG5leHQpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBDYW5EZWFjdGl2YXRlUHJldmlvdXNTdGVwO1xyXG59KCkpO1xyXG4vKipcclxuICogQSBwaXBlbGluZSBzdGVwIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGFuZCBhY3RpdmF0aW5nIG1ldGhvZCBgY2FuQWN0aXZhdGVgIG9uIGEgdmlldyBtb2RlbCBvZiBhIHJvdXRlXHJcbiAqL1xyXG52YXIgQ2FuQWN0aXZhdGVOZXh0U3RlcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENhbkFjdGl2YXRlTmV4dFN0ZXAoKSB7XHJcbiAgICB9XHJcbiAgICBDYW5BY3RpdmF0ZU5leHRTdGVwLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBuZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NBY3RpdmF0YWJsZShuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sICdjYW5BY3RpdmF0ZScsIG5leHQpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBDYW5BY3RpdmF0ZU5leHRTdGVwO1xyXG59KCkpO1xyXG4vKipcclxuICogQSBwaXBlbGluZSBzdGVwIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGFuZCBhY3RpdmF0aW5nIG1ldGhvZCBgZGVhY3RpdmF0ZWAgb24gYSB2aWV3IG1vZGVsIG9mIGEgcm91dGVcclxuICovXHJcbnZhciBEZWFjdGl2YXRlUHJldmlvdXNTdGVwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRGVhY3RpdmF0ZVByZXZpb3VzU3RlcCgpIHtcclxuICAgIH1cclxuICAgIERlYWN0aXZhdGVQcmV2aW91c1N0ZXAucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIG5leHQpIHtcclxuICAgICAgICByZXR1cm4gcHJvY2Vzc0RlYWN0aXZhdGFibGUobmF2aWdhdGlvbkluc3RydWN0aW9uLCAnZGVhY3RpdmF0ZScsIG5leHQsIHRydWUpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBEZWFjdGl2YXRlUHJldmlvdXNTdGVwO1xyXG59KCkpO1xyXG4vKipcclxuICogQSBwaXBlbGluZSBzdGVwIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGFuZCBhY3RpdmF0aW5nIG1ldGhvZCBgYWN0aXZhdGVgIG9uIGEgdmlldyBtb2RlbCBvZiBhIHJvdXRlXHJcbiAqL1xyXG52YXIgQWN0aXZhdGVOZXh0U3RlcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFjdGl2YXRlTmV4dFN0ZXAoKSB7XHJcbiAgICB9XHJcbiAgICBBY3RpdmF0ZU5leHRTdGVwLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAobmF2aWdhdGlvbkluc3RydWN0aW9uLCBuZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NBY3RpdmF0YWJsZShuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sICdhY3RpdmF0ZScsIG5leHQsIHRydWUpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBBY3RpdmF0ZU5leHRTdGVwO1xyXG59KCkpO1xuXG4vKipcclxuICogQSBtdWx0aS1zbG90cyBQaXBlbGluZSBQbGFjZWhvbGRlciBTdGVwIGZvciBob29raW5nIGludG8gYSBwaXBlbGluZSBleGVjdXRpb25cclxuICovXHJcbnZhciBQaXBlbGluZVNsb3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBQaXBlbGluZVNsb3QoY29udGFpbmVyLCBuYW1lLCBhbGlhcykge1xyXG4gICAgICAgIHRoaXMuc3RlcHMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLnNsb3ROYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLnNsb3RBbGlhcyA9IGFsaWFzO1xyXG4gICAgfVxyXG4gICAgUGlwZWxpbmVTbG90LnByb3RvdHlwZS5nZXRTdGVwcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4gX3RoaXMuY29udGFpbmVyLmdldCh4KTsgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFBpcGVsaW5lU2xvdDtcclxufSgpKTtcclxuLyoqXHJcbiAqIENsYXNzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgbmF2aWdhdGlvbiBwaXBlbGluZS5cclxuICovXHJcbnZhciBQaXBlbGluZVByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUGlwZWxpbmVQcm92aWRlcihjb250YWluZXIpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgICAgICB0aGlzLnN0ZXBzID0gW1xyXG4gICAgICAgICAgICBCdWlsZE5hdmlnYXRpb25QbGFuU3RlcCxcclxuICAgICAgICAgICAgQ2FuRGVhY3RpdmF0ZVByZXZpb3VzU3RlcCxcclxuICAgICAgICAgICAgTG9hZFJvdXRlU3RlcCxcclxuICAgICAgICAgICAgY3JlYXRlUGlwZWxpbmVTbG90KGNvbnRhaW5lciwgXCJhdXRob3JpemVcIiAvKiBBdXRob3JpemUgKi8pLFxyXG4gICAgICAgICAgICBDYW5BY3RpdmF0ZU5leHRTdGVwLFxyXG4gICAgICAgICAgICBjcmVhdGVQaXBlbGluZVNsb3QoY29udGFpbmVyLCBcInByZUFjdGl2YXRlXCIgLyogUHJlQWN0aXZhdGUgKi8sICdtb2RlbGJpbmQnKSxcclxuICAgICAgICAgICAgLy8gTk9URTogYXBwIHN0YXRlIGNoYW5nZXMgc3RhcnQgYmVsb3cgLSBwb2ludCBvZiBubyByZXR1cm5cclxuICAgICAgICAgICAgRGVhY3RpdmF0ZVByZXZpb3VzU3RlcCxcclxuICAgICAgICAgICAgQWN0aXZhdGVOZXh0U3RlcCxcclxuICAgICAgICAgICAgY3JlYXRlUGlwZWxpbmVTbG90KGNvbnRhaW5lciwgXCJwcmVSZW5kZXJcIiAvKiBQcmVSZW5kZXIgKi8sICdwcmVjb21taXQnKSxcclxuICAgICAgICAgICAgQ29tbWl0Q2hhbmdlc1N0ZXAsXHJcbiAgICAgICAgICAgIGNyZWF0ZVBpcGVsaW5lU2xvdChjb250YWluZXIsIFwicG9zdFJlbmRlclwiIC8qIFBvc3RSZW5kZXIgKi8sICdwb3N0Y29tcGxldGUnKVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIFBpcGVsaW5lUHJvdmlkZXIuaW5qZWN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW0NvbnRhaW5lcl07IH07XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSB0aGUgbmF2aWdhdGlvbiBwaXBlbGluZS5cclxuICAgICAqL1xyXG4gICAgUGlwZWxpbmVQcm92aWRlci5wcm90b3R5cGUuY3JlYXRlUGlwZWxpbmUgPSBmdW5jdGlvbiAodXNlQ2FuRGVhY3RpdmF0ZVN0ZXApIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh1c2VDYW5EZWFjdGl2YXRlU3RlcCA9PT0gdm9pZCAwKSB7IHVzZUNhbkRlYWN0aXZhdGVTdGVwID0gdHJ1ZTsgfVxyXG4gICAgICAgIHZhciBwaXBlbGluZSA9IG5ldyBQaXBlbGluZSgpO1xyXG4gICAgICAgIHRoaXMuc3RlcHMuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCkge1xyXG4gICAgICAgICAgICBpZiAodXNlQ2FuRGVhY3RpdmF0ZVN0ZXAgfHwgc3RlcCAhPT0gQ2FuRGVhY3RpdmF0ZVByZXZpb3VzU3RlcCkge1xyXG4gICAgICAgICAgICAgICAgcGlwZWxpbmUuYWRkU3RlcChfdGhpcy5jb250YWluZXIuZ2V0KHN0ZXApKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwaXBlbGluZTtcclxuICAgIH07XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIFBpcGVsaW5lUHJvdmlkZXIucHJvdG90eXBlLl9maW5kU3RlcCA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgLy8gU3RlcHMgdGhhdCBhcmUgbm90IFBpcGVsaW5lU2xvdHMgYXJlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucywgYW5kIHRoZXkgd2lsbCBhdXRvbWF0aWNhbGx5IGZhaWwuIFByb2JhYmx5LlxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBzLmZpbmQoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguc2xvdE5hbWUgPT09IG5hbWUgfHwgeC5zbG90QWxpYXMgPT09IG5hbWU7IH0pO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIHN0ZXAgaW50byB0aGUgcGlwZWxpbmUgYXQgYSBrbm93biBzbG90IGxvY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBQaXBlbGluZVByb3ZpZGVyLnByb3RvdHlwZS5hZGRTdGVwID0gZnVuY3Rpb24gKG5hbWUsIHN0ZXApIHtcclxuICAgICAgICB2YXIgZm91bmQgPSB0aGlzLl9maW5kU3RlcChuYW1lKTtcclxuICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgdmFyIHNsb3RTdGVwcyA9IGZvdW5kLnN0ZXBzO1xyXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGR1cGxpY2F0ZXNcclxuICAgICAgICAgICAgaWYgKCFzbG90U3RlcHMuaW5jbHVkZXMoc3RlcCkpIHtcclxuICAgICAgICAgICAgICAgIHNsb3RTdGVwcy5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBpcGVsaW5lIHNsb3QgbmFtZTogXCIgKyBuYW1lICsgXCIuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBzdGVwIGZyb20gYSBzbG90IGluIHRoZSBwaXBlbGluZVxyXG4gICAgICovXHJcbiAgICBQaXBlbGluZVByb3ZpZGVyLnByb3RvdHlwZS5yZW1vdmVTdGVwID0gZnVuY3Rpb24gKG5hbWUsIHN0ZXApIHtcclxuICAgICAgICB2YXIgc2xvdCA9IHRoaXMuX2ZpbmRTdGVwKG5hbWUpO1xyXG4gICAgICAgIGlmIChzbG90KSB7XHJcbiAgICAgICAgICAgIHZhciBzbG90U3RlcHMgPSBzbG90LnN0ZXBzO1xyXG4gICAgICAgICAgICBzbG90U3RlcHMuc3BsaWNlKHNsb3RTdGVwcy5pbmRleE9mKHN0ZXApLCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYWxsIHN0ZXBzIGZyb20gYSBzbG90IGluIHRoZSBwaXBlbGluZVxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIFBpcGVsaW5lUHJvdmlkZXIucHJvdG90eXBlLl9jbGVhclN0ZXBzID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSAnJzsgfVxyXG4gICAgICAgIHZhciBzbG90ID0gdGhpcy5fZmluZFN0ZXAobmFtZSk7XHJcbiAgICAgICAgaWYgKHNsb3QpIHtcclxuICAgICAgICAgICAgc2xvdC5zdGVwcyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyBhbGwgcGlwZWxpbmUgc2xvdHNcclxuICAgICAqL1xyXG4gICAgUGlwZWxpbmVQcm92aWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYXJTdGVwcyhcImF1dGhvcml6ZVwiIC8qIEF1dGhvcml6ZSAqLyk7XHJcbiAgICAgICAgdGhpcy5fY2xlYXJTdGVwcyhcInByZUFjdGl2YXRlXCIgLyogUHJlQWN0aXZhdGUgKi8pO1xyXG4gICAgICAgIHRoaXMuX2NsZWFyU3RlcHMoXCJwcmVSZW5kZXJcIiAvKiBQcmVSZW5kZXIgKi8pO1xyXG4gICAgICAgIHRoaXMuX2NsZWFyU3RlcHMoXCJwb3N0UmVuZGVyXCIgLyogUG9zdFJlbmRlciAqLyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFBpcGVsaW5lUHJvdmlkZXI7XHJcbn0oKSk7XHJcbi8qKkBpbnRlcm5hbCAqL1xyXG52YXIgY3JlYXRlUGlwZWxpbmVTbG90ID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgbmFtZSwgYWxpYXMpIHtcclxuICAgIHJldHVybiBuZXcgUGlwZWxpbmVTbG90KGNvbnRhaW5lciwgbmFtZSwgYWxpYXMpO1xyXG59O1xuXG52YXIgbG9nZ2VyID0gZ2V0TG9nZ2VyKCdhcHAtcm91dGVyJyk7XHJcbi8qKlxyXG4gKiBUaGUgbWFpbiBhcHBsaWNhdGlvbiByb3V0ZXIuXHJcbiAqL1xyXG52YXIgQXBwUm91dGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKEFwcFJvdXRlciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEFwcFJvdXRlcihjb250YWluZXIsIGhpc3RvcnksIHBpcGVsaW5lUHJvdmlkZXIsIGV2ZW50cykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGNvbnRhaW5lciwgaGlzdG9yeSkgfHwgdGhpcztcclxuICAgICAgICBfdGhpcy5waXBlbGluZVByb3ZpZGVyID0gcGlwZWxpbmVQcm92aWRlcjtcclxuICAgICAgICBfdGhpcy5ldmVudHMgPSBldmVudHM7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBBcHBSb3V0ZXIuaW5qZWN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW0NvbnRhaW5lciwgSGlzdG9yeSwgUGlwZWxpbmVQcm92aWRlciwgRXZlbnRBZ2dyZWdhdG9yXTsgfTtcclxuICAgIC8qKlxyXG4gICAgICogRnVsbHkgcmVzZXRzIHRoZSByb3V0ZXIncyBpbnRlcm5hbCBzdGF0ZS4gUHJpbWFyaWx5IHVzZWQgaW50ZXJuYWxseSBieSB0aGUgZnJhbWV3b3JrIHdoZW4gbXVsdGlwbGUgY2FsbHMgdG8gc2V0Um9vdCBhcmUgbWFkZS5cclxuICAgICAqIFVzZSB3aXRoIGNhdXRpb24gKGFjdHVhbGx5LCBhdm9pZCB1c2luZyB0aGlzKS4gRG8gbm90IHVzZSB0aGlzIHRvIHNpbXBseSBjaGFuZ2UgeW91ciBuYXZpZ2F0aW9uIG1vZGVsLlxyXG4gICAgICovXHJcbiAgICBBcHBSb3V0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLm1heEluc3RydWN0aW9uQ291bnQgPSAxMDtcclxuICAgICAgICBpZiAoIXRoaXMuX3F1ZXVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIExvYWRzIHRoZSBzcGVjaWZpZWQgVVJMLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB1cmwgVGhlIFVSTCBmcmFnbWVudCB0byBsb2FkLlxyXG4gICAgICovXHJcbiAgICBBcHBSb3V0ZXIucHJvdG90eXBlLmxvYWRVcmwgPSBmdW5jdGlvbiAodXJsKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuX2NyZWF0ZU5hdmlnYXRpb25JbnN0cnVjdGlvbih1cmwpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChpbnN0cnVjdGlvbikgeyByZXR1cm4gX3RoaXMuX3F1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOyB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3RvcmVQcmV2aW91c0xvY2F0aW9uKF90aGlzKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhIHZpZXdQb3J0IHRvIGJlIHVzZWQgYXMgYSByZW5kZXJpbmcgdGFyZ2V0IGZvciBhY3RpdmF0ZWQgcm91dGVzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2aWV3UG9ydCBUaGUgdmlld1BvcnQuIFRoaXMgaXMgdHlwaWNhbGx5IGEgPHJvdXRlci12aWV3Lz4gZWxlbWVudCBpbiBBdXJlbGlhIGRlZmF1bHQgaW1wbFxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHZpZXdQb3J0LiAnZGVmYXVsdCcgaWYgdW5zcGVjaWZpZWQuXHJcbiAgICAgKi9cclxuICAgIEFwcFJvdXRlci5wcm90b3R5cGUucmVnaXN0ZXJWaWV3UG9ydCA9IGZ1bmN0aW9uICh2aWV3UG9ydCwgbmFtZSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgLy8gaGF2aW5nIHN0cm9uZyB0eXBpbmcgd2l0aG91dCBjaGFuZ2luZyBwdWJsaWMgQVBJXHJcbiAgICAgICAgdmFyICR2aWV3UG9ydCA9IHZpZXdQb3J0O1xyXG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUucmVnaXN0ZXJWaWV3UG9ydC5jYWxsKHRoaXMsICR2aWV3UG9ydCwgbmFtZSk7XHJcbiAgICAgICAgLy8gYmVzaWRlIGFkZGluZyB2aWV3cG9ydCB0byB0aGUgcmVnaXN0cnkgb2YgdGhpcyBpbnN0YW5jZVxyXG4gICAgICAgIC8vIEFwcFJvdXRlciBhbHNvIGNvbmZpZ3VyZSByb3V0aW5nL2hpc3RvcnkgdG8gc3RhcnQgcm91dGluZyBmdW5jdGlvbmFsaXR5XHJcbiAgICAgICAgLy8gVGhlcmUgYXJlIHNpdHVhdGlvbiB3aGVyZSB0aGVyZSBhcmUgbW9yZSB0aGFuIDEgPHJvdXRlci12aWV3Lz4gZWxlbWVudCBhdCByb290IHZpZXdcclxuICAgICAgICAvLyBpbiB0aGF0IGNhc2UsIHN0aWxsIG9ubHkgYWN0aXZhdGUgb25jZSB2aWEgdGhlIGZvbGxvd2luZyBndWFyZFxyXG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICB2YXIgdmlld01vZGVsXzEgPSB0aGlzLl9maW5kVmlld01vZGVsKCR2aWV3UG9ydCk7XHJcbiAgICAgICAgICAgIGlmICgnY29uZmlndXJlUm91dGVyJyBpbiB2aWV3TW9kZWxfMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgPHJvdXRlci12aWV3Lz4gZWxlbWVudCBhdCByb290IHZpZXdcclxuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGlzIGZsYWcgdG8gZ3VhcmQgYWdhaW5zdCBjb25maWd1cmUgbWV0aG9kIGJlaW5nIGludm9rZWQgbXVsdGlwbGUgdGltZXNcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMgZmxhZyBpcyBzZXQgaW5zaWRlIG1ldGhvZCBjb25maWd1cmVcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0NvbmZpZ3VyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIHRoZSByZWFsIHJlc29sdmUgd2l0aCBhIG5vb3AgdG8gZ3VhcmFudGVlIHRoYXQgYW55IGFjdGlvbiBpbiBiYXNlIGNsYXNzIFJvdXRlclxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdvbid0IHJlc29sdmUgdGhlIGNvbmZpZ3VyZVByb21pc2UgcHJlbWF0dXJlbHlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x2ZUNvbmZpZ3VyZWRQcm9taXNlXzEgPSB0aGlzLl9yZXNvbHZlQ29uZmlndXJlZFByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUNvbmZpZ3VyZWRQcm9taXNlID0gZnVuY3Rpb24gKCkgeyB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25maWd1cmUoZnVuY3Rpb24gKGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc29sdmUodmlld01vZGVsXzEuY29uZmlndXJlUm91dGVyKGNvbmZpZywgX3RoaXMpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW4gaXNzdWUgd2l0aCBjb25maWd1cmUgaW50ZXJmYWNlLiBTaG91bGQgYmUgZml4ZWQgdGhlcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvZG86IGZpeCB0aGlzIHZpYSBjb25maWd1cmUgaW50ZXJmYWNlIGluIHJvdXRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVDb25maWd1cmVkUHJvbWlzZV8xKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2hlbiBhIHZpZXdwb3J0IGlzIGFkZGVkIGR5bmFtaWNhbGx5IHRvIGEgcm9vdCB2aWV3IHRoYXQgaXMgYWxyZWFkeSBhY3RpdmF0ZWRcclxuICAgICAgICAvLyBqdXN0IHByb2Nlc3MgdGhlIG5hdmlnYXRpb24gaW5zdHJ1Y3Rpb25cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVxdWV1ZUluc3RydWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFjdGl2YXRlcyB0aGUgcm91dGVyLiBUaGlzIGluc3RydWN0cyB0aGUgcm91dGVyIHRvIGJlZ2luIGxpc3RlbmluZyBmb3IgaGlzdG9yeSBjaGFuZ2VzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW1zIG9wdGlvbnMgVGhlIHNldCBvZiBvcHRpb25zIHRvIGFjdGl2YXRlIHRoZSByb3V0ZXIgd2l0aC5cclxuICAgICAqL1xyXG4gICAgQXBwUm91dGVyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAvLyByb3V0ZSBoYW5kbGVyIHByb3BlcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB1cmwgY2hhbmdlXHJcbiAgICAgICAgLy8gdGhlIGludGVyZmFjZSBvZiBhdXJlbGlhLWhpc3RvcnkgaXNuJ3QgY2xlYXIgb24gdGhpcyBwZXJzcGVjdGl2ZVxyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyByb3V0ZUhhbmRsZXI6IHRoaXMubG9hZFVybC5iaW5kKHRoaXMpIH0sIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LmFjdGl2YXRlKHRoaXMub3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5fZGVxdWV1ZUluc3RydWN0aW9uKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZWFjdGl2YXRlcyB0aGUgcm91dGVyLlxyXG4gICAgICovXHJcbiAgICBBcHBSb3V0ZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5kZWFjdGl2YXRlKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqQGludGVybmFsICovXHJcbiAgICBBcHBSb3V0ZXIucHJvdG90eXBlLl9xdWV1ZUluc3RydWN0aW9uID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ucmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIF90aGlzLl9xdWV1ZS51bnNoaWZ0KGluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgX3RoaXMuX2RlcXVldWVJbnN0cnVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8qKkBpbnRlcm5hbCAqL1xyXG4gICAgQXBwUm91dGVyLnByb3RvdHlwZS5fZGVxdWV1ZUluc3RydWN0aW9uID0gZnVuY3Rpb24gKGluc3RydWN0aW9uQ291bnQpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChpbnN0cnVjdGlvbkNvdW50ID09PSB2b2lkIDApIHsgaW5zdHJ1Y3Rpb25Db3VudCA9IDA7IH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc05hdmlnYXRpbmcgJiYgIWluc3RydWN0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRzIGNvbXBsYWlucyBhYm91dCBpbmNvbnNpc3RlbnQgcmV0dXJucyB3aXRob3V0IHZvaWQgMFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBfdGhpcy5fcXVldWUuc2hpZnQoKTtcclxuICAgICAgICAgICAgX3RoaXMuX3F1ZXVlLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIGlmICghaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIHRzIGNvbXBsYWlucyBhYm91dCBpbmNvbnNpc3RlbnQgcmV0dXJucyB3aXRob3V0IHZvaWQgMFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfdGhpcy5pc05hdmlnYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgbmF2dHJhY2tlciA9IF90aGlzLmhpc3RvcnkuZ2V0U3RhdGUoJ05hdmlnYXRpb25UcmFja2VyJyk7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50TmF2VHJhY2tlciA9IF90aGlzLmN1cnJlbnROYXZpZ2F0aW9uVHJhY2tlcjtcclxuICAgICAgICAgICAgaWYgKCFuYXZ0cmFja2VyICYmICFjdXJyZW50TmF2VHJhY2tlcikge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNOYXZpZ2F0aW5nRmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNOYXZpZ2F0aW5nTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghbmF2dHJhY2tlcikge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNOYXZpZ2F0aW5nTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghY3VycmVudE5hdlRyYWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmlzTmF2aWdhdGluZ1JlZnJlc2ggPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnROYXZUcmFja2VyIDwgbmF2dHJhY2tlcikge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNOYXZpZ2F0aW5nRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudE5hdlRyYWNrZXIgPiBuYXZ0cmFja2VyKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5pc05hdmlnYXRpbmdCYWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW5hdnRyYWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIG5hdnRyYWNrZXIgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaGlzdG9yeS5zZXRTdGF0ZSgnTmF2aWdhdGlvblRyYWNrZXInLCBuYXZ0cmFja2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50TmF2aWdhdGlvblRyYWNrZXIgPSBuYXZ0cmFja2VyO1xyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbi5wcmV2aW91c0luc3RydWN0aW9uID0gX3RoaXMuY3VycmVudEluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICB2YXIgbWF4SW5zdHJ1Y3Rpb25Db3VudCA9IF90aGlzLm1heEluc3RydWN0aW9uQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICghaW5zdHJ1Y3Rpb25Db3VudCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZXZlbnRzLnB1Ymxpc2goXCJyb3V0ZXI6bmF2aWdhdGlvbjpwcm9jZXNzaW5nXCIgLyogUHJvY2Vzc2luZyAqLywgeyBpbnN0cnVjdGlvbjogaW5zdHJ1Y3Rpb24gfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb25Db3VudCA9PT0gbWF4SW5zdHJ1Y3Rpb25Db3VudCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihpbnN0cnVjdGlvbkNvdW50ICsgMSArIFwiIG5hdmlnYXRpb24gaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBhdHRlbXB0ZWQgd2l0aG91dCBzdWNjZXNzLiBSZXN0b3JpbmcgbGFzdCBrbm93biBnb29kIGxvY2F0aW9uLlwiKTtcclxuICAgICAgICAgICAgICAgIHJlc3RvcmVQcmV2aW91c0xvY2F0aW9uKF90aGlzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fZGVxdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uQ291bnQgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbkNvdW50ID4gbWF4SW5zdHJ1Y3Rpb25Db3VudCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXhpbXVtIG5hdmlnYXRpb24gYXR0ZW1wdHMgZXhjZWVkZWQuIEdpdmluZyB1cC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGlwZWxpbmUgPSBfdGhpcy5waXBlbGluZVByb3ZpZGVyLmNyZWF0ZVBpcGVsaW5lKCFfdGhpcy5jb3VsZERlYWN0aXZhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGlwZWxpbmVcclxuICAgICAgICAgICAgICAgIC5ydW4oaW5zdHJ1Y3Rpb24pXHJcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7IHJldHVybiBwcm9jZXNzUmVzdWx0KGluc3RydWN0aW9uLCByZXN1bHQsIGluc3RydWN0aW9uQ291bnQsIF90aGlzKTsgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG91dHB1dDogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKGVycm9yKSB9O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeyByZXR1cm4gcmVzb2x2ZUluc3RydWN0aW9uKGluc3RydWN0aW9uLCByZXN1bHQsICEhaW5zdHJ1Y3Rpb25Db3VudCwgX3RoaXMpOyB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipAaW50ZXJuYWwgKi9cclxuICAgIEFwcFJvdXRlci5wcm90b3R5cGUuX2ZpbmRWaWV3TW9kZWwgPSBmdW5jdGlvbiAodmlld1BvcnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250YWluZXIudmlld01vZGVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci52aWV3TW9kZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2aWV3UG9ydC5jb250YWluZXIpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHZpZXdQb3J0LmNvbnRhaW5lcjtcclxuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci52aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci52aWV3TW9kZWwgPSBjb250YWluZXIudmlld01vZGVsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXIudmlld01vZGVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBBcHBSb3V0ZXI7XHJcbn0oUm91dGVyKSk7XHJcbnZhciBwcm9jZXNzUmVzdWx0ID0gZnVuY3Rpb24gKGluc3RydWN0aW9uLCByZXN1bHQsIGluc3RydWN0aW9uQ291bnQsIHJvdXRlcikge1xyXG4gICAgaWYgKCEocmVzdWx0ICYmICdjb21wbGV0ZWQnIGluIHJlc3VsdCAmJiAnb3V0cHV0JyBpbiByZXN1bHQpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xyXG4gICAgICAgIHJlc3VsdC5vdXRwdXQgPSBuZXcgRXJyb3IoXCJFeHBlY3RlZCByb3V0ZXIgcGlwZWxpbmUgdG8gcmV0dXJuIGEgbmF2aWdhdGlvbiByZXN1bHQsIGJ1dCBnb3QgW1wiICsgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSArIFwiXSBpbnN0ZWFkLlwiKTtcclxuICAgIH1cclxuICAgIHZhciBmaW5hbFJlc3VsdCA9IG51bGw7XHJcbiAgICB2YXIgbmF2aWdhdGlvbkNvbW1hbmRSZXN1bHQgPSBudWxsO1xyXG4gICAgaWYgKGlzTmF2aWdhdGlvbkNvbW1hbmQocmVzdWx0Lm91dHB1dCkpIHtcclxuICAgICAgICBuYXZpZ2F0aW9uQ29tbWFuZFJlc3VsdCA9IHJlc3VsdC5vdXRwdXQubmF2aWdhdGUocm91dGVyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGZpbmFsUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgIGlmICghcmVzdWx0LmNvbXBsZXRlZCkge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0Lm91dHB1dCBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IocmVzdWx0Lm91dHB1dC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN0b3JlUHJldmlvdXNMb2NhdGlvbihyb3V0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmF2aWdhdGlvbkNvbW1hbmRSZXN1bHQpXHJcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKF8pIHsgcmV0dXJuIHJvdXRlci5fZGVxdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uQ291bnQgKyAxKTsgfSlcclxuICAgICAgICAudGhlbihmdW5jdGlvbiAoaW5uZXJSZXN1bHQpIHsgcmV0dXJuIGZpbmFsUmVzdWx0IHx8IGlubmVyUmVzdWx0IHx8IHJlc3VsdDsgfSk7XHJcbn07XHJcbnZhciByZXNvbHZlSW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24sIHJlc3VsdCwgaXNJbm5lckluc3RydWN0aW9uLCByb3V0ZXIpIHtcclxuICAgIGluc3RydWN0aW9uLnJlc29sdmUocmVzdWx0KTtcclxuICAgIHZhciBldmVudEFnZ3JlZ2F0b3IgPSByb3V0ZXIuZXZlbnRzO1xyXG4gICAgdmFyIGV2ZW50QXJncyA9IHsgaW5zdHJ1Y3Rpb246IGluc3RydWN0aW9uLCByZXN1bHQ6IHJlc3VsdCB9O1xyXG4gICAgaWYgKCFpc0lubmVySW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICByb3V0ZXIuaXNOYXZpZ2F0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgcm91dGVyLmlzRXhwbGljaXROYXZpZ2F0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgcm91dGVyLmlzRXhwbGljaXROYXZpZ2F0aW9uQmFjayA9IGZhbHNlO1xyXG4gICAgICAgIHJvdXRlci5pc05hdmlnYXRpbmdGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgIHJvdXRlci5pc05hdmlnYXRpbmdOZXcgPSBmYWxzZTtcclxuICAgICAgICByb3V0ZXIuaXNOYXZpZ2F0aW5nUmVmcmVzaCA9IGZhbHNlO1xyXG4gICAgICAgIHJvdXRlci5pc05hdmlnYXRpbmdGb3J3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgcm91dGVyLmlzTmF2aWdhdGluZ0JhY2sgPSBmYWxzZTtcclxuICAgICAgICByb3V0ZXIuY291bGREZWFjdGl2YXRlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9IHZvaWQgMDtcclxuICAgICAgICBpZiAocmVzdWx0Lm91dHB1dCBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgIGV2ZW50TmFtZSA9IFwicm91dGVyOm5hdmlnYXRpb246ZXJyb3JcIiAvKiBFcnJvciAqLztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIXJlc3VsdC5jb21wbGV0ZWQpIHtcclxuICAgICAgICAgICAgZXZlbnROYW1lID0gXCJyb3V0ZXI6bmF2aWdhdGlvbjpjYW5jZWxlZFwiIC8qIENhbmNlbGVkICovO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gaW5zdHJ1Y3Rpb24ucXVlcnlTdHJpbmcgPyAoJz8nICsgaW5zdHJ1Y3Rpb24ucXVlcnlTdHJpbmcpIDogJyc7XHJcbiAgICAgICAgICAgIHJvdXRlci5oaXN0b3J5LnByZXZpb3VzTG9jYXRpb24gPSBpbnN0cnVjdGlvbi5mcmFnbWVudCArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgICAgICBldmVudE5hbWUgPSBcInJvdXRlcjpuYXZpZ2F0aW9uOnN1Y2Nlc3NcIiAvKiBTdWNjZXNzICovO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudEFnZ3JlZ2F0b3IucHVibGlzaChldmVudE5hbWUsIGV2ZW50QXJncyk7XHJcbiAgICAgICAgZXZlbnRBZ2dyZWdhdG9yLnB1Ymxpc2goXCJyb3V0ZXI6bmF2aWdhdGlvbjpjb21wbGV0ZVwiIC8qIENvbXBsZXRlICovLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZXZlbnRBZ2dyZWdhdG9yLnB1Ymxpc2goXCJyb3V0ZXI6bmF2aWdhdGlvbjpjaGlsZDpjb21wbGV0ZVwiIC8qIENoaWxkQ29tcGxldGUgKi8sIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG52YXIgcmVzdG9yZVByZXZpb3VzTG9jYXRpb24gPSBmdW5jdGlvbiAocm91dGVyKSB7XHJcbiAgICB2YXIgcHJldmlvdXNMb2NhdGlvbiA9IHJvdXRlci5oaXN0b3J5LnByZXZpb3VzTG9jYXRpb247XHJcbiAgICBpZiAocHJldmlvdXNMb2NhdGlvbikge1xyXG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShwcmV2aW91c0xvY2F0aW9uLCB7IHRyaWdnZXI6IGZhbHNlLCByZXBsYWNlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocm91dGVyLmZhbGxiYWNrUm91dGUpIHtcclxuICAgICAgICByb3V0ZXIubmF2aWdhdGUocm91dGVyLmZhbGxiYWNrUm91dGUsIHsgdHJpZ2dlcjogdHJ1ZSwgcmVwbGFjZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxvZ2dlci5lcnJvcignUm91dGVyIG5hdmlnYXRpb24gZmFpbGVkLCBhbmQgbm8gcHJldmlvdXMgbG9jYXRpb24gb3IgZmFsbGJhY2tSb3V0ZSBjb3VsZCBiZSByZXN0b3JlZC4nKTtcclxuICAgIH1cclxufTtcblxuLyoqXHJcbiogVGhlIHN0YXR1cyBvZiBhIFBpcGVsaW5lLlxyXG4qL1xyXG52YXIgUGlwZWxpbmVTdGF0dXM7XHJcbihmdW5jdGlvbiAoUGlwZWxpbmVTdGF0dXMpIHtcclxuICAgIFBpcGVsaW5lU3RhdHVzW1wiQ29tcGxldGVkXCJdID0gXCJjb21wbGV0ZWRcIjtcclxuICAgIFBpcGVsaW5lU3RhdHVzW1wiQ2FuY2VsZWRcIl0gPSBcImNhbmNlbGVkXCI7XHJcbiAgICBQaXBlbGluZVN0YXR1c1tcIlJlamVjdGVkXCJdID0gXCJyZWplY3RlZFwiO1xyXG4gICAgUGlwZWxpbmVTdGF0dXNbXCJSdW5uaW5nXCJdID0gXCJydW5uaW5nXCI7XHJcbn0pKFBpcGVsaW5lU3RhdHVzIHx8IChQaXBlbGluZVN0YXR1cyA9IHt9KSk7XG5cbi8qKlxyXG4gKiBBIGxpc3Qgb2Yga25vd24gcm91dGVyIGV2ZW50cyB1c2VkIGJ5IHRoZSBBdXJlbGlhIHJvdXRlclxyXG4gKiB0byBzaWduYWwgdGhlIHBpcGVsaW5lIGhhcyBjb21lIHRvIGEgY2VydGFpbiBzdGF0ZVxyXG4gKi9cclxuLy8gY29uc3QgZW51bSBpcyBwcmVzZXJ2ZWQgaW4gdHNjb25maWdcclxudmFyIFJvdXRlckV2ZW50O1xyXG4oZnVuY3Rpb24gKFJvdXRlckV2ZW50KSB7XHJcbiAgICBSb3V0ZXJFdmVudFtcIlByb2Nlc3NpbmdcIl0gPSBcInJvdXRlcjpuYXZpZ2F0aW9uOnByb2Nlc3NpbmdcIjtcclxuICAgIFJvdXRlckV2ZW50W1wiRXJyb3JcIl0gPSBcInJvdXRlcjpuYXZpZ2F0aW9uOmVycm9yXCI7XHJcbiAgICBSb3V0ZXJFdmVudFtcIkNhbmNlbGVkXCJdID0gXCJyb3V0ZXI6bmF2aWdhdGlvbjpjYW5jZWxlZFwiO1xyXG4gICAgUm91dGVyRXZlbnRbXCJDb21wbGV0ZVwiXSA9IFwicm91dGVyOm5hdmlnYXRpb246Y29tcGxldGVcIjtcclxuICAgIFJvdXRlckV2ZW50W1wiU3VjY2Vzc1wiXSA9IFwicm91dGVyOm5hdmlnYXRpb246c3VjY2Vzc1wiO1xyXG4gICAgUm91dGVyRXZlbnRbXCJDaGlsZENvbXBsZXRlXCJdID0gXCJyb3V0ZXI6bmF2aWdhdGlvbjpjaGlsZDpjb21wbGV0ZVwiO1xyXG59KShSb3V0ZXJFdmVudCB8fCAoUm91dGVyRXZlbnQgPSB7fSkpO1xuXG4vKipcclxuICogQXZhaWxhYmxlIHBpcGVsaW5lIHNsb3QgbmFtZXMgdG8gaW5zZXJ0IGludGVyY2VwdG9yIGludG8gcm91dGVyIHBpcGVsaW5lXHJcbiAqL1xyXG4vLyBjb25zdCBlbnVtIGlzIHByZXNlcnZlZCBpbiB0c2NvbmZpZ1xyXG52YXIgUGlwZWxpbmVTbG90TmFtZTtcclxuKGZ1bmN0aW9uIChQaXBlbGluZVNsb3ROYW1lKSB7XHJcbiAgICAvKipcclxuICAgICAqIEF1dGhvcml6YXRpb24gc2xvdC4gSW52b2tlZCBlYXJseSBpbiB0aGUgcGlwZWxpbmUsXHJcbiAgICAgKiBiZWZvcmUgYGNhbkFjdGl2YXRlYCBob29rIG9mIGluY29taW5nIHJvdXRlXHJcbiAgICAgKi9cclxuICAgIFBpcGVsaW5lU2xvdE5hbWVbXCJBdXRob3JpemVcIl0gPSBcImF1dGhvcml6ZVwiO1xyXG4gICAgLyoqXHJcbiAgICAgKiBQcmUtYWN0aXZhdGlvbiBzbG90LiBJbnZva2VkIGVhcmx5IGluIHRoZSBwaXBlbGluZSxcclxuICAgICAqIEludm9rZWQgdGltaW5nOlxyXG4gICAgICogICAtIGFmdGVyIEF1dGhvcml6YXRpb24gc2xvdFxyXG4gICAgICogICAtIGFmdGVyIGNhbkFjdGl2YXRlIGhvb2sgb24gbmV3IHZpZXcgbW9kZWxcclxuICAgICAqICAgLSBiZWZvcmUgZGVhY3RpdmF0ZSBob29rIG9uIG9sZCB2aWV3IG1vZGVsXHJcbiAgICAgKiAgIC0gYmVmb3JlIGFjdGl2YXRlIGhvb2sgb24gbmV3IHZpZXcgbW9kZWxcclxuICAgICAqL1xyXG4gICAgUGlwZWxpbmVTbG90TmFtZVtcIlByZUFjdGl2YXRlXCJdID0gXCJwcmVBY3RpdmF0ZVwiO1xyXG4gICAgLyoqXHJcbiAgICAgKiBQcmUtcmVuZGVyIHNsb3QuIEludm9rZWQgbGF0ZXIgaW4gdGhlIHBpcGVsaW5lXHJcbiAgICAgKiBJbnZva2NhdGlvbiB0aW1pbmc6XHJcbiAgICAgKiAgIC0gYWZ0ZXIgYWN0aXZhdGUgaG9vayBvbiBuZXcgdmlldyBtb2RlbFxyXG4gICAgICogICAtIGJlZm9yZSBjb21taXQgc3RlcCBvbiBuZXcgbmF2aWdhdGlvbiBpbnN0cnVjdGlvblxyXG4gICAgICovXHJcbiAgICBQaXBlbGluZVNsb3ROYW1lW1wiUHJlUmVuZGVyXCJdID0gXCJwcmVSZW5kZXJcIjtcclxuICAgIC8qKlxyXG4gICAgICogUG9zdC1yZW5kZXIgc2xvdC4gSW52b2tlZCBsYXN0IGluIHRoZSBwaXBlbGluZVxyXG4gICAgICovXHJcbiAgICBQaXBlbGluZVNsb3ROYW1lW1wiUG9zdFJlbmRlclwiXSA9IFwicG9zdFJlbmRlclwiO1xyXG59KShQaXBlbGluZVNsb3ROYW1lIHx8IChQaXBlbGluZVNsb3ROYW1lID0ge30pKTtcblxuZXhwb3J0IHsgQWN0aXZhdGVOZXh0U3RlcCwgQXBwUm91dGVyLCBCdWlsZE5hdmlnYXRpb25QbGFuU3RlcCwgQ2FuQWN0aXZhdGVOZXh0U3RlcCwgQ2FuRGVhY3RpdmF0ZVByZXZpb3VzU3RlcCwgQ29tbWl0Q2hhbmdlc1N0ZXAsIERlYWN0aXZhdGVQcmV2aW91c1N0ZXAsIExvYWRSb3V0ZVN0ZXAsIE5hdk1vZGVsLCBOYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIFBpcGVsaW5lLCBQaXBlbGluZVByb3ZpZGVyLCBQaXBlbGluZVNsb3ROYW1lLCBQaXBlbGluZVN0YXR1cywgUmVkaXJlY3QsIFJlZGlyZWN0VG9Sb3V0ZSwgUm91dGVMb2FkZXIsIFJvdXRlciwgUm91dGVyQ29uZmlndXJhdGlvbiwgUm91dGVyRXZlbnQsIGFjdGl2YXRpb25TdHJhdGVneSwgaXNOYXZpZ2F0aW9uQ29tbWFuZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVyZWxpYS1yb3V0ZXIuanMubWFwXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aurelia-router/dist/native-modules/aurelia-router.js\n"); /***/ }), /***/ "./node_modules/aurelia-task-queue/dist/native-modules/aurelia-task-queue.js": /*!***********************************************************************************!*\ !*** ./node_modules/aurelia-task-queue/dist/native-modules/aurelia-task-queue.js ***! \***********************************************************************************/ /*! exports provided: TaskQueue */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TaskQueue\", function() { return TaskQueue; });\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\n\n\nvar stackSeparator = '\\nEnqueued in TaskQueue by:\\n';\nvar microStackSeparator = '\\nEnqueued in MicroTaskQueue by:\\n';\n\nfunction makeRequestFlushFromMutationObserver(flush) {\n var observer = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].createMutationObserver(flush);\n var val = 'a';\n var node = aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].createTextNode('a');\n var values = Object.create(null);\n values.a = 'b';\n values.b = 'a';\n observer.observe(node, { characterData: true });\n return function requestFlush() {\n node.data = val = values[val];\n };\n}\n\nfunction makeRequestFlushFromTimer(flush) {\n return function requestFlush() {\n var timeoutHandle = setTimeout(handleFlushTimer, 0);\n\n var intervalHandle = setInterval(handleFlushTimer, 50);\n function handleFlushTimer() {\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n flush();\n }\n };\n}\n\nfunction onError(error, task, longStacks) {\n if (longStacks && task.stack && (typeof error === 'undefined' ? 'undefined' : _typeof(error)) === 'object' && error !== null) {\n error.stack = filterFlushStack(error.stack) + task.stack;\n }\n\n if ('onError' in task) {\n task.onError(error);\n } else {\n setTimeout(function () {\n throw error;\n }, 0);\n }\n}\n\nvar TaskQueue = function () {\n function TaskQueue() {\n var _this = this;\n\n \n\n this.flushing = false;\n this.longStacks = false;\n\n this.microTaskQueue = [];\n this.microTaskQueueCapacity = 1024;\n this.taskQueue = [];\n\n if (aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"FEATURE\"].mutationObserver) {\n this.requestFlushMicroTaskQueue = makeRequestFlushFromMutationObserver(function () {\n return _this.flushMicroTaskQueue();\n });\n } else {\n this.requestFlushMicroTaskQueue = makeRequestFlushFromTimer(function () {\n return _this.flushMicroTaskQueue();\n });\n }\n\n this.requestFlushTaskQueue = makeRequestFlushFromTimer(function () {\n return _this.flushTaskQueue();\n });\n }\n\n TaskQueue.prototype._flushQueue = function _flushQueue(queue, capacity) {\n var index = 0;\n var task = void 0;\n\n try {\n this.flushing = true;\n while (index < queue.length) {\n task = queue[index];\n if (this.longStacks) {\n this.stack = typeof task.stack === 'string' ? task.stack : undefined;\n }\n task.call();\n index++;\n\n if (index > capacity) {\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n\n queue.length -= index;\n index = 0;\n }\n }\n } catch (error) {\n onError(error, task, this.longStacks);\n } finally {\n this.flushing = false;\n }\n };\n\n TaskQueue.prototype.queueMicroTask = function queueMicroTask(task) {\n if (this.microTaskQueue.length < 1) {\n this.requestFlushMicroTaskQueue();\n }\n\n if (this.longStacks) {\n task.stack = this.prepareQueueStack(microStackSeparator);\n }\n\n this.microTaskQueue.push(task);\n };\n\n TaskQueue.prototype.queueTask = function queueTask(task) {\n if (this.taskQueue.length < 1) {\n this.requestFlushTaskQueue();\n }\n\n if (this.longStacks) {\n task.stack = this.prepareQueueStack(stackSeparator);\n }\n\n this.taskQueue.push(task);\n };\n\n TaskQueue.prototype.flushTaskQueue = function flushTaskQueue() {\n var queue = this.taskQueue;\n this.taskQueue = [];\n this._flushQueue(queue, Number.MAX_VALUE);\n };\n\n TaskQueue.prototype.flushMicroTaskQueue = function flushMicroTaskQueue() {\n var queue = this.microTaskQueue;\n this._flushQueue(queue, this.microTaskQueueCapacity);\n queue.length = 0;\n };\n\n TaskQueue.prototype.prepareQueueStack = function prepareQueueStack(separator) {\n var stack = separator + filterQueueStack(captureStack());\n\n if (typeof this.stack === 'string') {\n stack = filterFlushStack(stack) + this.stack;\n }\n\n return stack;\n };\n\n return TaskQueue;\n}();\n\nfunction captureStack() {\n var error = new Error();\n\n if (error.stack) {\n return error.stack;\n }\n\n try {\n throw error;\n } catch (e) {\n return e.stack;\n }\n}\n\nfunction filterQueueStack(stack) {\n return stack.replace(/^[\\s\\S]*?\\bqueue(Micro)?Task\\b[^\\n]*\\n/, '');\n}\n\nfunction filterFlushStack(stack) {\n var index = stack.lastIndexOf('flushMicroTaskQueue');\n\n if (index < 0) {\n index = stack.lastIndexOf('flushTaskQueue');\n if (index < 0) {\n return stack;\n }\n }\n\n index = stack.lastIndexOf('\\n', index);\n\n return index < 0 ? stack : stack.substr(0, index);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10YXNrLXF1ZXVlL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS10YXNrLXF1ZXVlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtdGFzay1xdWV1ZS9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtdGFzay1xdWV1ZS5qcz8yYmY0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuXG5cbmltcG9ydCB7IERPTSwgRkVBVFVSRSB9IGZyb20gJ2F1cmVsaWEtcGFsJztcblxudmFyIHN0YWNrU2VwYXJhdG9yID0gJ1xcbkVucXVldWVkIGluIFRhc2tRdWV1ZSBieTpcXG4nO1xudmFyIG1pY3JvU3RhY2tTZXBhcmF0b3IgPSAnXFxuRW5xdWV1ZWQgaW4gTWljcm9UYXNrUXVldWUgYnk6XFxuJztcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3RGbHVzaEZyb21NdXRhdGlvbk9ic2VydmVyKGZsdXNoKSB7XG4gIHZhciBvYnNlcnZlciA9IERPTS5jcmVhdGVNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIHZhbCA9ICdhJztcbiAgdmFyIG5vZGUgPSBET00uY3JlYXRlVGV4dE5vZGUoJ2EnKTtcbiAgdmFyIHZhbHVlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhbHVlcy5hID0gJ2InO1xuICB2YWx1ZXMuYiA9ICdhJztcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gIHJldHVybiBmdW5jdGlvbiByZXF1ZXN0Rmx1c2goKSB7XG4gICAgbm9kZS5kYXRhID0gdmFsID0gdmFsdWVzW3ZhbF07XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0Rmx1c2hGcm9tVGltZXIoZmx1c2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcXVlc3RGbHVzaCgpIHtcbiAgICB2YXIgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoaGFuZGxlRmx1c2hUaW1lciwgMCk7XG5cbiAgICB2YXIgaW50ZXJ2YWxIYW5kbGUgPSBzZXRJbnRlcnZhbChoYW5kbGVGbHVzaFRpbWVyLCA1MCk7XG4gICAgZnVuY3Rpb24gaGFuZGxlRmx1c2hUaW1lcigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxIYW5kbGUpO1xuICAgICAgZmx1c2goKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IsIHRhc2ssIGxvbmdTdGFja3MpIHtcbiAgaWYgKGxvbmdTdGFja3MgJiYgdGFzay5zdGFjayAmJiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihlcnJvcikpID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCkge1xuICAgIGVycm9yLnN0YWNrID0gZmlsdGVyRmx1c2hTdGFjayhlcnJvci5zdGFjaykgKyB0YXNrLnN0YWNrO1xuICB9XG5cbiAgaWYgKCdvbkVycm9yJyBpbiB0YXNrKSB7XG4gICAgdGFzay5vbkVycm9yKGVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmV4cG9ydCB2YXIgVGFza1F1ZXVlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUYXNrUXVldWUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIFxuXG4gICAgdGhpcy5mbHVzaGluZyA9IGZhbHNlO1xuICAgIHRoaXMubG9uZ1N0YWNrcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5taWNyb1Rhc2tRdWV1ZSA9IFtdO1xuICAgIHRoaXMubWljcm9UYXNrUXVldWVDYXBhY2l0eSA9IDEwMjQ7XG4gICAgdGhpcy50YXNrUXVldWUgPSBbXTtcblxuICAgIGlmIChGRUFUVVJFLm11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMucmVxdWVzdEZsdXNoTWljcm9UYXNrUXVldWUgPSBtYWtlUmVxdWVzdEZsdXNoRnJvbU11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZmx1c2hNaWNyb1Rhc2tRdWV1ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVxdWVzdEZsdXNoTWljcm9UYXNrUXVldWUgPSBtYWtlUmVxdWVzdEZsdXNoRnJvbVRpbWVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmZsdXNoTWljcm9UYXNrUXVldWUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdEZsdXNoVGFza1F1ZXVlID0gbWFrZVJlcXVlc3RGbHVzaEZyb21UaW1lcihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuZmx1c2hUYXNrUXVldWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIFRhc2tRdWV1ZS5wcm90b3R5cGUuX2ZsdXNoUXVldWUgPSBmdW5jdGlvbiBfZmx1c2hRdWV1ZShxdWV1ZSwgY2FwYWNpdHkpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciB0YXNrID0gdm9pZCAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZmx1c2hpbmcgPSB0cnVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgcXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHRhc2sgPSBxdWV1ZVtpbmRleF07XG4gICAgICAgIGlmICh0aGlzLmxvbmdTdGFja3MpIHtcbiAgICAgICAgICB0aGlzLnN0YWNrID0gdHlwZW9mIHRhc2suc3RhY2sgPT09ICdzdHJpbmcnID8gdGFzay5zdGFjayA6IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0YXNrLmNhbGwoKTtcbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBpZiAoaW5kZXggPiBjYXBhY2l0eSkge1xuICAgICAgICAgIGZvciAodmFyIHNjYW4gPSAwLCBuZXdMZW5ndGggPSBxdWV1ZS5sZW5ndGggLSBpbmRleDsgc2NhbiA8IG5ld0xlbmd0aDsgc2NhbisrKSB7XG4gICAgICAgICAgICBxdWV1ZVtzY2FuXSA9IHF1ZXVlW3NjYW4gKyBpbmRleF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcXVldWUubGVuZ3RoIC09IGluZGV4O1xuICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yLCB0YXNrLCB0aGlzLmxvbmdTdGFja3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIFRhc2tRdWV1ZS5wcm90b3R5cGUucXVldWVNaWNyb1Rhc2sgPSBmdW5jdGlvbiBxdWV1ZU1pY3JvVGFzayh0YXNrKSB7XG4gICAgaWYgKHRoaXMubWljcm9UYXNrUXVldWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhpcy5yZXF1ZXN0Rmx1c2hNaWNyb1Rhc2tRdWV1ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvbmdTdGFja3MpIHtcbiAgICAgIHRhc2suc3RhY2sgPSB0aGlzLnByZXBhcmVRdWV1ZVN0YWNrKG1pY3JvU3RhY2tTZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIHRoaXMubWljcm9UYXNrUXVldWUucHVzaCh0YXNrKTtcbiAgfTtcblxuICBUYXNrUXVldWUucHJvdG90eXBlLnF1ZXVlVGFzayA9IGZ1bmN0aW9uIHF1ZXVlVGFzayh0YXNrKSB7XG4gICAgaWYgKHRoaXMudGFza1F1ZXVlLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRoaXMucmVxdWVzdEZsdXNoVGFza1F1ZXVlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9uZ1N0YWNrcykge1xuICAgICAgdGFzay5zdGFjayA9IHRoaXMucHJlcGFyZVF1ZXVlU3RhY2soc3RhY2tTZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIHRoaXMudGFza1F1ZXVlLnB1c2godGFzayk7XG4gIH07XG5cbiAgVGFza1F1ZXVlLnByb3RvdHlwZS5mbHVzaFRhc2tRdWV1ZSA9IGZ1bmN0aW9uIGZsdXNoVGFza1F1ZXVlKCkge1xuICAgIHZhciBxdWV1ZSA9IHRoaXMudGFza1F1ZXVlO1xuICAgIHRoaXMudGFza1F1ZXVlID0gW107XG4gICAgdGhpcy5fZmx1c2hRdWV1ZShxdWV1ZSwgTnVtYmVyLk1BWF9WQUxVRSk7XG4gIH07XG5cbiAgVGFza1F1ZXVlLnByb3RvdHlwZS5mbHVzaE1pY3JvVGFza1F1ZXVlID0gZnVuY3Rpb24gZmx1c2hNaWNyb1Rhc2tRdWV1ZSgpIHtcbiAgICB2YXIgcXVldWUgPSB0aGlzLm1pY3JvVGFza1F1ZXVlO1xuICAgIHRoaXMuX2ZsdXNoUXVldWUocXVldWUsIHRoaXMubWljcm9UYXNrUXVldWVDYXBhY2l0eSk7XG4gICAgcXVldWUubGVuZ3RoID0gMDtcbiAgfTtcblxuICBUYXNrUXVldWUucHJvdG90eXBlLnByZXBhcmVRdWV1ZVN0YWNrID0gZnVuY3Rpb24gcHJlcGFyZVF1ZXVlU3RhY2soc2VwYXJhdG9yKSB7XG4gICAgdmFyIHN0YWNrID0gc2VwYXJhdG9yICsgZmlsdGVyUXVldWVTdGFjayhjYXB0dXJlU3RhY2soKSk7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzdGFjayA9IGZpbHRlckZsdXNoU3RhY2soc3RhY2spICsgdGhpcy5zdGFjaztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG5cbiAgcmV0dXJuIFRhc2tRdWV1ZTtcbn0oKTtcblxuZnVuY3Rpb24gY2FwdHVyZVN0YWNrKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoKTtcblxuICBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICByZXR1cm4gZXJyb3Iuc3RhY2s7XG4gIH1cblxuICB0cnkge1xuICAgIHRocm93IGVycm9yO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGUuc3RhY2s7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsdGVyUXVldWVTdGFjayhzdGFjaykge1xuICByZXR1cm4gc3RhY2sucmVwbGFjZSgvXltcXHNcXFNdKj9cXGJxdWV1ZShNaWNybyk/VGFza1xcYlteXFxuXSpcXG4vLCAnJyk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZsdXNoU3RhY2soc3RhY2spIHtcbiAgdmFyIGluZGV4ID0gc3RhY2subGFzdEluZGV4T2YoJ2ZsdXNoTWljcm9UYXNrUXVldWUnKTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBzdGFjay5sYXN0SW5kZXhPZignZmx1c2hUYXNrUXVldWUnKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gc3RhY2s7XG4gICAgfVxuICB9XG5cbiAgaW5kZXggPSBzdGFjay5sYXN0SW5kZXhPZignXFxuJywgaW5kZXgpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyBzdGFjayA6IHN0YWNrLnN1YnN0cigwLCBpbmRleCk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/aurelia-task-queue/dist/native-modules/aurelia-task-queue.js\n"); /***/ }), /***/ "./node_modules/aurelia-templating/dist/native-modules/aurelia-templating.js": /*!***********************************************************************************!*\ !*** ./node_modules/aurelia-templating/dist/native-modules/aurelia-templating.js ***! \***********************************************************************************/ /*! exports provided: animationEvent, Animator, CompositionTransactionNotifier, CompositionTransactionOwnershipToken, CompositionTransaction, _hyphenate, _isAllWhitespace, ViewEngineHooksResource, viewEngineHooks, ElementEvents, ResourceLoadContext, ViewCompileInstruction, BehaviorInstruction, TargetInstruction, viewStrategy, RelativeViewStrategy, ConventionalViewStrategy, NoViewStrategy, TemplateRegistryViewStrategy, InlineViewStrategy, StaticViewStrategy, ViewLocator, BindingLanguage, SlotCustomAttribute, PassThroughSlot, ShadowSlot, ShadowDOM, validateBehaviorName, ViewResources, View, ViewSlot, BoundViewFactory, ViewFactory, ViewCompiler, ResourceModule, ResourceDescription, ModuleAnalyzer, ViewEngine, Controller, BehaviorPropertyObserver, BindableProperty, HtmlBehaviorResource, children, child, SwapStrategies, CompositionEngine, ElementConfigResource, resource, behavior, customElement, customAttribute, templateController, bindable, dynamicOptions, useShadowDOM, processAttributes, processContent, containerless, useViewStrategy, useView, inlineView, noView, view, elementConfig, viewResources, TemplatingEngine */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(Promise) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"animationEvent\", function() { return animationEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Animator\", function() { return Animator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CompositionTransactionNotifier\", function() { return CompositionTransactionNotifier; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CompositionTransactionOwnershipToken\", function() { return CompositionTransactionOwnershipToken; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CompositionTransaction\", function() { return CompositionTransaction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_hyphenate\", function() { return _hyphenate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_isAllWhitespace\", function() { return _isAllWhitespace; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ViewEngineHooksResource\", function() { return ViewEngineHooksResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"viewEngineHooks\", function() { return viewEngineHooks; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementEvents\", function() { return ElementEvents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ResourceLoadContext\", function() { return ResourceLoadContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ViewCompileInstruction\", function() { return ViewCompileInstruction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BehaviorInstruction\", function() { return BehaviorInstruction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TargetInstruction\", function() { return TargetInstruction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"viewStrategy\", function() { return viewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RelativeViewStrategy\", function() { return RelativeViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConventionalViewStrategy\", function() { return ConventionalViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NoViewStrategy\", function() { return NoViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TemplateRegistryViewStrategy\", function() { return TemplateRegistryViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"InlineViewStrategy\", function() { return InlineViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StaticViewStrategy\", function() { return StaticViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ViewLocator\", function() { return ViewLocator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindingLanguage\", function() { return BindingLanguage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SlotCustomAttribute\", function() { return SlotCustomAttribute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PassThroughSlot\", function() { return PassThroughSlot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ShadowSlot\", function() { return ShadowSlot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ShadowDOM\", function() { return ShadowDOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"validateBehaviorName\", function() { return validateBehaviorName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ViewResources\", function() { return ViewResources; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"View\", function() { return View; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ViewSlot\", function() { return ViewSlot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BoundViewFactory\", function() { return BoundViewFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ViewFactory\", function() { return ViewFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ViewCompiler\", function() { return ViewCompiler; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ResourceModule\", function() { return ResourceModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ResourceDescription\", function() { return ResourceDescription; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ModuleAnalyzer\", function() { return ModuleAnalyzer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ViewEngine\", function() { return ViewEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Controller\", function() { return Controller; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BehaviorPropertyObserver\", function() { return BehaviorPropertyObserver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BindableProperty\", function() { return BindableProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HtmlBehaviorResource\", function() { return HtmlBehaviorResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"children\", function() { return children; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"child\", function() { return child; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SwapStrategies\", function() { return SwapStrategies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CompositionEngine\", function() { return CompositionEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementConfigResource\", function() { return ElementConfigResource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"resource\", function() { return resource; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"behavior\", function() { return behavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"customElement\", function() { return customElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"customAttribute\", function() { return customAttribute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"templateController\", function() { return templateController; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bindable\", function() { return bindable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dynamicOptions\", function() { return dynamicOptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useShadowDOM\", function() { return useShadowDOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"processAttributes\", function() { return processAttributes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"processContent\", function() { return processContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"containerless\", function() { return containerless; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useViewStrategy\", function() { return useViewStrategy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useView\", function() { return useView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"inlineView\", function() { return inlineView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"noView\", function() { return noView; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"view\", function() { return view; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"elementConfig\", function() { return elementConfig; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"viewResources\", function() { return viewResources; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TemplatingEngine\", function() { return TemplatingEngine; });\n/* harmony import */ var aurelia_logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-logging */ \"./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js\");\n/* harmony import */ var aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aurelia-metadata */ \"./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js\");\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\n/* harmony import */ var aurelia_loader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! aurelia-loader */ \"./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js\");\n/* harmony import */ var aurelia_path__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! aurelia-path */ \"./node_modules/aurelia-path/dist/native-modules/aurelia-path.js\");\n/* harmony import */ var aurelia_binding__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! aurelia-binding */ \"./node_modules/aurelia-binding/dist/native-modules/aurelia-binding.js\");\n/* harmony import */ var aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! aurelia-dependency-injection */ \"./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js\");\n/* harmony import */ var aurelia_task_queue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! aurelia-task-queue */ \"./node_modules/aurelia-task-queue/dist/native-modules/aurelia-task-queue.js\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _class, _temp, _class2, _temp2, _dec, _class3, _dec2, _class4, _dec3, _class5, _dec4, _class6, _dec5, _class7, _dec6, _class8, _class9, _temp3, _class10, _temp4, _class12, _class14, _temp5, _dec7, _class15, _dec8, _class16, _dec9, _class17;\n\n\n\n\n\n\n\n\n\n\n\n\nvar animationEvent = {\n enterBegin: 'animation:enter:begin',\n enterActive: 'animation:enter:active',\n enterDone: 'animation:enter:done',\n enterTimeout: 'animation:enter:timeout',\n\n leaveBegin: 'animation:leave:begin',\n leaveActive: 'animation:leave:active',\n leaveDone: 'animation:leave:done',\n leaveTimeout: 'animation:leave:timeout',\n\n staggerNext: 'animation:stagger:next',\n\n removeClassBegin: 'animation:remove-class:begin',\n removeClassActive: 'animation:remove-class:active',\n removeClassDone: 'animation:remove-class:done',\n removeClassTimeout: 'animation:remove-class:timeout',\n\n addClassBegin: 'animation:add-class:begin',\n addClassActive: 'animation:add-class:active',\n addClassDone: 'animation:add-class:done',\n addClassTimeout: 'animation:add-class:timeout',\n\n animateBegin: 'animation:animate:begin',\n animateActive: 'animation:animate:active',\n animateDone: 'animation:animate:done',\n animateTimeout: 'animation:animate:timeout',\n\n sequenceBegin: 'animation:sequence:begin',\n sequenceDone: 'animation:sequence:done'\n};\n\nvar Animator = function () {\n function Animator() {\n \n }\n\n Animator.prototype.enter = function enter(element) {\n return Promise.resolve(false);\n };\n\n Animator.prototype.leave = function leave(element) {\n return Promise.resolve(false);\n };\n\n Animator.prototype.removeClass = function removeClass(element, className) {\n element.classList.remove(className);\n return Promise.resolve(false);\n };\n\n Animator.prototype.addClass = function addClass(element, className) {\n element.classList.add(className);\n return Promise.resolve(false);\n };\n\n Animator.prototype.animate = function animate(element, className) {\n return Promise.resolve(false);\n };\n\n Animator.prototype.runSequence = function runSequence(animations) {};\n\n Animator.prototype.registerEffect = function registerEffect(effectName, properties) {};\n\n Animator.prototype.unregisterEffect = function unregisterEffect(effectName) {};\n\n return Animator;\n}();\n\nvar CompositionTransactionNotifier = function () {\n function CompositionTransactionNotifier(owner) {\n \n\n this.owner = owner;\n this.owner._compositionCount++;\n }\n\n CompositionTransactionNotifier.prototype.done = function done() {\n this.owner._compositionCount--;\n this.owner._tryCompleteTransaction();\n };\n\n return CompositionTransactionNotifier;\n}();\n\nvar CompositionTransactionOwnershipToken = function () {\n function CompositionTransactionOwnershipToken(owner) {\n \n\n this.owner = owner;\n this.owner._ownershipToken = this;\n this.thenable = this._createThenable();\n }\n\n CompositionTransactionOwnershipToken.prototype.waitForCompositionComplete = function waitForCompositionComplete() {\n this.owner._tryCompleteTransaction();\n return this.thenable;\n };\n\n CompositionTransactionOwnershipToken.prototype.resolve = function resolve() {\n this._resolveCallback();\n };\n\n CompositionTransactionOwnershipToken.prototype._createThenable = function _createThenable() {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n _this._resolveCallback = resolve;\n });\n };\n\n return CompositionTransactionOwnershipToken;\n}();\n\nvar CompositionTransaction = function () {\n function CompositionTransaction() {\n \n\n this._ownershipToken = null;\n this._compositionCount = 0;\n }\n\n CompositionTransaction.prototype.tryCapture = function tryCapture() {\n return this._ownershipToken === null ? new CompositionTransactionOwnershipToken(this) : null;\n };\n\n CompositionTransaction.prototype.enlist = function enlist() {\n return new CompositionTransactionNotifier(this);\n };\n\n CompositionTransaction.prototype._tryCompleteTransaction = function _tryCompleteTransaction() {\n if (this._compositionCount <= 0) {\n this._compositionCount = 0;\n\n if (this._ownershipToken !== null) {\n var token = this._ownershipToken;\n this._ownershipToken = null;\n token.resolve();\n }\n }\n };\n\n return CompositionTransaction;\n}();\n\nvar capitalMatcher = /([A-Z])/g;\n\nfunction addHyphenAndLower(char) {\n return '-' + char.toLowerCase();\n}\n\nfunction _hyphenate(name) {\n return (name.charAt(0).toLowerCase() + name.slice(1)).replace(capitalMatcher, addHyphenAndLower);\n}\n\nfunction _isAllWhitespace(node) {\n return !(node.auInterpolationTarget || /[^\\t\\n\\r ]/.test(node.textContent));\n}\n\nvar ViewEngineHooksResource = function () {\n function ViewEngineHooksResource() {\n \n }\n\n ViewEngineHooksResource.prototype.initialize = function initialize(container, target) {\n this.instance = container.get(target);\n };\n\n ViewEngineHooksResource.prototype.register = function register(registry, name) {\n registry.registerViewEngineHooks(this.instance);\n };\n\n ViewEngineHooksResource.prototype.load = function load(container, target) {};\n\n ViewEngineHooksResource.convention = function convention(name) {\n if (name.endsWith('ViewEngineHooks')) {\n return new ViewEngineHooksResource();\n }\n };\n\n return ViewEngineHooksResource;\n}();\n\nfunction viewEngineHooks(target) {\n var deco = function deco(t) {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, new ViewEngineHooksResource(), t);\n };\n\n return target ? deco(target) : deco;\n}\n\nvar ElementEvents = (_temp = _class = function () {\n function ElementEvents(element) {\n \n\n this.element = element;\n this.subscriptions = {};\n }\n\n ElementEvents.prototype._enqueueHandler = function _enqueueHandler(handler) {\n this.subscriptions[handler.eventName] = this.subscriptions[handler.eventName] || [];\n this.subscriptions[handler.eventName].push(handler);\n };\n\n ElementEvents.prototype._dequeueHandler = function _dequeueHandler(handler) {\n var index = void 0;\n var subscriptions = this.subscriptions[handler.eventName];\n if (subscriptions) {\n index = subscriptions.indexOf(handler);\n if (index > -1) {\n subscriptions.splice(index, 1);\n }\n }\n return handler;\n };\n\n ElementEvents.prototype.publish = function publish(eventName) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var cancelable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n\n var event = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createCustomEvent(eventName, { cancelable: cancelable, bubbles: bubbles, detail: detail });\n this.element.dispatchEvent(event);\n };\n\n ElementEvents.prototype.subscribe = function subscribe(eventName, handler, captureOrOptions) {\n if (typeof handler === 'function') {\n if (captureOrOptions === undefined) {\n captureOrOptions = ElementEvents.defaultListenerOptions;\n }\n var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, false);\n return eventHandler;\n }\n\n return undefined;\n };\n\n ElementEvents.prototype.subscribeOnce = function subscribeOnce(eventName, handler, captureOrOptions) {\n if (typeof handler === 'function') {\n if (captureOrOptions === undefined) {\n captureOrOptions = ElementEvents.defaultListenerOptions;\n }\n var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, true);\n return eventHandler;\n }\n\n return undefined;\n };\n\n ElementEvents.prototype.dispose = function dispose(eventName) {\n if (eventName && typeof eventName === 'string') {\n var subscriptions = this.subscriptions[eventName];\n if (subscriptions) {\n while (subscriptions.length) {\n var subscription = subscriptions.pop();\n if (subscription) {\n subscription.dispose();\n }\n }\n }\n } else {\n this.disposeAll();\n }\n };\n\n ElementEvents.prototype.disposeAll = function disposeAll() {\n for (var _key in this.subscriptions) {\n this.dispose(_key);\n }\n };\n\n return ElementEvents;\n}(), _class.defaultListenerOptions = true, _temp);\n\nvar EventHandlerImpl = function () {\n function EventHandlerImpl(owner, eventName, handler, captureOrOptions, once) {\n \n\n this.owner = owner;\n this.eventName = eventName;\n this.handler = handler;\n\n this.capture = typeof captureOrOptions === 'boolean' ? captureOrOptions : captureOrOptions.capture;\n this.bubbles = !this.capture;\n this.captureOrOptions = captureOrOptions;\n this.once = once;\n owner.element.addEventListener(eventName, this, captureOrOptions);\n owner._enqueueHandler(this);\n }\n\n EventHandlerImpl.prototype.handleEvent = function handleEvent(e) {\n var fn = this.handler;\n fn(e);\n if (this.once) {\n this.dispose();\n }\n };\n\n EventHandlerImpl.prototype.dispose = function dispose() {\n this.owner.element.removeEventListener(this.eventName, this, this.captureOrOptions);\n this.owner._dequeueHandler(this);\n this.owner = this.handler = null;\n };\n\n return EventHandlerImpl;\n}();\n\nvar ResourceLoadContext = function () {\n function ResourceLoadContext() {\n \n\n this.dependencies = {};\n }\n\n ResourceLoadContext.prototype.addDependency = function addDependency(url) {\n this.dependencies[url] = true;\n };\n\n ResourceLoadContext.prototype.hasDependency = function hasDependency(url) {\n return url in this.dependencies;\n };\n\n return ResourceLoadContext;\n}();\n\nvar ViewCompileInstruction = function ViewCompileInstruction() {\n var targetShadowDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var compileSurrogate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n \n\n this.targetShadowDOM = targetShadowDOM;\n this.compileSurrogate = compileSurrogate;\n this.associatedModuleId = null;\n};\n\nViewCompileInstruction.normal = new ViewCompileInstruction();\n\nvar BehaviorInstruction = function () {\n function BehaviorInstruction() {\n \n }\n\n BehaviorInstruction.enhance = function enhance() {\n var instruction = new BehaviorInstruction();\n instruction.enhance = true;\n return instruction;\n };\n\n BehaviorInstruction.unitTest = function unitTest(type, attributes) {\n var instruction = new BehaviorInstruction();\n instruction.type = type;\n instruction.attributes = attributes || {};\n return instruction;\n };\n\n BehaviorInstruction.element = function element(node, type) {\n var instruction = new BehaviorInstruction();\n instruction.type = type;\n instruction.attributes = {};\n instruction.anchorIsContainer = !(node.hasAttribute('containerless') || type.containerless);\n instruction.initiatedByBehavior = true;\n return instruction;\n };\n\n BehaviorInstruction.attribute = function attribute(attrName, type) {\n var instruction = new BehaviorInstruction();\n instruction.attrName = attrName;\n instruction.type = type || null;\n instruction.attributes = {};\n return instruction;\n };\n\n BehaviorInstruction.dynamic = function dynamic(host, viewModel, viewFactory) {\n var instruction = new BehaviorInstruction();\n instruction.host = host;\n instruction.viewModel = viewModel;\n instruction.viewFactory = viewFactory;\n instruction.inheritBindingContext = true;\n return instruction;\n };\n\n return BehaviorInstruction;\n}();\n\nvar biProto = BehaviorInstruction.prototype;\nbiProto.initiatedByBehavior = false;\nbiProto.enhance = false;\nbiProto.partReplacements = null;\nbiProto.viewFactory = null;\nbiProto.originalAttrName = null;\nbiProto.skipContentProcessing = false;\nbiProto.contentFactory = null;\nbiProto.viewModel = null;\nbiProto.anchorIsContainer = false;\nbiProto.host = null;\nbiProto.attributes = null;\nbiProto.type = null;\nbiProto.attrName = null;\nbiProto.inheritBindingContext = false;\n\nBehaviorInstruction.normal = new BehaviorInstruction();\n\nvar TargetInstruction = (_temp2 = _class2 = function () {\n function TargetInstruction() {\n \n }\n\n TargetInstruction.shadowSlot = function shadowSlot(parentInjectorId) {\n var instruction = new TargetInstruction();\n instruction.parentInjectorId = parentInjectorId;\n instruction.shadowSlot = true;\n return instruction;\n };\n\n TargetInstruction.contentExpression = function contentExpression(expression) {\n var instruction = new TargetInstruction();\n instruction.contentExpression = expression;\n return instruction;\n };\n\n TargetInstruction.letElement = function letElement(expressions) {\n var instruction = new TargetInstruction();\n instruction.expressions = expressions;\n instruction.letElement = true;\n return instruction;\n };\n\n TargetInstruction.lifting = function lifting(parentInjectorId, liftingInstruction) {\n var instruction = new TargetInstruction();\n instruction.parentInjectorId = parentInjectorId;\n instruction.expressions = TargetInstruction.noExpressions;\n instruction.behaviorInstructions = [liftingInstruction];\n instruction.viewFactory = liftingInstruction.viewFactory;\n instruction.providers = [liftingInstruction.type.target];\n instruction.lifting = true;\n return instruction;\n };\n\n TargetInstruction.normal = function normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction) {\n var instruction = new TargetInstruction();\n instruction.injectorId = injectorId;\n instruction.parentInjectorId = parentInjectorId;\n instruction.providers = providers;\n instruction.behaviorInstructions = behaviorInstructions;\n instruction.expressions = expressions;\n instruction.anchorIsContainer = elementInstruction ? elementInstruction.anchorIsContainer : true;\n instruction.elementInstruction = elementInstruction;\n return instruction;\n };\n\n TargetInstruction.surrogate = function surrogate(providers, behaviorInstructions, expressions, values) {\n var instruction = new TargetInstruction();\n instruction.expressions = expressions;\n instruction.behaviorInstructions = behaviorInstructions;\n instruction.providers = providers;\n instruction.values = values;\n return instruction;\n };\n\n return TargetInstruction;\n}(), _class2.noExpressions = Object.freeze([]), _temp2);\n\nvar tiProto = TargetInstruction.prototype;\n\ntiProto.injectorId = null;\ntiProto.parentInjectorId = null;\n\ntiProto.shadowSlot = false;\ntiProto.slotName = null;\ntiProto.slotFallbackFactory = null;\n\ntiProto.contentExpression = null;\ntiProto.letElement = false;\n\ntiProto.expressions = null;\ntiProto.expressions = null;\ntiProto.providers = null;\n\ntiProto.viewFactory = null;\n\ntiProto.anchorIsContainer = false;\ntiProto.elementInstruction = null;\ntiProto.lifting = false;\n\ntiProto.values = null;\n\nvar viewStrategy = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"protocol\"].create('aurelia:view-strategy', {\n validate: function validate(target) {\n if (!(typeof target.loadViewFactory === 'function')) {\n return 'View strategies must implement: loadViewFactory(viewEngine: ViewEngine, compileInstruction: ViewCompileInstruction, loadContext?: ResourceLoadContext): Promise';\n }\n\n return true;\n },\n compose: function compose(target) {\n if (!(typeof target.makeRelativeTo === 'function')) {\n target.makeRelativeTo = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"PLATFORM\"].noop;\n }\n }\n});\n\nvar RelativeViewStrategy = (_dec = viewStrategy(), _dec(_class3 = function () {\n function RelativeViewStrategy(path) {\n \n\n this.path = path;\n this.absolutePath = null;\n }\n\n RelativeViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n if (this.absolutePath === null && this.moduleId) {\n this.absolutePath = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_4__[\"relativeToFile\"])(this.path, this.moduleId);\n }\n\n compileInstruction.associatedModuleId = this.moduleId;\n return viewEngine.loadViewFactory(this.absolutePath || this.path, compileInstruction, loadContext, target);\n };\n\n RelativeViewStrategy.prototype.makeRelativeTo = function makeRelativeTo(file) {\n if (this.absolutePath === null) {\n this.absolutePath = Object(aurelia_path__WEBPACK_IMPORTED_MODULE_4__[\"relativeToFile\"])(this.path, file);\n }\n };\n\n return RelativeViewStrategy;\n}()) || _class3);\n\nvar ConventionalViewStrategy = (_dec2 = viewStrategy(), _dec2(_class4 = function () {\n function ConventionalViewStrategy(viewLocator, origin) {\n \n\n this.moduleId = origin.moduleId;\n this.viewUrl = viewLocator.convertOriginToViewUrl(origin);\n }\n\n ConventionalViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n compileInstruction.associatedModuleId = this.moduleId;\n return viewEngine.loadViewFactory(this.viewUrl, compileInstruction, loadContext, target);\n };\n\n return ConventionalViewStrategy;\n}()) || _class4);\n\nvar NoViewStrategy = (_dec3 = viewStrategy(), _dec3(_class5 = function () {\n function NoViewStrategy(dependencies, dependencyBaseUrl) {\n \n\n this.dependencies = dependencies || null;\n this.dependencyBaseUrl = dependencyBaseUrl || '';\n }\n\n NoViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n var entry = this.entry;\n var dependencies = this.dependencies;\n\n if (entry && entry.factoryIsReady) {\n return Promise.resolve(null);\n }\n\n this.entry = entry = new aurelia_loader__WEBPACK_IMPORTED_MODULE_3__[\"TemplateRegistryEntry\"](this.moduleId || this.dependencyBaseUrl);\n\n entry.dependencies = [];\n entry.templateIsLoaded = true;\n\n if (dependencies !== null) {\n for (var i = 0, ii = dependencies.length; i < ii; ++i) {\n var current = dependencies[i];\n\n if (typeof current === 'string' || typeof current === 'function') {\n entry.addDependency(current);\n } else {\n entry.addDependency(current.from, current.as);\n }\n }\n }\n\n compileInstruction.associatedModuleId = this.moduleId;\n\n return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n };\n\n return NoViewStrategy;\n}()) || _class5);\n\nvar TemplateRegistryViewStrategy = (_dec4 = viewStrategy(), _dec4(_class6 = function () {\n function TemplateRegistryViewStrategy(moduleId, entry) {\n \n\n this.moduleId = moduleId;\n this.entry = entry;\n }\n\n TemplateRegistryViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n var entry = this.entry;\n\n if (entry.factoryIsReady) {\n return Promise.resolve(entry.factory);\n }\n\n compileInstruction.associatedModuleId = this.moduleId;\n return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n };\n\n return TemplateRegistryViewStrategy;\n}()) || _class6);\n\nvar InlineViewStrategy = (_dec5 = viewStrategy(), _dec5(_class7 = function () {\n function InlineViewStrategy(markup, dependencies, dependencyBaseUrl) {\n \n\n this.markup = markup;\n this.dependencies = dependencies || null;\n this.dependencyBaseUrl = dependencyBaseUrl || '';\n }\n\n InlineViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n var entry = this.entry;\n var dependencies = this.dependencies;\n\n if (entry && entry.factoryIsReady) {\n return Promise.resolve(entry.factory);\n }\n\n this.entry = entry = new aurelia_loader__WEBPACK_IMPORTED_MODULE_3__[\"TemplateRegistryEntry\"](this.moduleId || this.dependencyBaseUrl);\n entry.template = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createTemplateFromMarkup(this.markup);\n\n if (dependencies !== null) {\n for (var i = 0, ii = dependencies.length; i < ii; ++i) {\n var current = dependencies[i];\n\n if (typeof current === 'string' || typeof current === 'function') {\n entry.addDependency(current);\n } else {\n entry.addDependency(current.from, current.as);\n }\n }\n }\n\n compileInstruction.associatedModuleId = this.moduleId;\n return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n };\n\n return InlineViewStrategy;\n}()) || _class7);\n\nvar StaticViewStrategy = (_dec6 = viewStrategy(), _dec6(_class8 = function () {\n function StaticViewStrategy(config) {\n \n\n if (typeof config === 'string' || config instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].Element && config.tagName === 'TEMPLATE') {\n config = {\n template: config\n };\n }\n this.template = config.template;\n this.dependencies = config.dependencies || [];\n this.factoryIsReady = false;\n this.onReady = null;\n this.moduleId = 'undefined';\n }\n\n StaticViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n var _this2 = this;\n\n if (this.factoryIsReady) {\n return Promise.resolve(this.factory);\n }\n var deps = this.dependencies;\n deps = typeof deps === 'function' ? deps() : deps;\n deps = deps ? deps : [];\n deps = Array.isArray(deps) ? deps : [deps];\n\n return Promise.all(deps).then(function (dependencies) {\n var container = viewEngine.container;\n var appResources = viewEngine.appResources;\n var viewCompiler = viewEngine.viewCompiler;\n var viewResources = new ViewResources(appResources);\n\n var resource = void 0;\n var elDeps = [];\n\n if (target) {\n viewResources.autoRegister(container, target);\n }\n\n for (var _iterator = dependencies, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var dep = _ref;\n\n if (typeof dep === 'function') {\n resource = viewResources.autoRegister(container, dep);\n if (resource.elementName !== null) {\n elDeps.push(resource);\n }\n } else if (dep && (typeof dep === 'undefined' ? 'undefined' : _typeof(dep)) === 'object') {\n for (var _key2 in dep) {\n var exported = dep[_key2];\n if (typeof exported === 'function') {\n resource = viewResources.autoRegister(container, exported);\n if (resource.elementName !== null) {\n elDeps.push(resource);\n }\n }\n }\n } else {\n throw new Error('dependency neither function nor object. Received: \"' + (typeof dep === 'undefined' ? 'undefined' : _typeof(dep)) + '\"');\n }\n }\n\n return Promise.all(elDeps.map(function (el) {\n return el.load(container, el.target);\n })).then(function () {\n var factory = _this2.template !== null ? viewCompiler.compile(_this2.template, viewResources, compileInstruction) : null;\n _this2.factoryIsReady = true;\n _this2.factory = factory;\n return factory;\n });\n });\n };\n\n return StaticViewStrategy;\n}()) || _class8);\n\nvar ViewLocator = (_temp3 = _class9 = function () {\n function ViewLocator() {\n \n }\n\n ViewLocator.prototype.getViewStrategy = function getViewStrategy(value) {\n if (!value) {\n return null;\n }\n\n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && 'getViewStrategy' in value) {\n var _origin = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"Origin\"].get(value.constructor);\n\n value = value.getViewStrategy();\n\n if (typeof value === 'string') {\n value = new RelativeViewStrategy(value);\n }\n\n viewStrategy.assert(value);\n\n if (_origin.moduleId) {\n value.makeRelativeTo(_origin.moduleId);\n }\n\n return value;\n }\n\n if (typeof value === 'string') {\n value = new RelativeViewStrategy(value);\n }\n\n if (viewStrategy.validate(value)) {\n return value;\n }\n\n if (typeof value !== 'function') {\n value = value.constructor;\n }\n\n if ('$view' in value) {\n var c = value.$view;\n var _view = void 0;\n c = typeof c === 'function' ? c.call(value) : c;\n if (c === null) {\n _view = new NoViewStrategy();\n } else {\n _view = c instanceof StaticViewStrategy ? c : new StaticViewStrategy(c);\n }\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(ViewLocator.viewStrategyMetadataKey, _view, value);\n return _view;\n }\n\n var origin = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"Origin\"].get(value);\n var strategy = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].get(ViewLocator.viewStrategyMetadataKey, value);\n\n if (!strategy) {\n if (!origin.moduleId) {\n throw new Error('Cannot determine default view strategy for object.', value);\n }\n\n strategy = this.createFallbackViewStrategy(origin);\n } else if (origin.moduleId) {\n strategy.moduleId = origin.moduleId;\n }\n\n return strategy;\n };\n\n ViewLocator.prototype.createFallbackViewStrategy = function createFallbackViewStrategy(origin) {\n return new ConventionalViewStrategy(this, origin);\n };\n\n ViewLocator.prototype.convertOriginToViewUrl = function convertOriginToViewUrl(origin) {\n var moduleId = origin.moduleId;\n var id = moduleId.endsWith('.js') || moduleId.endsWith('.ts') ? moduleId.substring(0, moduleId.length - 3) : moduleId;\n return id + '.html';\n };\n\n return ViewLocator;\n}(), _class9.viewStrategyMetadataKey = 'aurelia:view-strategy', _temp3);\n\nfunction mi(name) {\n throw new Error('BindingLanguage must implement ' + name + '().');\n}\n\nvar BindingLanguage = function () {\n function BindingLanguage() {\n \n }\n\n BindingLanguage.prototype.inspectAttribute = function inspectAttribute(resources, elementName, attrName, attrValue) {\n mi('inspectAttribute');\n };\n\n BindingLanguage.prototype.createAttributeInstruction = function createAttributeInstruction(resources, element, info, existingInstruction) {\n mi('createAttributeInstruction');\n };\n\n BindingLanguage.prototype.createLetExpressions = function createLetExpressions(resources, element) {\n mi('createLetExpressions');\n };\n\n BindingLanguage.prototype.inspectTextContent = function inspectTextContent(resources, value) {\n mi('inspectTextContent');\n };\n\n return BindingLanguage;\n}();\n\nvar noNodes = Object.freeze([]);\n\nvar SlotCustomAttribute = function () {\n SlotCustomAttribute.inject = function inject() {\n return [aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].Element];\n };\n\n function SlotCustomAttribute(element) {\n \n\n this.element = element;\n this.element.auSlotAttribute = this;\n }\n\n SlotCustomAttribute.prototype.valueChanged = function valueChanged(newValue, oldValue) {};\n\n return SlotCustomAttribute;\n}();\n\nvar PassThroughSlot = function () {\n function PassThroughSlot(anchor, name, destinationName, fallbackFactory) {\n \n\n this.anchor = anchor;\n this.anchor.viewSlot = this;\n this.name = name;\n this.destinationName = destinationName;\n this.fallbackFactory = fallbackFactory;\n this.destinationSlot = null;\n\n this.projections = 0;\n\n this.contentView = null;\n\n var attr = new SlotCustomAttribute(this.anchor);\n attr.value = this.destinationName;\n }\n\n PassThroughSlot.prototype.renderFallbackContent = function renderFallbackContent(view, nodes, projectionSource, index) {\n if (this.contentView === null) {\n this.contentView = this.fallbackFactory.create(this.ownerView.container);\n this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\n\n var slots = Object.create(null);\n slots[this.destinationSlot.name] = this.destinationSlot;\n\n ShadowDOM.distributeView(this.contentView, slots, projectionSource, index, this.destinationSlot.name);\n }\n };\n\n PassThroughSlot.prototype.passThroughTo = function passThroughTo(destinationSlot) {\n this.destinationSlot = destinationSlot;\n };\n\n PassThroughSlot.prototype.addNode = function addNode(view, node, projectionSource, index) {\n if (this.contentView !== null) {\n this.contentView.removeNodes();\n this.contentView.detached();\n this.contentView.unbind();\n this.contentView = null;\n }\n\n if (node.viewSlot instanceof PassThroughSlot) {\n node.viewSlot.passThroughTo(this);\n return;\n }\n\n this.projections++;\n this.destinationSlot.addNode(view, node, projectionSource, index);\n };\n\n PassThroughSlot.prototype.removeView = function removeView(view, projectionSource) {\n this.projections--;\n this.destinationSlot.removeView(view, projectionSource);\n\n if (this.needsFallbackRendering) {\n this.renderFallbackContent(null, noNodes, projectionSource);\n }\n };\n\n PassThroughSlot.prototype.removeAll = function removeAll(projectionSource) {\n this.projections = 0;\n this.destinationSlot.removeAll(projectionSource);\n\n if (this.needsFallbackRendering) {\n this.renderFallbackContent(null, noNodes, projectionSource);\n }\n };\n\n PassThroughSlot.prototype.projectFrom = function projectFrom(view, projectionSource) {\n this.destinationSlot.projectFrom(view, projectionSource);\n };\n\n PassThroughSlot.prototype.created = function created(ownerView) {\n this.ownerView = ownerView;\n };\n\n PassThroughSlot.prototype.bind = function bind(view) {\n if (this.contentView) {\n this.contentView.bind(view.bindingContext, view.overrideContext);\n }\n };\n\n PassThroughSlot.prototype.attached = function attached() {\n if (this.contentView) {\n this.contentView.attached();\n }\n };\n\n PassThroughSlot.prototype.detached = function detached() {\n if (this.contentView) {\n this.contentView.detached();\n }\n };\n\n PassThroughSlot.prototype.unbind = function unbind() {\n if (this.contentView) {\n this.contentView.unbind();\n }\n };\n\n _createClass(PassThroughSlot, [{\n key: 'needsFallbackRendering',\n get: function get() {\n return this.fallbackFactory && this.projections === 0;\n }\n }]);\n\n return PassThroughSlot;\n}();\n\nvar ShadowSlot = function () {\n function ShadowSlot(anchor, name, fallbackFactory) {\n \n\n this.anchor = anchor;\n this.anchor.isContentProjectionSource = true;\n this.anchor.viewSlot = this;\n this.name = name;\n this.fallbackFactory = fallbackFactory;\n this.contentView = null;\n this.projections = 0;\n\n this.children = [];\n this.projectFromAnchors = null;\n this.destinationSlots = null;\n }\n\n ShadowSlot.prototype.addNode = function addNode(view, node, projectionSource, index, destination) {\n if (this.contentView !== null) {\n this.contentView.removeNodes();\n this.contentView.detached();\n this.contentView.unbind();\n this.contentView = null;\n }\n\n if (node.viewSlot instanceof PassThroughSlot) {\n node.viewSlot.passThroughTo(this);\n return;\n }\n\n if (this.destinationSlots !== null) {\n ShadowDOM.distributeNodes(view, [node], this.destinationSlots, this, index);\n } else {\n node.auOwnerView = view;\n node.auProjectionSource = projectionSource;\n node.auAssignedSlot = this;\n\n var anchor = this._findAnchor(view, node, projectionSource, index);\n var parent = anchor.parentNode;\n\n parent.insertBefore(node, anchor);\n this.children.push(node);\n this.projections++;\n }\n };\n\n ShadowSlot.prototype.removeView = function removeView(view, projectionSource) {\n if (this.destinationSlots !== null) {\n ShadowDOM.undistributeView(view, this.destinationSlots, this);\n } else if (this.contentView && this.contentView.hasSlots) {\n ShadowDOM.undistributeView(view, this.contentView.slots, projectionSource);\n } else {\n var found = this.children.find(function (x) {\n return x.auSlotProjectFrom === projectionSource;\n });\n if (found) {\n var _children = found.auProjectionChildren;\n var ownChildren = this.children;\n\n for (var i = 0, ii = _children.length; i < ii; ++i) {\n var _child = _children[i];\n\n if (_child.auOwnerView === view) {\n _children.splice(i, 1);\n view.fragment.appendChild(_child);\n i--;ii--;\n\n this.projections--;\n var idx = ownChildren.indexOf(_child);\n if (idx > -1) {\n ownChildren.splice(idx, 1);\n }\n }\n }\n\n if (this.needsFallbackRendering) {\n this.renderFallbackContent(view, noNodes, projectionSource);\n }\n }\n }\n };\n\n ShadowSlot.prototype.removeAll = function removeAll(projectionSource) {\n if (this.destinationSlots !== null) {\n ShadowDOM.undistributeAll(this.destinationSlots, this);\n } else if (this.contentView && this.contentView.hasSlots) {\n ShadowDOM.undistributeAll(this.contentView.slots, projectionSource);\n } else {\n var found = this.children.find(function (x) {\n return x.auSlotProjectFrom === projectionSource;\n });\n\n if (found) {\n var _children2 = found.auProjectionChildren;\n var ownChildren = this.children;\n\n for (var i = 0, ii = _children2.length; i < ii; ++i) {\n var _child2 = _children2[i];\n _child2.auOwnerView.fragment.appendChild(_child2);\n\n this.projections--;\n var idx = ownChildren.indexOf(_child2);\n if (idx > -1) {\n ownChildren.splice(idx, 1);\n }\n }\n\n found.auProjectionChildren = [];\n\n if (this.needsFallbackRendering) {\n this.renderFallbackContent(null, noNodes, projectionSource);\n }\n }\n }\n };\n\n ShadowSlot.prototype._findAnchor = function _findAnchor(view, node, projectionSource, index) {\n if (projectionSource) {\n var found = this.children.find(function (x) {\n return x.auSlotProjectFrom === projectionSource;\n });\n if (found) {\n if (index !== undefined) {\n var _children3 = found.auProjectionChildren;\n var viewIndex = -1;\n var lastView = void 0;\n\n for (var i = 0, ii = _children3.length; i < ii; ++i) {\n var current = _children3[i];\n\n if (current.auOwnerView !== lastView) {\n viewIndex++;\n lastView = current.auOwnerView;\n\n if (viewIndex >= index && lastView !== view) {\n _children3.splice(i, 0, node);\n return current;\n }\n }\n }\n }\n\n found.auProjectionChildren.push(node);\n return found;\n }\n }\n\n return this.anchor;\n };\n\n ShadowSlot.prototype.projectTo = function projectTo(slots) {\n this.destinationSlots = slots;\n };\n\n ShadowSlot.prototype.projectFrom = function projectFrom(view, projectionSource) {\n var anchor = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createComment('anchor');\n var parent = this.anchor.parentNode;\n anchor.auSlotProjectFrom = projectionSource;\n anchor.auOwnerView = view;\n anchor.auProjectionChildren = [];\n parent.insertBefore(anchor, this.anchor);\n this.children.push(anchor);\n\n if (this.projectFromAnchors === null) {\n this.projectFromAnchors = [];\n }\n\n this.projectFromAnchors.push(anchor);\n };\n\n ShadowSlot.prototype.renderFallbackContent = function renderFallbackContent(view, nodes, projectionSource, index) {\n if (this.contentView === null) {\n this.contentView = this.fallbackFactory.create(this.ownerView.container);\n this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\n this.contentView.insertNodesBefore(this.anchor);\n }\n\n if (this.contentView.hasSlots) {\n var slots = this.contentView.slots;\n var projectFromAnchors = this.projectFromAnchors;\n\n if (projectFromAnchors !== null) {\n for (var slotName in slots) {\n var slot = slots[slotName];\n\n for (var i = 0, ii = projectFromAnchors.length; i < ii; ++i) {\n var anchor = projectFromAnchors[i];\n slot.projectFrom(anchor.auOwnerView, anchor.auSlotProjectFrom);\n }\n }\n }\n\n this.fallbackSlots = slots;\n ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index);\n }\n };\n\n ShadowSlot.prototype.created = function created(ownerView) {\n this.ownerView = ownerView;\n };\n\n ShadowSlot.prototype.bind = function bind(view) {\n if (this.contentView) {\n this.contentView.bind(view.bindingContext, view.overrideContext);\n }\n };\n\n ShadowSlot.prototype.attached = function attached() {\n if (this.contentView) {\n this.contentView.attached();\n }\n };\n\n ShadowSlot.prototype.detached = function detached() {\n if (this.contentView) {\n this.contentView.detached();\n }\n };\n\n ShadowSlot.prototype.unbind = function unbind() {\n if (this.contentView) {\n this.contentView.unbind();\n }\n };\n\n _createClass(ShadowSlot, [{\n key: 'needsFallbackRendering',\n get: function get() {\n return this.fallbackFactory && this.projections === 0;\n }\n }]);\n\n return ShadowSlot;\n}();\n\nvar ShadowDOM = (_temp4 = _class10 = function () {\n function ShadowDOM() {\n \n }\n\n ShadowDOM.getSlotName = function getSlotName(node) {\n if (node.auSlotAttribute === undefined) {\n return ShadowDOM.defaultSlotKey;\n }\n\n return node.auSlotAttribute.value;\n };\n\n ShadowDOM.distributeView = function distributeView(view, slots, projectionSource, index, destinationOverride) {\n var nodes = void 0;\n\n if (view === null) {\n nodes = noNodes;\n } else {\n var childNodes = view.fragment.childNodes;\n var ii = childNodes.length;\n nodes = new Array(ii);\n\n for (var i = 0; i < ii; ++i) {\n nodes[i] = childNodes[i];\n }\n }\n\n ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride);\n };\n\n ShadowDOM.undistributeView = function undistributeView(view, slots, projectionSource) {\n for (var slotName in slots) {\n slots[slotName].removeView(view, projectionSource);\n }\n };\n\n ShadowDOM.undistributeAll = function undistributeAll(slots, projectionSource) {\n for (var slotName in slots) {\n slots[slotName].removeAll(projectionSource);\n }\n };\n\n ShadowDOM.distributeNodes = function distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride) {\n for (var i = 0, ii = nodes.length; i < ii; ++i) {\n var currentNode = nodes[i];\n var nodeType = currentNode.nodeType;\n\n if (currentNode.isContentProjectionSource) {\n currentNode.viewSlot.projectTo(slots);\n\n for (var slotName in slots) {\n slots[slotName].projectFrom(view, currentNode.viewSlot);\n }\n\n nodes.splice(i, 1);\n ii--;i--;\n } else if (nodeType === 1 || nodeType === 3 || currentNode.viewSlot instanceof PassThroughSlot) {\n if (nodeType === 3 && _isAllWhitespace(currentNode)) {\n nodes.splice(i, 1);\n ii--;i--;\n } else {\n var found = slots[destinationOverride || ShadowDOM.getSlotName(currentNode)];\n\n if (found) {\n found.addNode(view, currentNode, projectionSource, index);\n nodes.splice(i, 1);\n ii--;i--;\n }\n }\n } else {\n nodes.splice(i, 1);\n ii--;i--;\n }\n }\n\n for (var _slotName in slots) {\n var slot = slots[_slotName];\n\n if (slot.needsFallbackRendering) {\n slot.renderFallbackContent(view, nodes, projectionSource, index);\n }\n }\n };\n\n return ShadowDOM;\n}(), _class10.defaultSlotKey = '__au-default-slot-key__', _temp4);\n\nfunction register(lookup, name, resource, type) {\n if (!name) {\n return;\n }\n\n var existing = lookup[name];\n if (existing) {\n if (existing !== resource) {\n throw new Error('Attempted to register ' + type + ' when one with the same name already exists. Name: ' + name + '.');\n }\n\n return;\n }\n\n lookup[name] = resource;\n}\n\nfunction validateBehaviorName(name, type) {\n if (/[A-Z]/.test(name)) {\n var newName = _hyphenate(name);\n aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('templating').warn('\\'' + name + '\\' is not a valid ' + type + ' name and has been converted to \\'' + newName + '\\'. Upper-case letters are not allowed because the DOM is not case-sensitive.');\n return newName;\n }\n return name;\n}\n\nvar conventionMark = '__au_resource__';\n\nvar ViewResources = function () {\n ViewResources.convention = function convention(target, existing) {\n var resource = void 0;\n\n if (existing && conventionMark in existing) {\n return existing;\n }\n if ('$resource' in target) {\n var config = target.$resource;\n\n if (typeof config === 'string') {\n resource = existing || new HtmlBehaviorResource();\n resource[conventionMark] = true;\n if (!resource.elementName) {\n resource.elementName = validateBehaviorName(config, 'custom element');\n }\n } else {\n if (typeof config === 'function') {\n config = config.call(target);\n }\n if (typeof config === 'string') {\n config = { name: config };\n }\n\n config = Object.assign({}, config);\n\n var resourceType = config.type || 'element';\n\n var _name = config.name;\n switch (resourceType) {\n case 'element':case 'attribute':\n resource = existing || new HtmlBehaviorResource();\n resource[conventionMark] = true;\n if (resourceType === 'element') {\n if (!resource.elementName) {\n resource.elementName = _name ? validateBehaviorName(_name, 'custom element') : _hyphenate(target.name);\n }\n } else {\n if (!resource.attributeName) {\n resource.attributeName = _name ? validateBehaviorName(_name, 'custom attribute') : _hyphenate(target.name);\n }\n }\n if ('templateController' in config) {\n config.liftsContent = config.templateController;\n delete config.templateController;\n }\n if ('defaultBindingMode' in config && resource.attributeDefaultBindingMode !== undefined) {\n config.attributeDefaultBindingMode = config.defaultBindingMode;\n delete config.defaultBindingMode;\n }\n\n delete config.name;\n\n Object.assign(resource, config);\n break;\n case 'valueConverter':\n resource = new aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"ValueConverterResource\"](Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"camelCase\"])(_name || target.name));\n break;\n case 'bindingBehavior':\n resource = new aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"BindingBehaviorResource\"](Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"camelCase\"])(_name || target.name));\n break;\n case 'viewEngineHooks':\n resource = new ViewEngineHooksResource();\n break;\n }\n }\n\n if (resource instanceof HtmlBehaviorResource) {\n var _bindables = typeof config === 'string' ? undefined : config.bindables;\n var currentProps = resource.properties;\n if (Array.isArray(_bindables)) {\n for (var i = 0, ii = _bindables.length; ii > i; ++i) {\n var prop = _bindables[i];\n if (!prop || typeof prop !== 'string' && !prop.name) {\n throw new Error('Invalid bindable property at \"' + i + '\" for class \"' + target.name + '\". Expected either a string or an object with \"name\" property.');\n }\n var newProp = new BindableProperty(prop);\n\n var existed = false;\n for (var j = 0, jj = currentProps.length; jj > j; ++j) {\n if (currentProps[j].name === newProp.name) {\n existed = true;\n break;\n }\n }\n if (existed) {\n continue;\n }\n newProp.registerWith(target, resource);\n }\n }\n }\n }\n return resource;\n };\n\n function ViewResources(parent, viewUrl) {\n \n\n this.bindingLanguage = null;\n\n this.parent = parent || null;\n this.hasParent = this.parent !== null;\n this.viewUrl = viewUrl || '';\n this.lookupFunctions = {\n valueConverters: this.getValueConverter.bind(this),\n bindingBehaviors: this.getBindingBehavior.bind(this)\n };\n this.attributes = Object.create(null);\n this.elements = Object.create(null);\n this.valueConverters = Object.create(null);\n this.bindingBehaviors = Object.create(null);\n this.attributeMap = Object.create(null);\n this.values = Object.create(null);\n this.beforeCompile = this.afterCompile = this.beforeCreate = this.afterCreate = this.beforeBind = this.beforeUnbind = false;\n }\n\n ViewResources.prototype._tryAddHook = function _tryAddHook(obj, name) {\n if (typeof obj[name] === 'function') {\n var func = obj[name].bind(obj);\n var counter = 1;\n var callbackName = void 0;\n\n while (this[callbackName = name + counter.toString()] !== undefined) {\n counter++;\n }\n\n this[name] = true;\n this[callbackName] = func;\n }\n };\n\n ViewResources.prototype._invokeHook = function _invokeHook(name, one, two, three, four) {\n if (this.hasParent) {\n this.parent._invokeHook(name, one, two, three, four);\n }\n\n if (this[name]) {\n this[name + '1'](one, two, three, four);\n\n var callbackName = name + '2';\n if (this[callbackName]) {\n this[callbackName](one, two, three, four);\n\n callbackName = name + '3';\n if (this[callbackName]) {\n this[callbackName](one, two, three, four);\n\n var counter = 4;\n\n while (this[callbackName = name + counter.toString()] !== undefined) {\n this[callbackName](one, two, three, four);\n counter++;\n }\n }\n }\n }\n };\n\n ViewResources.prototype.registerViewEngineHooks = function registerViewEngineHooks(hooks) {\n this._tryAddHook(hooks, 'beforeCompile');\n this._tryAddHook(hooks, 'afterCompile');\n this._tryAddHook(hooks, 'beforeCreate');\n this._tryAddHook(hooks, 'afterCreate');\n this._tryAddHook(hooks, 'beforeBind');\n this._tryAddHook(hooks, 'beforeUnbind');\n };\n\n ViewResources.prototype.getBindingLanguage = function getBindingLanguage(bindingLanguageFallback) {\n return this.bindingLanguage || (this.bindingLanguage = bindingLanguageFallback);\n };\n\n ViewResources.prototype.patchInParent = function patchInParent(newParent) {\n var originalParent = this.parent;\n\n this.parent = newParent || null;\n this.hasParent = this.parent !== null;\n\n if (newParent.parent === null) {\n newParent.parent = originalParent;\n newParent.hasParent = originalParent !== null;\n }\n };\n\n ViewResources.prototype.relativeToView = function relativeToView(path) {\n return Object(aurelia_path__WEBPACK_IMPORTED_MODULE_4__[\"relativeToFile\"])(path, this.viewUrl);\n };\n\n ViewResources.prototype.registerElement = function registerElement(tagName, behavior) {\n register(this.elements, tagName, behavior, 'an Element');\n };\n\n ViewResources.prototype.getElement = function getElement(tagName) {\n return this.elements[tagName] || (this.hasParent ? this.parent.getElement(tagName) : null);\n };\n\n ViewResources.prototype.mapAttribute = function mapAttribute(attribute) {\n return this.attributeMap[attribute] || (this.hasParent ? this.parent.mapAttribute(attribute) : null);\n };\n\n ViewResources.prototype.registerAttribute = function registerAttribute(attribute, behavior, knownAttribute) {\n this.attributeMap[attribute] = knownAttribute;\n register(this.attributes, attribute, behavior, 'an Attribute');\n };\n\n ViewResources.prototype.getAttribute = function getAttribute(attribute) {\n return this.attributes[attribute] || (this.hasParent ? this.parent.getAttribute(attribute) : null);\n };\n\n ViewResources.prototype.registerValueConverter = function registerValueConverter(name, valueConverter) {\n register(this.valueConverters, name, valueConverter, 'a ValueConverter');\n };\n\n ViewResources.prototype.getValueConverter = function getValueConverter(name) {\n return this.valueConverters[name] || (this.hasParent ? this.parent.getValueConverter(name) : null);\n };\n\n ViewResources.prototype.registerBindingBehavior = function registerBindingBehavior(name, bindingBehavior) {\n register(this.bindingBehaviors, name, bindingBehavior, 'a BindingBehavior');\n };\n\n ViewResources.prototype.getBindingBehavior = function getBindingBehavior(name) {\n return this.bindingBehaviors[name] || (this.hasParent ? this.parent.getBindingBehavior(name) : null);\n };\n\n ViewResources.prototype.registerValue = function registerValue(name, value) {\n register(this.values, name, value, 'a value');\n };\n\n ViewResources.prototype.getValue = function getValue(name) {\n return this.values[name] || (this.hasParent ? this.parent.getValue(name) : null);\n };\n\n ViewResources.prototype.autoRegister = function autoRegister(container, impl) {\n var resourceTypeMeta = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, impl);\n if (resourceTypeMeta) {\n if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n ViewResources.convention(impl, resourceTypeMeta);\n\n if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n HtmlBehaviorResource.convention(impl.name, resourceTypeMeta);\n }\n if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n resourceTypeMeta.elementName = _hyphenate(impl.name);\n }\n }\n } else {\n resourceTypeMeta = ViewResources.convention(impl) || HtmlBehaviorResource.convention(impl.name) || aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"ValueConverterResource\"].convention(impl.name) || aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"BindingBehaviorResource\"].convention(impl.name) || ViewEngineHooksResource.convention(impl.name);\n if (!resourceTypeMeta) {\n resourceTypeMeta = new HtmlBehaviorResource();\n resourceTypeMeta.elementName = _hyphenate(impl.name);\n }\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, resourceTypeMeta, impl);\n }\n resourceTypeMeta.initialize(container, impl);\n resourceTypeMeta.register(this);\n return resourceTypeMeta;\n };\n\n return ViewResources;\n}();\n\nvar View = function () {\n function View(container, viewFactory, fragment, controllers, bindings, children, slots) {\n \n\n this.container = container;\n this.viewFactory = viewFactory;\n this.resources = viewFactory.resources;\n this.fragment = fragment;\n this.firstChild = fragment.firstChild;\n this.lastChild = fragment.lastChild;\n this.controllers = controllers;\n this.bindings = bindings;\n this.children = children;\n this.slots = slots;\n this.hasSlots = false;\n this.fromCache = false;\n this.isBound = false;\n this.isAttached = false;\n this.bindingContext = null;\n this.overrideContext = null;\n this.controller = null;\n this.viewModelScope = null;\n this.animatableElement = undefined;\n this._isUserControlled = false;\n this.contentView = null;\n\n for (var _key3 in slots) {\n this.hasSlots = true;\n break;\n }\n }\n\n View.prototype.returnToCache = function returnToCache() {\n this.viewFactory.returnViewToCache(this);\n };\n\n View.prototype.created = function created() {\n var i = void 0;\n var ii = void 0;\n var controllers = this.controllers;\n\n for (i = 0, ii = controllers.length; i < ii; ++i) {\n controllers[i].created(this);\n }\n };\n\n View.prototype.bind = function bind(bindingContext, overrideContext, _systemUpdate) {\n var controllers = void 0;\n var bindings = void 0;\n var children = void 0;\n var i = void 0;\n var ii = void 0;\n\n if (_systemUpdate && this._isUserControlled) {\n return;\n }\n\n if (this.isBound) {\n if (this.bindingContext === bindingContext) {\n return;\n }\n\n this.unbind();\n }\n\n this.isBound = true;\n this.bindingContext = bindingContext;\n this.overrideContext = overrideContext || Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"createOverrideContext\"])(bindingContext);\n\n this.resources._invokeHook('beforeBind', this);\n\n bindings = this.bindings;\n for (i = 0, ii = bindings.length; i < ii; ++i) {\n bindings[i].bind(this);\n }\n\n if (this.viewModelScope !== null) {\n bindingContext.bind(this.viewModelScope.bindingContext, this.viewModelScope.overrideContext);\n this.viewModelScope = null;\n }\n\n controllers = this.controllers;\n for (i = 0, ii = controllers.length; i < ii; ++i) {\n controllers[i].bind(this);\n }\n\n children = this.children;\n for (i = 0, ii = children.length; i < ii; ++i) {\n children[i].bind(bindingContext, overrideContext, true);\n }\n\n if (this.hasSlots) {\n ShadowDOM.distributeView(this.contentView, this.slots);\n }\n };\n\n View.prototype.addBinding = function addBinding(binding) {\n this.bindings.push(binding);\n\n if (this.isBound) {\n binding.bind(this);\n }\n };\n\n View.prototype.unbind = function unbind() {\n var controllers = void 0;\n var bindings = void 0;\n var children = void 0;\n var i = void 0;\n var ii = void 0;\n\n if (this.isBound) {\n this.isBound = false;\n this.resources._invokeHook('beforeUnbind', this);\n\n if (this.controller !== null) {\n this.controller.unbind();\n }\n\n bindings = this.bindings;\n for (i = 0, ii = bindings.length; i < ii; ++i) {\n bindings[i].unbind();\n }\n\n controllers = this.controllers;\n for (i = 0, ii = controllers.length; i < ii; ++i) {\n controllers[i].unbind();\n }\n\n children = this.children;\n for (i = 0, ii = children.length; i < ii; ++i) {\n children[i].unbind();\n }\n\n this.bindingContext = null;\n this.overrideContext = null;\n }\n };\n\n View.prototype.insertNodesBefore = function insertNodesBefore(refNode) {\n refNode.parentNode.insertBefore(this.fragment, refNode);\n };\n\n View.prototype.appendNodesTo = function appendNodesTo(parent) {\n parent.appendChild(this.fragment);\n };\n\n View.prototype.removeNodes = function removeNodes() {\n var fragment = this.fragment;\n var current = this.firstChild;\n var end = this.lastChild;\n var next = void 0;\n\n while (current) {\n next = current.nextSibling;\n fragment.appendChild(current);\n\n if (current === end) {\n break;\n }\n\n current = next;\n }\n };\n\n View.prototype.attached = function attached() {\n var controllers = void 0;\n var children = void 0;\n var i = void 0;\n var ii = void 0;\n\n if (this.isAttached) {\n return;\n }\n\n this.isAttached = true;\n\n if (this.controller !== null) {\n this.controller.attached();\n }\n\n controllers = this.controllers;\n for (i = 0, ii = controllers.length; i < ii; ++i) {\n controllers[i].attached();\n }\n\n children = this.children;\n for (i = 0, ii = children.length; i < ii; ++i) {\n children[i].attached();\n }\n };\n\n View.prototype.detached = function detached() {\n var controllers = void 0;\n var children = void 0;\n var i = void 0;\n var ii = void 0;\n\n if (this.isAttached) {\n this.isAttached = false;\n\n if (this.controller !== null) {\n this.controller.detached();\n }\n\n controllers = this.controllers;\n for (i = 0, ii = controllers.length; i < ii; ++i) {\n controllers[i].detached();\n }\n\n children = this.children;\n for (i = 0, ii = children.length; i < ii; ++i) {\n children[i].detached();\n }\n }\n };\n\n return View;\n}();\n\nfunction getAnimatableElement(view) {\n if (view.animatableElement !== undefined) {\n return view.animatableElement;\n }\n\n var current = view.firstChild;\n\n while (current && current.nodeType !== 1) {\n current = current.nextSibling;\n }\n\n if (current && current.nodeType === 1) {\n return view.animatableElement = current.classList.contains('au-animate') ? current : null;\n }\n\n return view.animatableElement = null;\n}\n\nvar ViewSlot = function () {\n function ViewSlot(anchor, anchorIsContainer) {\n var animator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Animator.instance;\n\n \n\n this.anchor = anchor;\n this.anchorIsContainer = anchorIsContainer;\n this.bindingContext = null;\n this.overrideContext = null;\n this.animator = animator;\n this.children = [];\n this.isBound = false;\n this.isAttached = false;\n this.contentSelectors = null;\n anchor.viewSlot = this;\n anchor.isContentProjectionSource = false;\n }\n\n ViewSlot.prototype.animateView = function animateView(view) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'enter';\n\n var animatableElement = getAnimatableElement(view);\n\n if (animatableElement !== null) {\n switch (direction) {\n case 'enter':\n return this.animator.enter(animatableElement);\n case 'leave':\n return this.animator.leave(animatableElement);\n default:\n throw new Error('Invalid animation direction: ' + direction);\n }\n }\n };\n\n ViewSlot.prototype.transformChildNodesIntoView = function transformChildNodesIntoView() {\n var parent = this.anchor;\n\n this.children.push({\n fragment: parent,\n firstChild: parent.firstChild,\n lastChild: parent.lastChild,\n returnToCache: function returnToCache() {},\n removeNodes: function removeNodes() {\n var last = void 0;\n\n while (last = parent.lastChild) {\n parent.removeChild(last);\n }\n },\n created: function created() {},\n bind: function bind() {},\n unbind: function unbind() {},\n attached: function attached() {},\n detached: function detached() {}\n });\n };\n\n ViewSlot.prototype.bind = function bind(bindingContext, overrideContext) {\n var i = void 0;\n var ii = void 0;\n var children = void 0;\n\n if (this.isBound) {\n if (this.bindingContext === bindingContext) {\n return;\n }\n\n this.unbind();\n }\n\n this.isBound = true;\n this.bindingContext = bindingContext = bindingContext || this.bindingContext;\n this.overrideContext = overrideContext = overrideContext || this.overrideContext;\n\n children = this.children;\n for (i = 0, ii = children.length; i < ii; ++i) {\n children[i].bind(bindingContext, overrideContext, true);\n }\n };\n\n ViewSlot.prototype.unbind = function unbind() {\n if (this.isBound) {\n var i = void 0;\n var ii = void 0;\n var _children4 = this.children;\n\n this.isBound = false;\n this.bindingContext = null;\n this.overrideContext = null;\n\n for (i = 0, ii = _children4.length; i < ii; ++i) {\n _children4[i].unbind();\n }\n }\n };\n\n ViewSlot.prototype.add = function add(view) {\n if (this.anchorIsContainer) {\n view.appendNodesTo(this.anchor);\n } else {\n view.insertNodesBefore(this.anchor);\n }\n\n this.children.push(view);\n\n if (this.isAttached) {\n view.attached();\n return this.animateView(view, 'enter');\n }\n };\n\n ViewSlot.prototype.insert = function insert(index, view) {\n var children = this.children;\n var length = children.length;\n\n if (index === 0 && length === 0 || index >= length) {\n return this.add(view);\n }\n\n view.insertNodesBefore(children[index].firstChild);\n children.splice(index, 0, view);\n\n if (this.isAttached) {\n view.attached();\n return this.animateView(view, 'enter');\n }\n };\n\n ViewSlot.prototype.move = function move(sourceIndex, targetIndex) {\n if (sourceIndex === targetIndex) {\n return;\n }\n\n var children = this.children;\n var view = children[sourceIndex];\n\n view.removeNodes();\n view.insertNodesBefore(children[targetIndex].firstChild);\n children.splice(sourceIndex, 1);\n children.splice(targetIndex, 0, view);\n };\n\n ViewSlot.prototype.remove = function remove(view, returnToCache, skipAnimation) {\n return this.removeAt(this.children.indexOf(view), returnToCache, skipAnimation);\n };\n\n ViewSlot.prototype.removeMany = function removeMany(viewsToRemove, returnToCache, skipAnimation) {\n var _this3 = this;\n\n var children = this.children;\n var ii = viewsToRemove.length;\n var i = void 0;\n var rmPromises = [];\n\n viewsToRemove.forEach(function (child) {\n if (skipAnimation) {\n child.removeNodes();\n return;\n }\n\n var animation = _this3.animateView(child, 'leave');\n if (animation) {\n rmPromises.push(animation.then(function () {\n return child.removeNodes();\n }));\n } else {\n child.removeNodes();\n }\n });\n\n var removeAction = function removeAction() {\n if (_this3.isAttached) {\n for (i = 0; i < ii; ++i) {\n viewsToRemove[i].detached();\n }\n }\n\n if (returnToCache) {\n for (i = 0; i < ii; ++i) {\n viewsToRemove[i].returnToCache();\n }\n }\n\n for (i = 0; i < ii; ++i) {\n var index = children.indexOf(viewsToRemove[i]);\n if (index >= 0) {\n children.splice(index, 1);\n }\n }\n };\n\n if (rmPromises.length > 0) {\n return Promise.all(rmPromises).then(function () {\n return removeAction();\n });\n }\n\n return removeAction();\n };\n\n ViewSlot.prototype.removeAt = function removeAt(index, returnToCache, skipAnimation) {\n var _this4 = this;\n\n var view = this.children[index];\n\n var removeAction = function removeAction() {\n index = _this4.children.indexOf(view);\n view.removeNodes();\n _this4.children.splice(index, 1);\n\n if (_this4.isAttached) {\n view.detached();\n }\n\n if (returnToCache) {\n view.returnToCache();\n }\n\n return view;\n };\n\n if (!skipAnimation) {\n var animation = this.animateView(view, 'leave');\n if (animation) {\n return animation.then(function () {\n return removeAction();\n });\n }\n }\n\n return removeAction();\n };\n\n ViewSlot.prototype.removeAll = function removeAll(returnToCache, skipAnimation) {\n var _this5 = this;\n\n var children = this.children;\n var ii = children.length;\n var i = void 0;\n var rmPromises = [];\n\n children.forEach(function (child) {\n if (skipAnimation) {\n child.removeNodes();\n return;\n }\n\n var animation = _this5.animateView(child, 'leave');\n if (animation) {\n rmPromises.push(animation.then(function () {\n return child.removeNodes();\n }));\n } else {\n child.removeNodes();\n }\n });\n\n var removeAction = function removeAction() {\n if (_this5.isAttached) {\n for (i = 0; i < ii; ++i) {\n children[i].detached();\n }\n }\n\n if (returnToCache) {\n for (i = 0; i < ii; ++i) {\n var _child3 = children[i];\n\n if (_child3) {\n _child3.returnToCache();\n }\n }\n }\n\n _this5.children = [];\n };\n\n if (rmPromises.length > 0) {\n return Promise.all(rmPromises).then(function () {\n return removeAction();\n });\n }\n\n return removeAction();\n };\n\n ViewSlot.prototype.attached = function attached() {\n var i = void 0;\n var ii = void 0;\n var children = void 0;\n var child = void 0;\n\n if (this.isAttached) {\n return;\n }\n\n this.isAttached = true;\n\n children = this.children;\n for (i = 0, ii = children.length; i < ii; ++i) {\n child = children[i];\n child.attached();\n this.animateView(child, 'enter');\n }\n };\n\n ViewSlot.prototype.detached = function detached() {\n var i = void 0;\n var ii = void 0;\n var children = void 0;\n\n if (this.isAttached) {\n this.isAttached = false;\n children = this.children;\n for (i = 0, ii = children.length; i < ii; ++i) {\n children[i].detached();\n }\n }\n };\n\n ViewSlot.prototype.projectTo = function projectTo(slots) {\n var _this6 = this;\n\n this.projectToSlots = slots;\n this.add = this._projectionAdd;\n this.insert = this._projectionInsert;\n this.move = this._projectionMove;\n this.remove = this._projectionRemove;\n this.removeAt = this._projectionRemoveAt;\n this.removeMany = this._projectionRemoveMany;\n this.removeAll = this._projectionRemoveAll;\n this.children.forEach(function (view) {\n return ShadowDOM.distributeView(view, slots, _this6);\n });\n };\n\n ViewSlot.prototype._projectionAdd = function _projectionAdd(view) {\n ShadowDOM.distributeView(view, this.projectToSlots, this);\n\n this.children.push(view);\n\n if (this.isAttached) {\n view.attached();\n }\n };\n\n ViewSlot.prototype._projectionInsert = function _projectionInsert(index, view) {\n if (index === 0 && !this.children.length || index >= this.children.length) {\n this.add(view);\n } else {\n ShadowDOM.distributeView(view, this.projectToSlots, this, index);\n\n this.children.splice(index, 0, view);\n\n if (this.isAttached) {\n view.attached();\n }\n }\n };\n\n ViewSlot.prototype._projectionMove = function _projectionMove(sourceIndex, targetIndex) {\n if (sourceIndex === targetIndex) {\n return;\n }\n\n var children = this.children;\n var view = children[sourceIndex];\n\n ShadowDOM.undistributeView(view, this.projectToSlots, this);\n ShadowDOM.distributeView(view, this.projectToSlots, this, targetIndex);\n\n children.splice(sourceIndex, 1);\n children.splice(targetIndex, 0, view);\n };\n\n ViewSlot.prototype._projectionRemove = function _projectionRemove(view, returnToCache) {\n ShadowDOM.undistributeView(view, this.projectToSlots, this);\n this.children.splice(this.children.indexOf(view), 1);\n\n if (this.isAttached) {\n view.detached();\n }\n if (returnToCache) {\n view.returnToCache();\n }\n };\n\n ViewSlot.prototype._projectionRemoveAt = function _projectionRemoveAt(index, returnToCache) {\n var view = this.children[index];\n\n ShadowDOM.undistributeView(view, this.projectToSlots, this);\n this.children.splice(index, 1);\n\n if (this.isAttached) {\n view.detached();\n }\n if (returnToCache) {\n view.returnToCache();\n }\n };\n\n ViewSlot.prototype._projectionRemoveMany = function _projectionRemoveMany(viewsToRemove, returnToCache) {\n var _this7 = this;\n\n viewsToRemove.forEach(function (view) {\n return _this7.remove(view, returnToCache);\n });\n };\n\n ViewSlot.prototype._projectionRemoveAll = function _projectionRemoveAll(returnToCache) {\n ShadowDOM.undistributeAll(this.projectToSlots, this);\n\n var children = this.children;\n var ii = children.length;\n\n for (var i = 0; i < ii; ++i) {\n if (returnToCache) {\n children[i].returnToCache();\n } else if (this.isAttached) {\n children[i].detached();\n }\n }\n\n this.children = [];\n };\n\n return ViewSlot;\n}();\n\nvar ProviderResolver = Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[\"resolver\"])(_class12 = function () {\n function ProviderResolver() {\n \n }\n\n ProviderResolver.prototype.get = function get(container, key) {\n var id = key.__providerId__;\n return id in container ? container[id] : container[id] = container.invoke(key);\n };\n\n return ProviderResolver;\n}()) || _class12;\n\nvar providerResolverInstance = new ProviderResolver();\n\nfunction elementContainerGet(key) {\n if (key === aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].Element) {\n return this.element;\n }\n\n if (key === BoundViewFactory) {\n if (this.boundViewFactory) {\n return this.boundViewFactory;\n }\n\n var factory = this.instruction.viewFactory;\n var _partReplacements = this.partReplacements;\n\n if (_partReplacements) {\n factory = _partReplacements[factory.part] || factory;\n }\n\n this.boundViewFactory = new BoundViewFactory(this, factory, _partReplacements);\n return this.boundViewFactory;\n }\n\n if (key === ViewSlot) {\n if (this.viewSlot === undefined) {\n this.viewSlot = new ViewSlot(this.element, this.instruction.anchorIsContainer);\n this.element.isContentProjectionSource = this.instruction.lifting;\n this.children.push(this.viewSlot);\n }\n\n return this.viewSlot;\n }\n\n if (key === ElementEvents) {\n return this.elementEvents || (this.elementEvents = new ElementEvents(this.element));\n }\n\n if (key === CompositionTransaction) {\n return this.compositionTransaction || (this.compositionTransaction = this.parent.get(key));\n }\n\n if (key === ViewResources) {\n return this.viewResources;\n }\n\n if (key === TargetInstruction) {\n return this.instruction;\n }\n\n return this.superGet(key);\n}\n\nfunction createElementContainer(parent, element, instruction, children, partReplacements, resources) {\n var container = parent.createChild();\n var providers = void 0;\n var i = void 0;\n\n container.element = element;\n container.instruction = instruction;\n container.children = children;\n container.viewResources = resources;\n container.partReplacements = partReplacements;\n\n providers = instruction.providers;\n i = providers.length;\n\n while (i--) {\n container._resolvers.set(providers[i], providerResolverInstance);\n }\n\n container.superGet = container.get;\n container.get = elementContainerGet;\n\n return container;\n}\n\nfunction hasAttribute(name) {\n return this._element.hasAttribute(name);\n}\n\nfunction getAttribute(name) {\n return this._element.getAttribute(name);\n}\n\nfunction setAttribute(name, value) {\n this._element.setAttribute(name, value);\n}\n\nfunction makeElementIntoAnchor(element, elementInstruction) {\n var anchor = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createComment('anchor');\n\n if (elementInstruction) {\n var firstChild = element.firstChild;\n\n if (firstChild && firstChild.tagName === 'AU-CONTENT') {\n anchor.contentElement = firstChild;\n }\n\n anchor._element = element;\n\n anchor.hasAttribute = hasAttribute;\n anchor.getAttribute = getAttribute;\n anchor.setAttribute = setAttribute;\n }\n\n aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].replaceNode(anchor, element);\n\n return anchor;\n}\n\nfunction applyInstructions(containers, element, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources) {\n var behaviorInstructions = instruction.behaviorInstructions;\n var expressions = instruction.expressions;\n var elementContainer = void 0;\n var i = void 0;\n var ii = void 0;\n var current = void 0;\n var instance = void 0;\n\n if (instruction.contentExpression) {\n bindings.push(instruction.contentExpression.createBinding(element.nextSibling));\n element.nextSibling.auInterpolationTarget = true;\n element.parentNode.removeChild(element);\n return;\n }\n\n if (instruction.shadowSlot) {\n var commentAnchor = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createComment('slot');\n var slot = void 0;\n\n if (instruction.slotDestination) {\n slot = new PassThroughSlot(commentAnchor, instruction.slotName, instruction.slotDestination, instruction.slotFallbackFactory);\n } else {\n slot = new ShadowSlot(commentAnchor, instruction.slotName, instruction.slotFallbackFactory);\n }\n\n aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].replaceNode(commentAnchor, element);\n shadowSlots[instruction.slotName] = slot;\n controllers.push(slot);\n return;\n }\n\n if (instruction.letElement) {\n for (i = 0, ii = expressions.length; i < ii; ++i) {\n bindings.push(expressions[i].createBinding());\n }\n element.parentNode.removeChild(element);\n return;\n }\n\n if (behaviorInstructions.length) {\n if (!instruction.anchorIsContainer) {\n element = makeElementIntoAnchor(element, instruction.elementInstruction);\n }\n\n containers[instruction.injectorId] = elementContainer = createElementContainer(containers[instruction.parentInjectorId], element, instruction, children, partReplacements, resources);\n\n for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n current = behaviorInstructions[i];\n instance = current.type.create(elementContainer, current, element, bindings);\n controllers.push(instance);\n }\n }\n\n for (i = 0, ii = expressions.length; i < ii; ++i) {\n bindings.push(expressions[i].createBinding(element));\n }\n}\n\nfunction styleStringToObject(style, target) {\n var attributes = style.split(';');\n var firstIndexOfColon = void 0;\n var i = void 0;\n var current = void 0;\n var key = void 0;\n var value = void 0;\n\n target = target || {};\n\n for (i = 0; i < attributes.length; i++) {\n current = attributes[i];\n firstIndexOfColon = current.indexOf(':');\n key = current.substring(0, firstIndexOfColon).trim();\n value = current.substring(firstIndexOfColon + 1).trim();\n target[key] = value;\n }\n\n return target;\n}\n\nfunction styleObjectToString(obj) {\n var result = '';\n\n for (var _key4 in obj) {\n result += _key4 + ':' + obj[_key4] + ';';\n }\n\n return result;\n}\n\nfunction applySurrogateInstruction(container, element, instruction, controllers, bindings, children) {\n var behaviorInstructions = instruction.behaviorInstructions;\n var expressions = instruction.expressions;\n var providers = instruction.providers;\n var values = instruction.values;\n var i = void 0;\n var ii = void 0;\n var current = void 0;\n var instance = void 0;\n var currentAttributeValue = void 0;\n\n i = providers.length;\n while (i--) {\n container._resolvers.set(providers[i], providerResolverInstance);\n }\n\n for (var _key5 in values) {\n currentAttributeValue = element.getAttribute(_key5);\n\n if (currentAttributeValue) {\n if (_key5 === 'class') {\n element.setAttribute('class', currentAttributeValue + ' ' + values[_key5]);\n } else if (_key5 === 'style') {\n var styleObject = styleStringToObject(values[_key5]);\n styleStringToObject(currentAttributeValue, styleObject);\n element.setAttribute('style', styleObjectToString(styleObject));\n }\n } else {\n element.setAttribute(_key5, values[_key5]);\n }\n }\n\n if (behaviorInstructions.length) {\n for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n current = behaviorInstructions[i];\n instance = current.type.create(container, current, element, bindings);\n\n if (instance.contentView) {\n children.push(instance.contentView);\n }\n\n controllers.push(instance);\n }\n }\n\n for (i = 0, ii = expressions.length; i < ii; ++i) {\n bindings.push(expressions[i].createBinding(element));\n }\n}\n\nvar BoundViewFactory = function () {\n function BoundViewFactory(parentContainer, viewFactory, partReplacements) {\n \n\n this.parentContainer = parentContainer;\n this.viewFactory = viewFactory;\n this.factoryCreateInstruction = { partReplacements: partReplacements };\n }\n\n BoundViewFactory.prototype.create = function create() {\n var view = this.viewFactory.create(this.parentContainer.createChild(), this.factoryCreateInstruction);\n view._isUserControlled = true;\n return view;\n };\n\n BoundViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\n };\n\n BoundViewFactory.prototype.getCachedView = function getCachedView() {\n return this.viewFactory.getCachedView();\n };\n\n BoundViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n this.viewFactory.returnViewToCache(view);\n };\n\n _createClass(BoundViewFactory, [{\n key: 'isCaching',\n get: function get() {\n return this.viewFactory.isCaching;\n }\n }]);\n\n return BoundViewFactory;\n}();\n\nvar ViewFactory = function () {\n function ViewFactory(template, instructions, resources) {\n \n\n this.isCaching = false;\n\n this.template = template;\n this.instructions = instructions;\n this.resources = resources;\n this.cacheSize = -1;\n this.cache = null;\n }\n\n ViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n if (size) {\n if (size === '*') {\n size = Number.MAX_VALUE;\n } else if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n }\n\n if (this.cacheSize === -1 || !doNotOverrideIfAlreadySet) {\n this.cacheSize = size;\n }\n\n if (this.cacheSize > 0) {\n this.cache = [];\n } else {\n this.cache = null;\n }\n\n this.isCaching = this.cacheSize > 0;\n };\n\n ViewFactory.prototype.getCachedView = function getCachedView() {\n return this.cache !== null ? this.cache.pop() || null : null;\n };\n\n ViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n if (view.isAttached) {\n view.detached();\n }\n\n if (view.isBound) {\n view.unbind();\n }\n\n if (this.cache !== null && this.cache.length < this.cacheSize) {\n view.fromCache = true;\n this.cache.push(view);\n }\n };\n\n ViewFactory.prototype.create = function create(container, createInstruction, element) {\n createInstruction = createInstruction || BehaviorInstruction.normal;\n\n var cachedView = this.getCachedView();\n if (cachedView !== null) {\n return cachedView;\n }\n\n var fragment = createInstruction.enhance ? this.template : this.template.cloneNode(true);\n var instructables = fragment.querySelectorAll('.au-target');\n var instructions = this.instructions;\n var resources = this.resources;\n var controllers = [];\n var bindings = [];\n var children = [];\n var shadowSlots = Object.create(null);\n var containers = { root: container };\n var partReplacements = createInstruction.partReplacements;\n var i = void 0;\n var ii = void 0;\n var view = void 0;\n var instructable = void 0;\n var instruction = void 0;\n\n this.resources._invokeHook('beforeCreate', this, container, fragment, createInstruction);\n\n if (element && this.surrogateInstruction !== null) {\n applySurrogateInstruction(container, element, this.surrogateInstruction, controllers, bindings, children);\n }\n\n if (createInstruction.enhance && fragment.hasAttribute('au-target-id')) {\n instructable = fragment;\n instruction = instructions[instructable.getAttribute('au-target-id')];\n applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\n }\n\n for (i = 0, ii = instructables.length; i < ii; ++i) {\n instructable = instructables[i];\n instruction = instructions[instructable.getAttribute('au-target-id')];\n applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\n }\n\n view = new View(container, this, fragment, controllers, bindings, children, shadowSlots);\n\n if (!createInstruction.initiatedByBehavior) {\n view.created();\n }\n\n this.resources._invokeHook('afterCreate', view);\n\n return view;\n };\n\n return ViewFactory;\n}();\n\nvar nextInjectorId = 0;\nfunction getNextInjectorId() {\n return ++nextInjectorId;\n}\n\nvar lastAUTargetID = 0;\nfunction getNextAUTargetID() {\n return (++lastAUTargetID).toString();\n}\n\nfunction makeIntoInstructionTarget(element) {\n var value = element.getAttribute('class');\n var auTargetID = getNextAUTargetID();\n\n element.setAttribute('class', value ? value + ' au-target' : 'au-target');\n element.setAttribute('au-target-id', auTargetID);\n\n return auTargetID;\n}\n\nfunction makeShadowSlot(compiler, resources, node, instructions, parentInjectorId) {\n var auShadowSlot = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createElement('au-shadow-slot');\n aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].replaceNode(auShadowSlot, node);\n\n var auTargetID = makeIntoInstructionTarget(auShadowSlot);\n var instruction = TargetInstruction.shadowSlot(parentInjectorId);\n\n instruction.slotName = node.getAttribute('name') || ShadowDOM.defaultSlotKey;\n instruction.slotDestination = node.getAttribute('slot');\n\n if (node.innerHTML.trim()) {\n var fragment = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createDocumentFragment();\n var _child4 = void 0;\n\n while (_child4 = node.firstChild) {\n fragment.appendChild(_child4);\n }\n\n instruction.slotFallbackFactory = compiler.compile(fragment, resources);\n }\n\n instructions[auTargetID] = instruction;\n\n return auShadowSlot;\n}\n\nvar defaultLetHandler = BindingLanguage.prototype.createLetExpressions;\n\nvar ViewCompiler = function () {\n ViewCompiler.inject = function inject() {\n return [BindingLanguage, ViewResources];\n };\n\n function ViewCompiler(bindingLanguage, resources) {\n \n\n this.bindingLanguage = bindingLanguage;\n this.resources = resources;\n }\n\n ViewCompiler.prototype.compile = function compile(source, resources, compileInstruction) {\n resources = resources || this.resources;\n compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n source = typeof source === 'string' ? aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createTemplateFromMarkup(source) : source;\n\n var content = void 0;\n var part = void 0;\n var cacheSize = void 0;\n\n if (source.content) {\n part = source.getAttribute('part');\n cacheSize = source.getAttribute('view-cache');\n content = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].adoptNode(source.content);\n } else {\n content = source;\n }\n\n compileInstruction.targetShadowDOM = compileInstruction.targetShadowDOM && aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"FEATURE\"].shadowDOM;\n resources._invokeHook('beforeCompile', content, resources, compileInstruction);\n\n var instructions = {};\n this._compileNode(content, resources, instructions, source, 'root', !compileInstruction.targetShadowDOM);\n\n var firstChild = content.firstChild;\n if (firstChild && firstChild.nodeType === 1) {\n var targetId = firstChild.getAttribute('au-target-id');\n if (targetId) {\n var ins = instructions[targetId];\n\n if (ins.shadowSlot || ins.lifting || ins.elementInstruction && !ins.elementInstruction.anchorIsContainer) {\n content.insertBefore(aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createComment('view'), firstChild);\n }\n }\n }\n\n var factory = new ViewFactory(content, instructions, resources);\n\n factory.surrogateInstruction = compileInstruction.compileSurrogate ? this._compileSurrogate(source, resources) : null;\n factory.part = part;\n\n if (cacheSize) {\n factory.setCacheSize(cacheSize);\n }\n\n resources._invokeHook('afterCompile', factory);\n\n return factory;\n };\n\n ViewCompiler.prototype._compileNode = function _compileNode(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\n switch (node.nodeType) {\n case 1:\n return this._compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM);\n case 3:\n var expression = resources.getBindingLanguage(this.bindingLanguage).inspectTextContent(resources, node.wholeText);\n if (expression) {\n var marker = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createElement('au-marker');\n var auTargetID = makeIntoInstructionTarget(marker);\n (node.parentNode || parentNode).insertBefore(marker, node);\n node.textContent = ' ';\n instructions[auTargetID] = TargetInstruction.contentExpression(expression);\n\n while (node.nextSibling && node.nextSibling.nodeType === 3) {\n (node.parentNode || parentNode).removeChild(node.nextSibling);\n }\n } else {\n while (node.nextSibling && node.nextSibling.nodeType === 3) {\n node = node.nextSibling;\n }\n }\n return node.nextSibling;\n case 11:\n var currentChild = node.firstChild;\n while (currentChild) {\n currentChild = this._compileNode(currentChild, resources, instructions, node, parentInjectorId, targetLightDOM);\n }\n break;\n default:\n break;\n }\n\n return node.nextSibling;\n };\n\n ViewCompiler.prototype._compileSurrogate = function _compileSurrogate(node, resources) {\n var tagName = node.tagName.toLowerCase();\n var attributes = node.attributes;\n var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\n var knownAttribute = void 0;\n var property = void 0;\n var instruction = void 0;\n var i = void 0;\n var ii = void 0;\n var attr = void 0;\n var attrName = void 0;\n var attrValue = void 0;\n var info = void 0;\n var type = void 0;\n var expressions = [];\n var expression = void 0;\n var behaviorInstructions = [];\n var values = {};\n var hasValues = false;\n var providers = [];\n\n for (i = 0, ii = attributes.length; i < ii; ++i) {\n attr = attributes[i];\n attrName = attr.name;\n attrValue = attr.value;\n\n info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\n type = resources.getAttribute(info.attrName);\n\n if (type) {\n knownAttribute = resources.mapAttribute(info.attrName);\n if (knownAttribute) {\n property = type.attributes[knownAttribute];\n\n if (property) {\n info.defaultBindingMode = property.defaultBindingMode;\n\n if (!info.command && !info.expression) {\n info.command = property.hasOptions ? 'options' : null;\n }\n\n if (info.command && info.command !== 'options' && type.primaryProperty) {\n var _primaryProperty = type.primaryProperty;\n attrName = info.attrName = _primaryProperty.attribute;\n\n info.defaultBindingMode = _primaryProperty.defaultBindingMode;\n }\n }\n }\n }\n\n instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\n\n if (instruction) {\n if (instruction.alteredAttr) {\n type = resources.getAttribute(instruction.attrName);\n }\n\n if (instruction.discrete) {\n expressions.push(instruction);\n } else {\n if (type) {\n instruction.type = type;\n this._configureProperties(instruction, resources);\n\n if (type.liftsContent) {\n throw new Error('You cannot place a template controller on a surrogate element.');\n } else {\n behaviorInstructions.push(instruction);\n }\n } else {\n expressions.push(instruction.attributes[instruction.attrName]);\n }\n }\n } else {\n if (type) {\n instruction = BehaviorInstruction.attribute(attrName, type);\n instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\n\n if (type.liftsContent) {\n throw new Error('You cannot place a template controller on a surrogate element.');\n } else {\n behaviorInstructions.push(instruction);\n }\n } else if (attrName !== 'id' && attrName !== 'part' && attrName !== 'replace-part') {\n hasValues = true;\n values[attrName] = attrValue;\n }\n }\n }\n\n if (expressions.length || behaviorInstructions.length || hasValues) {\n for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n instruction = behaviorInstructions[i];\n instruction.type.compile(this, resources, node, instruction);\n providers.push(instruction.type.target);\n }\n\n for (i = 0, ii = expressions.length; i < ii; ++i) {\n expression = expressions[i];\n if (expression.attrToRemove !== undefined) {\n node.removeAttribute(expression.attrToRemove);\n }\n }\n\n return TargetInstruction.surrogate(providers, behaviorInstructions, expressions, values);\n }\n\n return null;\n };\n\n ViewCompiler.prototype._compileElement = function _compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\n var tagName = node.tagName.toLowerCase();\n var attributes = node.attributes;\n var expressions = [];\n var expression = void 0;\n var behaviorInstructions = [];\n var providers = [];\n var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\n var liftingInstruction = void 0;\n var viewFactory = void 0;\n var type = void 0;\n var elementInstruction = void 0;\n var elementProperty = void 0;\n var i = void 0;\n var ii = void 0;\n var attr = void 0;\n var attrName = void 0;\n var attrValue = void 0;\n var originalAttrName = void 0;\n var instruction = void 0;\n var info = void 0;\n var property = void 0;\n var knownAttribute = void 0;\n var auTargetID = void 0;\n var injectorId = void 0;\n\n if (tagName === 'slot') {\n if (targetLightDOM) {\n node = makeShadowSlot(this, resources, node, instructions, parentInjectorId);\n }\n return node.nextSibling;\n } else if (tagName === 'template') {\n if (!('content' in node)) {\n throw new Error('You cannot place a template element within ' + node.namespaceURI + ' namespace');\n }\n viewFactory = this.compile(node, resources);\n viewFactory.part = node.getAttribute('part');\n } else {\n type = resources.getElement(node.getAttribute('as-element') || tagName);\n\n if (tagName === 'let' && !type && bindingLanguage.createLetExpressions !== defaultLetHandler) {\n expressions = bindingLanguage.createLetExpressions(resources, node);\n auTargetID = makeIntoInstructionTarget(node);\n instructions[auTargetID] = TargetInstruction.letElement(expressions);\n return node.nextSibling;\n }\n if (type) {\n elementInstruction = BehaviorInstruction.element(node, type);\n type.processAttributes(this, resources, node, attributes, elementInstruction);\n behaviorInstructions.push(elementInstruction);\n }\n }\n\n for (i = 0, ii = attributes.length; i < ii; ++i) {\n attr = attributes[i];\n originalAttrName = attrName = attr.name;\n attrValue = attr.value;\n info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\n\n if (targetLightDOM && info.attrName === 'slot') {\n info.attrName = attrName = 'au-slot';\n }\n\n type = resources.getAttribute(info.attrName);\n elementProperty = null;\n\n if (type) {\n knownAttribute = resources.mapAttribute(info.attrName);\n if (knownAttribute) {\n property = type.attributes[knownAttribute];\n\n if (property) {\n info.defaultBindingMode = property.defaultBindingMode;\n\n if (!info.command && !info.expression) {\n info.command = property.hasOptions ? 'options' : null;\n }\n\n if (info.command && info.command !== 'options' && type.primaryProperty) {\n var _primaryProperty2 = type.primaryProperty;\n attrName = info.attrName = _primaryProperty2.attribute;\n\n info.defaultBindingMode = _primaryProperty2.defaultBindingMode;\n }\n }\n }\n } else if (elementInstruction) {\n elementProperty = elementInstruction.type.attributes[info.attrName];\n if (elementProperty) {\n info.defaultBindingMode = elementProperty.defaultBindingMode;\n }\n }\n\n if (elementProperty) {\n instruction = bindingLanguage.createAttributeInstruction(resources, node, info, elementInstruction);\n } else {\n instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\n }\n\n if (instruction) {\n if (instruction.alteredAttr) {\n type = resources.getAttribute(instruction.attrName);\n }\n\n if (instruction.discrete) {\n expressions.push(instruction);\n } else {\n if (type) {\n instruction.type = type;\n this._configureProperties(instruction, resources);\n\n if (type.liftsContent) {\n instruction.originalAttrName = originalAttrName;\n liftingInstruction = instruction;\n break;\n } else {\n behaviorInstructions.push(instruction);\n }\n } else if (elementProperty) {\n elementInstruction.attributes[info.attrName].targetProperty = elementProperty.name;\n } else {\n expressions.push(instruction.attributes[instruction.attrName]);\n }\n }\n } else {\n if (type) {\n instruction = BehaviorInstruction.attribute(attrName, type);\n instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\n\n if (type.liftsContent) {\n instruction.originalAttrName = originalAttrName;\n liftingInstruction = instruction;\n break;\n } else {\n behaviorInstructions.push(instruction);\n }\n } else if (elementProperty) {\n elementInstruction.attributes[attrName] = attrValue;\n }\n }\n }\n\n if (liftingInstruction) {\n liftingInstruction.viewFactory = viewFactory;\n node = liftingInstruction.type.compile(this, resources, node, liftingInstruction, parentNode);\n auTargetID = makeIntoInstructionTarget(node);\n instructions[auTargetID] = TargetInstruction.lifting(parentInjectorId, liftingInstruction);\n } else {\n var skipContentProcessing = false;\n\n if (expressions.length || behaviorInstructions.length) {\n injectorId = behaviorInstructions.length ? getNextInjectorId() : false;\n\n for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n instruction = behaviorInstructions[i];\n instruction.type.compile(this, resources, node, instruction, parentNode);\n providers.push(instruction.type.target);\n skipContentProcessing = skipContentProcessing || instruction.skipContentProcessing;\n }\n\n for (i = 0, ii = expressions.length; i < ii; ++i) {\n expression = expressions[i];\n if (expression.attrToRemove !== undefined) {\n node.removeAttribute(expression.attrToRemove);\n }\n }\n\n auTargetID = makeIntoInstructionTarget(node);\n instructions[auTargetID] = TargetInstruction.normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction);\n }\n\n if (skipContentProcessing) {\n return node.nextSibling;\n }\n\n var currentChild = node.firstChild;\n while (currentChild) {\n currentChild = this._compileNode(currentChild, resources, instructions, node, injectorId || parentInjectorId, targetLightDOM);\n }\n }\n\n return node.nextSibling;\n };\n\n ViewCompiler.prototype._configureProperties = function _configureProperties(instruction, resources) {\n var type = instruction.type;\n var attrName = instruction.attrName;\n var attributes = instruction.attributes;\n var property = void 0;\n var key = void 0;\n var value = void 0;\n\n var knownAttribute = resources.mapAttribute(attrName);\n if (knownAttribute && attrName in attributes && knownAttribute !== attrName) {\n attributes[knownAttribute] = attributes[attrName];\n delete attributes[attrName];\n }\n\n for (key in attributes) {\n value = attributes[key];\n\n if (value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n property = type.attributes[key];\n\n if (property !== undefined) {\n value.targetProperty = property.name;\n } else {\n value.targetProperty = key;\n }\n }\n }\n };\n\n return ViewCompiler;\n}();\n\nvar ResourceModule = function () {\n function ResourceModule(moduleId) {\n \n\n this.id = moduleId;\n this.moduleInstance = null;\n this.mainResource = null;\n this.resources = null;\n this.viewStrategy = null;\n this.isInitialized = false;\n this.onLoaded = null;\n this.loadContext = null;\n }\n\n ResourceModule.prototype.initialize = function initialize(container) {\n var current = this.mainResource;\n var resources = this.resources;\n var vs = this.viewStrategy;\n\n if (this.isInitialized) {\n return;\n }\n\n this.isInitialized = true;\n\n if (current !== undefined) {\n current.metadata.viewStrategy = vs;\n current.initialize(container);\n }\n\n for (var i = 0, ii = resources.length; i < ii; ++i) {\n current = resources[i];\n current.metadata.viewStrategy = vs;\n current.initialize(container);\n }\n };\n\n ResourceModule.prototype.register = function register(registry, name) {\n var main = this.mainResource;\n var resources = this.resources;\n\n if (main !== undefined) {\n main.register(registry, name);\n name = null;\n }\n\n for (var i = 0, ii = resources.length; i < ii; ++i) {\n resources[i].register(registry, name);\n name = null;\n }\n };\n\n ResourceModule.prototype.load = function load(container, loadContext) {\n if (this.onLoaded !== null) {\n return this.loadContext === loadContext ? Promise.resolve() : this.onLoaded;\n }\n\n var main = this.mainResource;\n var resources = this.resources;\n var loads = void 0;\n\n if (main !== undefined) {\n loads = new Array(resources.length + 1);\n loads[0] = main.load(container, loadContext);\n for (var i = 0, ii = resources.length; i < ii; ++i) {\n loads[i + 1] = resources[i].load(container, loadContext);\n }\n } else {\n loads = new Array(resources.length);\n for (var _i2 = 0, _ii = resources.length; _i2 < _ii; ++_i2) {\n loads[_i2] = resources[_i2].load(container, loadContext);\n }\n }\n\n this.loadContext = loadContext;\n this.onLoaded = Promise.all(loads);\n return this.onLoaded;\n };\n\n return ResourceModule;\n}();\n\nvar ResourceDescription = function () {\n function ResourceDescription(key, exportedValue, resourceTypeMeta) {\n \n\n if (!resourceTypeMeta) {\n resourceTypeMeta = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, exportedValue);\n\n if (!resourceTypeMeta) {\n resourceTypeMeta = new HtmlBehaviorResource();\n resourceTypeMeta.elementName = _hyphenate(key);\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, resourceTypeMeta, exportedValue);\n }\n }\n\n if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n if (resourceTypeMeta.elementName === undefined) {\n resourceTypeMeta.elementName = _hyphenate(key);\n } else if (resourceTypeMeta.attributeName === undefined) {\n resourceTypeMeta.attributeName = _hyphenate(key);\n } else if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n HtmlBehaviorResource.convention(key, resourceTypeMeta);\n }\n } else if (!resourceTypeMeta.name) {\n resourceTypeMeta.name = _hyphenate(key);\n }\n\n this.metadata = resourceTypeMeta;\n this.value = exportedValue;\n }\n\n ResourceDescription.prototype.initialize = function initialize(container) {\n this.metadata.initialize(container, this.value);\n };\n\n ResourceDescription.prototype.register = function register(registry, name) {\n this.metadata.register(registry, name);\n };\n\n ResourceDescription.prototype.load = function load(container, loadContext) {\n return this.metadata.load(container, this.value, loadContext);\n };\n\n return ResourceDescription;\n}();\n\nvar ModuleAnalyzer = function () {\n function ModuleAnalyzer() {\n \n\n this.cache = Object.create(null);\n }\n\n ModuleAnalyzer.prototype.getAnalysis = function getAnalysis(moduleId) {\n return this.cache[moduleId];\n };\n\n ModuleAnalyzer.prototype.analyze = function analyze(moduleId, moduleInstance, mainResourceKey) {\n var mainResource = void 0;\n var fallbackValue = void 0;\n var fallbackKey = void 0;\n var resourceTypeMeta = void 0;\n var key = void 0;\n var exportedValue = void 0;\n var resources = [];\n var conventional = void 0;\n var vs = void 0;\n var resourceModule = void 0;\n\n resourceModule = this.cache[moduleId];\n if (resourceModule) {\n return resourceModule;\n }\n\n resourceModule = new ResourceModule(moduleId);\n this.cache[moduleId] = resourceModule;\n\n if (typeof moduleInstance === 'function') {\n moduleInstance = { 'default': moduleInstance };\n }\n\n if (mainResourceKey) {\n mainResource = new ResourceDescription(mainResourceKey, moduleInstance[mainResourceKey]);\n }\n\n for (key in moduleInstance) {\n exportedValue = moduleInstance[key];\n\n if (key === mainResourceKey || typeof exportedValue !== 'function') {\n continue;\n }\n\n resourceTypeMeta = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, exportedValue);\n\n if (resourceTypeMeta) {\n if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n ViewResources.convention(exportedValue, resourceTypeMeta);\n\n if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n HtmlBehaviorResource.convention(key, resourceTypeMeta);\n }\n\n if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n resourceTypeMeta.elementName = _hyphenate(key);\n }\n }\n\n if (!mainResource && resourceTypeMeta instanceof HtmlBehaviorResource && resourceTypeMeta.elementName !== null) {\n mainResource = new ResourceDescription(key, exportedValue, resourceTypeMeta);\n } else {\n resources.push(new ResourceDescription(key, exportedValue, resourceTypeMeta));\n }\n } else if (viewStrategy.decorates(exportedValue)) {\n vs = exportedValue;\n } else if (exportedValue instanceof aurelia_loader__WEBPACK_IMPORTED_MODULE_3__[\"TemplateRegistryEntry\"]) {\n vs = new TemplateRegistryViewStrategy(moduleId, exportedValue);\n } else {\n if (conventional = ViewResources.convention(exportedValue)) {\n if (conventional.elementName !== null && !mainResource) {\n mainResource = new ResourceDescription(key, exportedValue, conventional);\n } else {\n resources.push(new ResourceDescription(key, exportedValue, conventional));\n }\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, conventional, exportedValue);\n } else if (conventional = HtmlBehaviorResource.convention(key)) {\n if (conventional.elementName !== null && !mainResource) {\n mainResource = new ResourceDescription(key, exportedValue, conventional);\n } else {\n resources.push(new ResourceDescription(key, exportedValue, conventional));\n }\n\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, conventional, exportedValue);\n } else if (conventional = aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"ValueConverterResource\"].convention(key) || aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"BindingBehaviorResource\"].convention(key) || ViewEngineHooksResource.convention(key)) {\n resources.push(new ResourceDescription(key, exportedValue, conventional));\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, conventional, exportedValue);\n } else if (!fallbackValue) {\n fallbackValue = exportedValue;\n fallbackKey = key;\n }\n }\n }\n\n if (!mainResource && fallbackValue) {\n mainResource = new ResourceDescription(fallbackKey, fallbackValue);\n }\n\n resourceModule.moduleInstance = moduleInstance;\n resourceModule.mainResource = mainResource;\n resourceModule.resources = resources;\n resourceModule.viewStrategy = vs;\n\n return resourceModule;\n };\n\n return ModuleAnalyzer;\n}();\n\nvar logger = aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('templating');\n\nfunction ensureRegistryEntry(loader, urlOrRegistryEntry) {\n if (urlOrRegistryEntry instanceof aurelia_loader__WEBPACK_IMPORTED_MODULE_3__[\"TemplateRegistryEntry\"]) {\n return Promise.resolve(urlOrRegistryEntry);\n }\n\n return loader.loadTemplate(urlOrRegistryEntry);\n}\n\nvar ProxyViewFactory = function () {\n function ProxyViewFactory(promise) {\n var _this8 = this;\n\n \n\n promise.then(function (x) {\n return _this8.viewFactory = x;\n });\n }\n\n ProxyViewFactory.prototype.create = function create(container, bindingContext, createInstruction, element) {\n return this.viewFactory.create(container, bindingContext, createInstruction, element);\n };\n\n ProxyViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\n };\n\n ProxyViewFactory.prototype.getCachedView = function getCachedView() {\n return this.viewFactory.getCachedView();\n };\n\n ProxyViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n this.viewFactory.returnViewToCache(view);\n };\n\n _createClass(ProxyViewFactory, [{\n key: 'isCaching',\n get: function get() {\n return this.viewFactory.isCaching;\n }\n }]);\n\n return ProxyViewFactory;\n}();\n\nvar auSlotBehavior = null;\n\nvar ViewEngine = (_temp5 = _class14 = function () {\n ViewEngine.inject = function inject() {\n return [aurelia_loader__WEBPACK_IMPORTED_MODULE_3__[\"Loader\"], aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[\"Container\"], ViewCompiler, ModuleAnalyzer, ViewResources];\n };\n\n function ViewEngine(loader, container, viewCompiler, moduleAnalyzer, appResources) {\n \n\n this.loader = loader;\n this.container = container;\n this.viewCompiler = viewCompiler;\n this.moduleAnalyzer = moduleAnalyzer;\n this.appResources = appResources;\n this._pluginMap = {};\n\n if (auSlotBehavior === null) {\n auSlotBehavior = new HtmlBehaviorResource();\n auSlotBehavior.attributeName = 'au-slot';\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, auSlotBehavior, SlotCustomAttribute);\n }\n\n auSlotBehavior.initialize(container, SlotCustomAttribute);\n auSlotBehavior.register(appResources);\n }\n\n ViewEngine.prototype.addResourcePlugin = function addResourcePlugin(extension, implementation) {\n var name = extension.replace('.', '') + '-resource-plugin';\n this._pluginMap[extension] = name;\n this.loader.addPlugin(name, implementation);\n };\n\n ViewEngine.prototype.loadViewFactory = function loadViewFactory(urlOrRegistryEntry, compileInstruction, loadContext, target) {\n var _this9 = this;\n\n loadContext = loadContext || new ResourceLoadContext();\n\n return ensureRegistryEntry(this.loader, urlOrRegistryEntry).then(function (registryEntry) {\n var url = registryEntry.address;\n\n if (registryEntry.onReady) {\n if (!loadContext.hasDependency(url)) {\n loadContext.addDependency(url);\n return registryEntry.onReady;\n }\n\n if (registryEntry.template === null) {\n return registryEntry.onReady;\n }\n\n return Promise.resolve(new ProxyViewFactory(registryEntry.onReady));\n }\n\n loadContext.addDependency(url);\n\n registryEntry.onReady = _this9.loadTemplateResources(registryEntry, compileInstruction, loadContext, target).then(function (resources) {\n registryEntry.resources = resources;\n\n if (registryEntry.template === null) {\n return registryEntry.factory = null;\n }\n\n var viewFactory = _this9.viewCompiler.compile(registryEntry.template, resources, compileInstruction);\n return registryEntry.factory = viewFactory;\n });\n\n return registryEntry.onReady;\n });\n };\n\n ViewEngine.prototype.loadTemplateResources = function loadTemplateResources(registryEntry, compileInstruction, loadContext, target) {\n var resources = new ViewResources(this.appResources, registryEntry.address);\n var dependencies = registryEntry.dependencies;\n var importIds = void 0;\n var names = void 0;\n\n compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n\n if (dependencies.length === 0 && !compileInstruction.associatedModuleId) {\n return Promise.resolve(resources);\n }\n\n importIds = dependencies.map(function (x) {\n return x.src;\n });\n names = dependencies.map(function (x) {\n return x.name;\n });\n logger.debug('importing resources for ' + registryEntry.address, importIds);\n\n if (target) {\n var viewModelRequires = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].get(ViewEngine.viewModelRequireMetadataKey, target);\n if (viewModelRequires) {\n var templateImportCount = importIds.length;\n for (var i = 0, ii = viewModelRequires.length; i < ii; ++i) {\n var req = viewModelRequires[i];\n var importId = typeof req === 'function' ? aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"Origin\"].get(req).moduleId : Object(aurelia_path__WEBPACK_IMPORTED_MODULE_4__[\"relativeToFile\"])(req.src || req, registryEntry.address);\n\n if (importIds.indexOf(importId) === -1) {\n importIds.push(importId);\n names.push(req.as);\n }\n }\n logger.debug('importing ViewModel resources for ' + compileInstruction.associatedModuleId, importIds.slice(templateImportCount));\n }\n }\n\n return this.importViewResources(importIds, names, resources, compileInstruction, loadContext);\n };\n\n ViewEngine.prototype.importViewModelResource = function importViewModelResource(moduleImport, moduleMember) {\n var _this10 = this;\n\n return this.loader.loadModule(moduleImport).then(function (viewModelModule) {\n var normalizedId = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"Origin\"].get(viewModelModule).moduleId;\n var resourceModule = _this10.moduleAnalyzer.analyze(normalizedId, viewModelModule, moduleMember);\n\n if (!resourceModule.mainResource) {\n throw new Error('No view model found in module \"' + moduleImport + '\".');\n }\n\n resourceModule.initialize(_this10.container);\n\n return resourceModule.mainResource;\n });\n };\n\n ViewEngine.prototype.importViewResources = function importViewResources(moduleIds, names, resources, compileInstruction, loadContext) {\n var _this11 = this;\n\n loadContext = loadContext || new ResourceLoadContext();\n compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n\n moduleIds = moduleIds.map(function (x) {\n return _this11._applyLoaderPlugin(x);\n });\n\n return this.loader.loadAllModules(moduleIds).then(function (imports) {\n var i = void 0;\n var ii = void 0;\n var analysis = void 0;\n var normalizedId = void 0;\n var current = void 0;\n var associatedModule = void 0;\n var container = _this11.container;\n var moduleAnalyzer = _this11.moduleAnalyzer;\n var allAnalysis = new Array(imports.length);\n\n for (i = 0, ii = imports.length; i < ii; ++i) {\n current = imports[i];\n normalizedId = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"Origin\"].get(current).moduleId;\n\n analysis = moduleAnalyzer.analyze(normalizedId, current);\n analysis.initialize(container);\n analysis.register(resources, names[i]);\n\n allAnalysis[i] = analysis;\n }\n\n if (compileInstruction.associatedModuleId) {\n associatedModule = moduleAnalyzer.getAnalysis(compileInstruction.associatedModuleId);\n\n if (associatedModule) {\n associatedModule.register(resources);\n }\n }\n\n for (i = 0, ii = allAnalysis.length; i < ii; ++i) {\n allAnalysis[i] = allAnalysis[i].load(container, loadContext);\n }\n\n return Promise.all(allAnalysis).then(function () {\n return resources;\n });\n });\n };\n\n ViewEngine.prototype._applyLoaderPlugin = function _applyLoaderPlugin(id) {\n var index = id.lastIndexOf('.');\n if (index !== -1) {\n var ext = id.substring(index);\n var pluginName = this._pluginMap[ext];\n\n if (pluginName === undefined) {\n return id;\n }\n\n return this.loader.applyPluginToUrl(id, pluginName);\n }\n\n return id;\n };\n\n return ViewEngine;\n}(), _class14.viewModelRequireMetadataKey = 'aurelia:view-model-require', _temp5);\n\nvar Controller = function () {\n function Controller(behavior, instruction, viewModel, container) {\n \n\n this.behavior = behavior;\n this.instruction = instruction;\n this.viewModel = viewModel;\n this.isAttached = false;\n this.view = null;\n this.isBound = false;\n this.scope = null;\n this.container = container;\n this.elementEvents = container.elementEvents || null;\n\n var observerLookup = behavior.observerLocator.getOrCreateObserversLookup(viewModel);\n var handlesBind = behavior.handlesBind;\n var attributes = instruction.attributes;\n var boundProperties = this.boundProperties = [];\n var properties = behavior.properties;\n var i = void 0;\n var ii = void 0;\n\n behavior._ensurePropertiesDefined(viewModel, observerLookup);\n\n for (i = 0, ii = properties.length; i < ii; ++i) {\n properties[i]._initialize(viewModel, observerLookup, attributes, handlesBind, boundProperties);\n }\n }\n\n Controller.prototype.created = function created(owningView) {\n if (this.behavior.handlesCreated) {\n this.viewModel.created(owningView, this.view);\n }\n };\n\n Controller.prototype.automate = function automate(overrideContext, owningView) {\n this.view.bindingContext = this.viewModel;\n this.view.overrideContext = overrideContext || Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"createOverrideContext\"])(this.viewModel);\n this.view._isUserControlled = true;\n\n if (this.behavior.handlesCreated) {\n this.viewModel.created(owningView || null, this.view);\n }\n\n this.bind(this.view);\n };\n\n Controller.prototype.bind = function bind(scope) {\n var skipSelfSubscriber = this.behavior.handlesBind;\n var boundProperties = this.boundProperties;\n var i = void 0;\n var ii = void 0;\n var x = void 0;\n var observer = void 0;\n var selfSubscriber = void 0;\n\n if (this.isBound) {\n if (this.scope === scope) {\n return;\n }\n\n this.unbind();\n }\n\n this.isBound = true;\n this.scope = scope;\n\n for (i = 0, ii = boundProperties.length; i < ii; ++i) {\n x = boundProperties[i];\n observer = x.observer;\n selfSubscriber = observer.selfSubscriber;\n observer.publishing = false;\n\n if (skipSelfSubscriber) {\n observer.selfSubscriber = null;\n }\n\n x.binding.bind(scope);\n observer.call();\n\n observer.publishing = true;\n observer.selfSubscriber = selfSubscriber;\n }\n\n var overrideContext = void 0;\n if (this.view !== null) {\n if (skipSelfSubscriber) {\n this.view.viewModelScope = scope;\n }\n\n if (this.viewModel === scope.overrideContext.bindingContext) {\n overrideContext = scope.overrideContext;\n } else if (this.instruction.inheritBindingContext) {\n overrideContext = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"createOverrideContext\"])(this.viewModel, scope.overrideContext);\n } else {\n overrideContext = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"createOverrideContext\"])(this.viewModel);\n overrideContext.__parentOverrideContext = scope.overrideContext;\n }\n\n this.view.bind(this.viewModel, overrideContext);\n } else if (skipSelfSubscriber) {\n overrideContext = scope.overrideContext;\n\n if (scope.overrideContext.__parentOverrideContext !== undefined && this.viewModel.viewFactory && this.viewModel.viewFactory.factoryCreateInstruction.partReplacements) {\n overrideContext = Object.assign({}, scope.overrideContext);\n overrideContext.parentOverrideContext = scope.overrideContext.__parentOverrideContext;\n }\n this.viewModel.bind(scope.bindingContext, overrideContext);\n }\n };\n\n Controller.prototype.unbind = function unbind() {\n if (this.isBound) {\n var _boundProperties = this.boundProperties;\n var _i3 = void 0;\n var _ii2 = void 0;\n\n this.isBound = false;\n this.scope = null;\n\n if (this.view !== null) {\n this.view.unbind();\n }\n\n if (this.behavior.handlesUnbind) {\n this.viewModel.unbind();\n }\n\n if (this.elementEvents !== null) {\n this.elementEvents.disposeAll();\n }\n\n for (_i3 = 0, _ii2 = _boundProperties.length; _i3 < _ii2; ++_i3) {\n _boundProperties[_i3].binding.unbind();\n }\n }\n };\n\n Controller.prototype.attached = function attached() {\n if (this.isAttached) {\n return;\n }\n\n this.isAttached = true;\n\n if (this.behavior.handlesAttached) {\n this.viewModel.attached();\n }\n\n if (this.view !== null) {\n this.view.attached();\n }\n };\n\n Controller.prototype.detached = function detached() {\n if (this.isAttached) {\n this.isAttached = false;\n\n if (this.view !== null) {\n this.view.detached();\n }\n\n if (this.behavior.handlesDetached) {\n this.viewModel.detached();\n }\n }\n };\n\n return Controller;\n}();\n\nvar BehaviorPropertyObserver = (_dec7 = Object(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"subscriberCollection\"])(), _dec7(_class15 = function () {\n function BehaviorPropertyObserver(taskQueue, obj, propertyName, selfSubscriber, initialValue) {\n \n\n this.taskQueue = taskQueue;\n this.obj = obj;\n this.propertyName = propertyName;\n this.notqueued = true;\n this.publishing = false;\n this.selfSubscriber = selfSubscriber;\n this.currentValue = this.oldValue = initialValue;\n }\n\n BehaviorPropertyObserver.prototype.getValue = function getValue() {\n return this.currentValue;\n };\n\n BehaviorPropertyObserver.prototype.setValue = function setValue(newValue) {\n var oldValue = this.currentValue;\n\n if (!Object.is(newValue, oldValue)) {\n this.oldValue = oldValue;\n this.currentValue = newValue;\n\n if (this.publishing && this.notqueued) {\n if (this.taskQueue.flushing) {\n this.call();\n } else {\n this.notqueued = false;\n this.taskQueue.queueMicroTask(this);\n }\n }\n }\n };\n\n BehaviorPropertyObserver.prototype.call = function call() {\n var oldValue = this.oldValue;\n var newValue = this.currentValue;\n\n this.notqueued = true;\n\n if (Object.is(newValue, oldValue)) {\n return;\n }\n\n if (this.selfSubscriber) {\n this.selfSubscriber(newValue, oldValue);\n }\n\n this.callSubscribers(newValue, oldValue);\n this.oldValue = newValue;\n };\n\n BehaviorPropertyObserver.prototype.subscribe = function subscribe(context, callable) {\n this.addSubscriber(context, callable);\n };\n\n BehaviorPropertyObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n this.removeSubscriber(context, callable);\n };\n\n return BehaviorPropertyObserver;\n}()) || _class15);\n\nfunction getObserver(instance, name) {\n var lookup = instance.__observers__;\n\n if (lookup === undefined) {\n var ctor = Object.getPrototypeOf(instance).constructor;\n var _behavior = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].get(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, ctor);\n if (!_behavior.isInitialized) {\n _behavior.initialize(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[\"Container\"].instance || new aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[\"Container\"](), instance.constructor);\n }\n\n lookup = _behavior.observerLocator.getOrCreateObserversLookup(instance);\n _behavior._ensurePropertiesDefined(instance, lookup);\n }\n\n return lookup[name];\n}\n\nvar BindableProperty = function () {\n function BindableProperty(nameOrConfig) {\n \n\n if (typeof nameOrConfig === 'string') {\n this.name = nameOrConfig;\n } else {\n Object.assign(this, nameOrConfig);\n }\n\n this.attribute = this.attribute || _hyphenate(this.name);\n var defaultBindingMode = this.defaultBindingMode;\n if (defaultBindingMode === null || defaultBindingMode === undefined) {\n this.defaultBindingMode = aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"bindingMode\"].oneWay;\n } else if (typeof defaultBindingMode === 'string') {\n this.defaultBindingMode = aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"bindingMode\"][defaultBindingMode] || aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"bindingMode\"].oneWay;\n }\n this.changeHandler = this.changeHandler || null;\n this.owner = null;\n this.descriptor = null;\n }\n\n BindableProperty.prototype.registerWith = function registerWith(target, behavior, descriptor) {\n behavior.properties.push(this);\n behavior.attributes[this.attribute] = this;\n this.owner = behavior;\n\n if (descriptor) {\n this.descriptor = descriptor;\n return this._configureDescriptor(descriptor);\n }\n\n return undefined;\n };\n\n BindableProperty.prototype._configureDescriptor = function _configureDescriptor(descriptor) {\n var name = this.name;\n\n descriptor.configurable = true;\n descriptor.enumerable = true;\n\n if ('initializer' in descriptor) {\n this.defaultValue = descriptor.initializer;\n delete descriptor.initializer;\n delete descriptor.writable;\n }\n\n if ('value' in descriptor) {\n this.defaultValue = descriptor.value;\n delete descriptor.value;\n delete descriptor.writable;\n }\n\n descriptor.get = function () {\n return getObserver(this, name).getValue();\n };\n\n descriptor.set = function (value) {\n getObserver(this, name).setValue(value);\n };\n\n descriptor.get.getObserver = function (obj) {\n return getObserver(obj, name);\n };\n\n return descriptor;\n };\n\n BindableProperty.prototype.defineOn = function defineOn(target, behavior) {\n var name = this.name;\n var handlerName = void 0;\n\n if (this.changeHandler === null) {\n handlerName = name + 'Changed';\n if (handlerName in target.prototype) {\n this.changeHandler = handlerName;\n }\n }\n\n if (this.descriptor === null) {\n Object.defineProperty(target.prototype, name, this._configureDescriptor(behavior, {}));\n }\n };\n\n BindableProperty.prototype.createObserver = function createObserver(viewModel) {\n var selfSubscriber = null;\n var defaultValue = this.defaultValue;\n var changeHandlerName = this.changeHandler;\n var name = this.name;\n var initialValue = void 0;\n\n if (this.hasOptions) {\n return undefined;\n }\n\n if (changeHandlerName in viewModel) {\n if ('propertyChanged' in viewModel) {\n selfSubscriber = function selfSubscriber(newValue, oldValue) {\n viewModel[changeHandlerName](newValue, oldValue);\n viewModel.propertyChanged(name, newValue, oldValue);\n };\n } else {\n selfSubscriber = function selfSubscriber(newValue, oldValue) {\n return viewModel[changeHandlerName](newValue, oldValue);\n };\n }\n } else if ('propertyChanged' in viewModel) {\n selfSubscriber = function selfSubscriber(newValue, oldValue) {\n return viewModel.propertyChanged(name, newValue, oldValue);\n };\n } else if (changeHandlerName !== null) {\n throw new Error('Change handler ' + changeHandlerName + ' was specified but not declared on the class.');\n }\n\n if (defaultValue !== undefined) {\n initialValue = typeof defaultValue === 'function' ? defaultValue.call(viewModel) : defaultValue;\n }\n\n return new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, this.name, selfSubscriber, initialValue);\n };\n\n BindableProperty.prototype._initialize = function _initialize(viewModel, observerLookup, attributes, behaviorHandlesBind, boundProperties) {\n var selfSubscriber = void 0;\n var observer = void 0;\n var attribute = void 0;\n var defaultValue = this.defaultValue;\n\n if (this.isDynamic) {\n for (var _key6 in attributes) {\n this._createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, _key6, attributes[_key6], boundProperties);\n }\n } else if (!this.hasOptions) {\n observer = observerLookup[this.name];\n\n if (attributes !== null) {\n selfSubscriber = observer.selfSubscriber;\n attribute = attributes[this.attribute];\n\n if (behaviorHandlesBind) {\n observer.selfSubscriber = null;\n }\n\n if (typeof attribute === 'string') {\n viewModel[this.name] = attribute;\n observer.call();\n } else if (attribute) {\n boundProperties.push({ observer: observer, binding: attribute.createBinding(viewModel) });\n } else if (defaultValue !== undefined) {\n observer.call();\n }\n\n observer.selfSubscriber = selfSubscriber;\n }\n\n observer.publishing = true;\n }\n };\n\n BindableProperty.prototype._createDynamicProperty = function _createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, name, attribute, boundProperties) {\n var changeHandlerName = name + 'Changed';\n var selfSubscriber = null;\n var observer = void 0;\n var info = void 0;\n\n if (changeHandlerName in viewModel) {\n if ('propertyChanged' in viewModel) {\n selfSubscriber = function selfSubscriber(newValue, oldValue) {\n viewModel[changeHandlerName](newValue, oldValue);\n viewModel.propertyChanged(name, newValue, oldValue);\n };\n } else {\n selfSubscriber = function selfSubscriber(newValue, oldValue) {\n return viewModel[changeHandlerName](newValue, oldValue);\n };\n }\n } else if ('propertyChanged' in viewModel) {\n selfSubscriber = function selfSubscriber(newValue, oldValue) {\n return viewModel.propertyChanged(name, newValue, oldValue);\n };\n }\n\n observer = observerLookup[name] = new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, name, selfSubscriber);\n\n Object.defineProperty(viewModel, name, {\n configurable: true,\n enumerable: true,\n get: observer.getValue.bind(observer),\n set: observer.setValue.bind(observer)\n });\n\n if (behaviorHandlesBind) {\n observer.selfSubscriber = null;\n }\n\n if (typeof attribute === 'string') {\n viewModel[name] = attribute;\n observer.call();\n } else if (attribute) {\n info = { observer: observer, binding: attribute.createBinding(viewModel) };\n boundProperties.push(info);\n }\n\n observer.publishing = true;\n observer.selfSubscriber = selfSubscriber;\n };\n\n return BindableProperty;\n}();\n\nvar lastProviderId = 0;\n\nfunction nextProviderId() {\n return ++lastProviderId;\n}\n\nfunction doProcessContent() {\n return true;\n}\nfunction doProcessAttributes() {}\n\nvar HtmlBehaviorResource = function () {\n function HtmlBehaviorResource() {\n \n\n this.elementName = null;\n this.attributeName = null;\n this.attributeDefaultBindingMode = undefined;\n this.liftsContent = false;\n this.targetShadowDOM = false;\n this.shadowDOMOptions = null;\n this.processAttributes = doProcessAttributes;\n this.processContent = doProcessContent;\n this.usesShadowDOM = false;\n this.childBindings = null;\n this.hasDynamicOptions = false;\n this.containerless = false;\n this.properties = [];\n this.attributes = {};\n this.isInitialized = false;\n this.primaryProperty = null;\n }\n\n HtmlBehaviorResource.convention = function convention(name, existing) {\n var behavior = void 0;\n\n if (name.endsWith('CustomAttribute')) {\n behavior = existing || new HtmlBehaviorResource();\n behavior.attributeName = _hyphenate(name.substring(0, name.length - 15));\n }\n\n if (name.endsWith('CustomElement')) {\n behavior = existing || new HtmlBehaviorResource();\n behavior.elementName = _hyphenate(name.substring(0, name.length - 13));\n }\n\n return behavior;\n };\n\n HtmlBehaviorResource.prototype.addChildBinding = function addChildBinding(behavior) {\n if (this.childBindings === null) {\n this.childBindings = [];\n }\n\n this.childBindings.push(behavior);\n };\n\n HtmlBehaviorResource.prototype.initialize = function initialize(container, target) {\n var proto = target.prototype;\n var properties = this.properties;\n var attributeName = this.attributeName;\n var attributeDefaultBindingMode = this.attributeDefaultBindingMode;\n var i = void 0;\n var ii = void 0;\n var current = void 0;\n\n if (this.isInitialized) {\n return;\n }\n\n this.isInitialized = true;\n target.__providerId__ = nextProviderId();\n\n this.observerLocator = container.get(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"ObserverLocator\"]);\n this.taskQueue = container.get(aurelia_task_queue__WEBPACK_IMPORTED_MODULE_7__[\"TaskQueue\"]);\n\n this.target = target;\n this.usesShadowDOM = this.targetShadowDOM && aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"FEATURE\"].shadowDOM;\n this.handlesCreated = 'created' in proto;\n this.handlesBind = 'bind' in proto;\n this.handlesUnbind = 'unbind' in proto;\n this.handlesAttached = 'attached' in proto;\n this.handlesDetached = 'detached' in proto;\n this.htmlName = this.elementName || this.attributeName;\n\n if (attributeName !== null) {\n if (properties.length === 0) {\n new BindableProperty({\n name: 'value',\n changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\n attribute: attributeName,\n defaultBindingMode: attributeDefaultBindingMode\n }).registerWith(target, this);\n }\n\n current = properties[0];\n\n if (properties.length === 1 && current.name === 'value') {\n current.isDynamic = current.hasOptions = this.hasDynamicOptions;\n current.defineOn(target, this);\n } else {\n for (i = 0, ii = properties.length; i < ii; ++i) {\n properties[i].defineOn(target, this);\n if (properties[i].primaryProperty) {\n if (this.primaryProperty) {\n throw new Error('Only one bindable property on a custom element can be defined as the default');\n }\n this.primaryProperty = properties[i];\n }\n }\n\n current = new BindableProperty({\n name: 'value',\n changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\n attribute: attributeName,\n defaultBindingMode: attributeDefaultBindingMode\n });\n\n current.hasOptions = true;\n current.registerWith(target, this);\n }\n } else {\n for (i = 0, ii = properties.length; i < ii; ++i) {\n properties[i].defineOn(target, this);\n }\n\n this._copyInheritedProperties(container, target);\n }\n };\n\n HtmlBehaviorResource.prototype.register = function register(registry, name) {\n var _this12 = this;\n\n if (this.attributeName !== null) {\n registry.registerAttribute(name || this.attributeName, this, this.attributeName);\n\n if (Array.isArray(this.aliases)) {\n this.aliases.forEach(function (alias) {\n registry.registerAttribute(alias, _this12, _this12.attributeName);\n });\n }\n }\n\n if (this.elementName !== null) {\n registry.registerElement(name || this.elementName, this);\n }\n };\n\n HtmlBehaviorResource.prototype.load = function load(container, target, loadContext, viewStrategy, transientView) {\n var _this13 = this;\n\n var options = void 0;\n\n if (this.elementName !== null) {\n viewStrategy = container.get(ViewLocator).getViewStrategy(viewStrategy || this.viewStrategy || target);\n options = new ViewCompileInstruction(this.targetShadowDOM, true);\n\n if (!viewStrategy.moduleId) {\n viewStrategy.moduleId = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"Origin\"].get(target).moduleId;\n }\n\n return viewStrategy.loadViewFactory(container.get(ViewEngine), options, loadContext, target).then(function (viewFactory) {\n if (!transientView || !_this13.viewFactory) {\n _this13.viewFactory = viewFactory;\n }\n\n return viewFactory;\n });\n }\n\n return Promise.resolve(this);\n };\n\n HtmlBehaviorResource.prototype.compile = function compile(compiler, resources, node, instruction, parentNode) {\n if (this.liftsContent) {\n if (!instruction.viewFactory) {\n var _template = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createElement('template');\n var fragment = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createDocumentFragment();\n var cacheSize = node.getAttribute('view-cache');\n var part = node.getAttribute('part');\n\n node.removeAttribute(instruction.originalAttrName);\n aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].replaceNode(_template, node, parentNode);\n fragment.appendChild(node);\n instruction.viewFactory = compiler.compile(fragment, resources);\n\n if (part) {\n instruction.viewFactory.part = part;\n node.removeAttribute('part');\n }\n\n if (cacheSize) {\n instruction.viewFactory.setCacheSize(cacheSize);\n node.removeAttribute('view-cache');\n }\n\n node = _template;\n }\n } else if (this.elementName !== null) {\n var _partReplacements2 = {};\n\n if (this.processContent(compiler, resources, node, instruction) && node.hasChildNodes()) {\n var currentChild = node.firstChild;\n var contentElement = this.usesShadowDOM ? null : aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createElement('au-content');\n var nextSibling = void 0;\n var toReplace = void 0;\n\n while (currentChild) {\n nextSibling = currentChild.nextSibling;\n\n if (currentChild.tagName === 'TEMPLATE' && (toReplace = currentChild.getAttribute('replace-part'))) {\n _partReplacements2[toReplace] = compiler.compile(currentChild, resources);\n aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].removeNode(currentChild, parentNode);\n instruction.partReplacements = _partReplacements2;\n } else if (contentElement !== null) {\n if (currentChild.nodeType === 3 && _isAllWhitespace(currentChild)) {\n aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].removeNode(currentChild, parentNode);\n } else {\n contentElement.appendChild(currentChild);\n }\n }\n\n currentChild = nextSibling;\n }\n\n if (contentElement !== null && contentElement.hasChildNodes()) {\n node.appendChild(contentElement);\n }\n\n instruction.skipContentProcessing = false;\n } else {\n instruction.skipContentProcessing = true;\n }\n } else if (!this.processContent(compiler, resources, node, instruction)) {\n instruction.skipContentProcessing = true;\n }\n\n return node;\n };\n\n HtmlBehaviorResource.prototype.create = function create(container, instruction, element, bindings) {\n var viewHost = void 0;\n var au = null;\n\n instruction = instruction || BehaviorInstruction.normal;\n element = element || null;\n bindings = bindings || null;\n\n if (this.elementName !== null && element) {\n if (this.usesShadowDOM) {\n viewHost = element.attachShadow(this.shadowDOMOptions);\n container.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].boundary, viewHost);\n } else {\n viewHost = element;\n if (this.targetShadowDOM) {\n container.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].boundary, viewHost);\n }\n }\n }\n\n if (element !== null) {\n element.au = au = element.au || {};\n }\n\n var viewModel = instruction.viewModel || container.get(this.target);\n var controller = new Controller(this, instruction, viewModel, container);\n var childBindings = this.childBindings;\n var viewFactory = void 0;\n\n if (this.liftsContent) {\n au.controller = controller;\n } else if (this.elementName !== null) {\n viewFactory = instruction.viewFactory || this.viewFactory;\n container.viewModel = viewModel;\n\n if (viewFactory) {\n controller.view = viewFactory.create(container, instruction, element);\n }\n\n if (element !== null) {\n au.controller = controller;\n\n if (controller.view) {\n if (!this.usesShadowDOM && (element.childNodes.length === 1 || element.contentElement)) {\n var contentElement = element.childNodes[0] || element.contentElement;\n controller.view.contentView = { fragment: contentElement };\n contentElement.parentNode && aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].removeNode(contentElement);\n }\n\n if (instruction.anchorIsContainer) {\n if (childBindings !== null) {\n for (var _i4 = 0, _ii3 = childBindings.length; _i4 < _ii3; ++_i4) {\n controller.view.addBinding(childBindings[_i4].create(element, viewModel, controller));\n }\n }\n\n controller.view.appendNodesTo(viewHost);\n } else {\n controller.view.insertNodesBefore(viewHost);\n }\n } else if (childBindings !== null) {\n for (var _i5 = 0, _ii4 = childBindings.length; _i5 < _ii4; ++_i5) {\n bindings.push(childBindings[_i5].create(element, viewModel, controller));\n }\n }\n } else if (controller.view) {\n controller.view.controller = controller;\n\n if (childBindings !== null) {\n for (var _i6 = 0, _ii5 = childBindings.length; _i6 < _ii5; ++_i6) {\n controller.view.addBinding(childBindings[_i6].create(instruction.host, viewModel, controller));\n }\n }\n } else if (childBindings !== null) {\n for (var _i7 = 0, _ii6 = childBindings.length; _i7 < _ii6; ++_i7) {\n bindings.push(childBindings[_i7].create(instruction.host, viewModel, controller));\n }\n }\n } else if (childBindings !== null) {\n for (var _i8 = 0, _ii7 = childBindings.length; _i8 < _ii7; ++_i8) {\n bindings.push(childBindings[_i8].create(element, viewModel, controller));\n }\n }\n\n if (au !== null) {\n au[this.htmlName] = controller;\n }\n\n if (instruction.initiatedByBehavior && viewFactory) {\n controller.view.created();\n }\n\n return controller;\n };\n\n HtmlBehaviorResource.prototype._ensurePropertiesDefined = function _ensurePropertiesDefined(instance, lookup) {\n var properties = void 0;\n var i = void 0;\n var ii = void 0;\n var observer = void 0;\n\n if ('__propertiesDefined__' in lookup) {\n return;\n }\n\n lookup.__propertiesDefined__ = true;\n properties = this.properties;\n\n for (i = 0, ii = properties.length; i < ii; ++i) {\n observer = properties[i].createObserver(instance);\n\n if (observer !== undefined) {\n lookup[observer.propertyName] = observer;\n }\n }\n };\n\n HtmlBehaviorResource.prototype._copyInheritedProperties = function _copyInheritedProperties(container, target) {\n var _this14 = this;\n\n var behavior = void 0;\n var derived = target;\n\n while (true) {\n var proto = Object.getPrototypeOf(target.prototype);\n target = proto && proto.constructor;\n if (!target) {\n return;\n }\n behavior = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, target);\n if (behavior) {\n break;\n }\n }\n behavior.initialize(container, target);\n\n var _loop = function _loop(_i9, _ii8) {\n var prop = behavior.properties[_i9];\n\n if (_this14.properties.some(function (p) {\n return p.name === prop.name;\n })) {\n return 'continue';\n }\n\n new BindableProperty(prop).registerWith(derived, _this14);\n };\n\n for (var _i9 = 0, _ii8 = behavior.properties.length; _i9 < _ii8; ++_i9) {\n var _ret = _loop(_i9, _ii8);\n\n if (_ret === 'continue') continue;\n }\n };\n\n return HtmlBehaviorResource;\n}();\n\nfunction createChildObserverDecorator(selectorOrConfig, all) {\n return function (target, key, descriptor) {\n var actualTarget = typeof key === 'string' ? target.constructor : target;\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, actualTarget);\n\n if (typeof selectorOrConfig === 'string') {\n selectorOrConfig = {\n selector: selectorOrConfig,\n name: key\n };\n }\n\n if (descriptor) {\n descriptor.writable = true;\n descriptor.configurable = true;\n }\n\n selectorOrConfig.all = all;\n r.addChildBinding(new ChildObserver(selectorOrConfig));\n };\n}\n\nfunction children(selectorOrConfig) {\n return createChildObserverDecorator(selectorOrConfig, true);\n}\n\nfunction child(selectorOrConfig) {\n return createChildObserverDecorator(selectorOrConfig, false);\n}\n\nvar ChildObserver = function () {\n function ChildObserver(config) {\n \n\n this.name = config.name;\n this.changeHandler = config.changeHandler || this.name + 'Changed';\n this.selector = config.selector;\n this.all = config.all;\n }\n\n ChildObserver.prototype.create = function create(viewHost, viewModel, controller) {\n return new ChildObserverBinder(this.selector, viewHost, this.name, viewModel, controller, this.changeHandler, this.all);\n };\n\n return ChildObserver;\n}();\n\nvar noMutations = [];\n\nfunction trackMutation(groupedMutations, binder, record) {\n var mutations = groupedMutations.get(binder);\n\n if (!mutations) {\n mutations = [];\n groupedMutations.set(binder, mutations);\n }\n\n mutations.push(record);\n}\n\nfunction onChildChange(mutations, observer) {\n var binders = observer.binders;\n var bindersLength = binders.length;\n\n var groupedMutations = new Map();\n\n for (var _i10 = 0, _ii9 = mutations.length; _i10 < _ii9; ++_i10) {\n var record = mutations[_i10];\n var added = record.addedNodes;\n var removed = record.removedNodes;\n\n for (var j = 0, jj = removed.length; j < jj; ++j) {\n var _node = removed[j];\n if (_node.nodeType === 1) {\n for (var k = 0; k < bindersLength; ++k) {\n var binder = binders[k];\n\n if (binder.onRemove(_node)) {\n trackMutation(groupedMutations, binder, record);\n }\n }\n }\n }\n\n for (var _j = 0, _jj = added.length; _j < _jj; ++_j) {\n var _node2 = added[_j];\n if (_node2.nodeType === 1) {\n for (var _k = 0; _k < bindersLength; ++_k) {\n var _binder = binders[_k];\n\n if (_binder.onAdd(_node2)) {\n trackMutation(groupedMutations, _binder, record);\n }\n }\n }\n }\n }\n\n groupedMutations.forEach(function (mutationRecords, binder) {\n if (binder.isBound && binder.changeHandler !== null) {\n binder.viewModel[binder.changeHandler](mutationRecords);\n }\n });\n}\n\nvar ChildObserverBinder = function () {\n function ChildObserverBinder(selector, viewHost, property, viewModel, controller, changeHandler, all) {\n \n\n this.selector = selector;\n\n this.viewHost = viewHost;\n this.property = property;\n this.viewModel = viewModel;\n this.controller = controller;\n this.changeHandler = changeHandler in viewModel ? changeHandler : null;\n this.usesShadowDOM = controller.behavior.usesShadowDOM;\n this.all = all;\n\n if (!this.usesShadowDOM && controller.view && controller.view.contentView) {\n this.contentView = controller.view.contentView;\n } else {\n this.contentView = null;\n }\n this.source = null;\n this.isBound = false;\n }\n\n ChildObserverBinder.prototype.matches = function matches(element) {\n if (element.matches(this.selector)) {\n if (this.contentView === null) {\n return true;\n }\n\n var contentView = this.contentView;\n var assignedSlot = element.auAssignedSlot;\n\n if (assignedSlot && assignedSlot.projectFromAnchors) {\n var anchors = assignedSlot.projectFromAnchors;\n\n for (var _i11 = 0, _ii10 = anchors.length; _i11 < _ii10; ++_i11) {\n if (anchors[_i11].auOwnerView === contentView) {\n return true;\n }\n }\n\n return false;\n }\n\n return element.auOwnerView === contentView;\n }\n\n return false;\n };\n\n ChildObserverBinder.prototype.bind = function bind(source) {\n if (this.isBound) {\n if (this.source === source) {\n return;\n }\n this.source = source;\n }\n this.isBound = true;\n\n var viewHost = this.viewHost;\n var viewModel = this.viewModel;\n var observer = viewHost.__childObserver__;\n\n if (!observer) {\n observer = viewHost.__childObserver__ = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createMutationObserver(onChildChange);\n\n var options = {\n childList: true,\n subtree: !this.usesShadowDOM\n };\n\n observer.observe(viewHost, options);\n observer.binders = [];\n }\n\n observer.binders.push(this);\n\n if (this.usesShadowDOM) {\n var current = viewHost.firstElementChild;\n\n if (this.all) {\n var items = viewModel[this.property];\n if (!items) {\n items = viewModel[this.property] = [];\n } else {\n items.splice(0);\n }\n\n while (current) {\n if (this.matches(current)) {\n items.push(current.au && current.au.controller ? current.au.controller.viewModel : current);\n }\n\n current = current.nextElementSibling;\n }\n\n if (this.changeHandler !== null) {\n this.viewModel[this.changeHandler](noMutations);\n }\n } else {\n while (current) {\n if (this.matches(current)) {\n var _value = current.au && current.au.controller ? current.au.controller.viewModel : current;\n this.viewModel[this.property] = _value;\n\n if (this.changeHandler !== null) {\n this.viewModel[this.changeHandler](_value);\n }\n\n break;\n }\n\n current = current.nextElementSibling;\n }\n }\n }\n };\n\n ChildObserverBinder.prototype.onRemove = function onRemove(element) {\n if (this.matches(element)) {\n var _value2 = element.au && element.au.controller ? element.au.controller.viewModel : element;\n\n if (this.all) {\n var items = this.viewModel[this.property] || (this.viewModel[this.property] = []);\n var index = items.indexOf(_value2);\n\n if (index !== -1) {\n items.splice(index, 1);\n }\n\n return true;\n }\n\n var currentValue = this.viewModel[this.property];\n if (currentValue === _value2) {\n this.viewModel[this.property] = null;\n\n if (this.isBound && this.changeHandler !== null) {\n this.viewModel[this.changeHandler](_value2);\n }\n }\n }\n\n return false;\n };\n\n ChildObserverBinder.prototype.onAdd = function onAdd(element) {\n if (this.matches(element)) {\n var _value3 = element.au && element.au.controller ? element.au.controller.viewModel : element;\n\n if (this.all) {\n var items = this.viewModel[this.property] || (this.viewModel[this.property] = []);\n\n if (this.selector === '*') {\n items.push(_value3);\n return true;\n }\n\n var index = 0;\n var prev = element.previousElementSibling;\n\n while (prev) {\n if (this.matches(prev)) {\n index++;\n }\n\n prev = prev.previousElementSibling;\n }\n\n items.splice(index, 0, _value3);\n return true;\n }\n\n this.viewModel[this.property] = _value3;\n\n if (this.isBound && this.changeHandler !== null) {\n this.viewModel[this.changeHandler](_value3);\n }\n }\n\n return false;\n };\n\n ChildObserverBinder.prototype.unbind = function unbind() {\n if (!this.isBound) {\n return;\n }\n this.isBound = false;\n this.source = null;\n var childObserver = this.viewHost.__childObserver__;\n if (childObserver) {\n var binders = childObserver.binders;\n if (binders && binders.length) {\n var idx = binders.indexOf(this);\n if (idx !== -1) {\n binders.splice(idx, 1);\n }\n if (binders.length === 0) {\n childObserver.disconnect();\n this.viewHost.__childObserver__ = null;\n }\n }\n\n if (this.usesShadowDOM) {\n this.viewModel[this.property] = null;\n }\n }\n };\n\n return ChildObserverBinder;\n}();\n\nfunction remove(viewSlot, previous) {\n return Array.isArray(previous) ? viewSlot.removeMany(previous, true) : viewSlot.remove(previous, true);\n}\n\nvar SwapStrategies = {\n before: function before(viewSlot, previous, callback) {\n return previous === undefined ? callback() : callback().then(function () {\n return remove(viewSlot, previous);\n });\n },\n with: function _with(viewSlot, previous, callback) {\n return previous === undefined ? callback() : Promise.all([remove(viewSlot, previous), callback()]);\n },\n after: function after(viewSlot, previous, callback) {\n return Promise.resolve(viewSlot.removeAll(true)).then(callback);\n }\n};\n\nfunction tryActivateViewModel(context) {\n if (context.skipActivation || typeof context.viewModel.activate !== 'function') {\n return Promise.resolve();\n }\n\n return context.viewModel.activate(context.model) || Promise.resolve();\n}\n\nvar CompositionEngine = (_dec8 = Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[\"inject\"])(ViewEngine, ViewLocator), _dec8(_class16 = function () {\n function CompositionEngine(viewEngine, viewLocator) {\n \n\n this.viewEngine = viewEngine;\n this.viewLocator = viewLocator;\n }\n\n CompositionEngine.prototype._swap = function _swap(context, view) {\n var swapStrategy = SwapStrategies[context.swapOrder] || SwapStrategies.after;\n var previousViews = context.viewSlot.children.slice();\n\n return swapStrategy(context.viewSlot, previousViews, function () {\n return Promise.resolve(context.viewSlot.add(view)).then(function () {\n if (context.currentController) {\n context.currentController.unbind();\n }\n });\n }).then(function () {\n if (context.compositionTransactionNotifier) {\n context.compositionTransactionNotifier.done();\n }\n });\n };\n\n CompositionEngine.prototype._createControllerAndSwap = function _createControllerAndSwap(context) {\n var _this15 = this;\n\n return this.createController(context).then(function (controller) {\n if (context.compositionTransactionOwnershipToken) {\n return context.compositionTransactionOwnershipToken.waitForCompositionComplete().then(function () {\n controller.automate(context.overrideContext, context.owningView);\n\n return _this15._swap(context, controller.view);\n }).then(function () {\n return controller;\n });\n }\n\n controller.automate(context.overrideContext, context.owningView);\n\n return _this15._swap(context, controller.view).then(function () {\n return controller;\n });\n });\n };\n\n CompositionEngine.prototype.createController = function createController(context) {\n var _this16 = this;\n\n var childContainer = void 0;\n var viewModel = void 0;\n var viewModelResource = void 0;\n\n var m = void 0;\n\n return this.ensureViewModel(context).then(tryActivateViewModel).then(function () {\n childContainer = context.childContainer;\n viewModel = context.viewModel;\n viewModelResource = context.viewModelResource;\n m = viewModelResource.metadata;\n\n var viewStrategy = _this16.viewLocator.getViewStrategy(context.view || viewModel);\n\n if (context.viewResources) {\n viewStrategy.makeRelativeTo(context.viewResources.viewUrl);\n }\n\n return m.load(childContainer, viewModelResource.value, null, viewStrategy, true);\n }).then(function (viewFactory) {\n return m.create(childContainer, BehaviorInstruction.dynamic(context.host, viewModel, viewFactory));\n });\n };\n\n CompositionEngine.prototype.ensureViewModel = function ensureViewModel(context) {\n var childContainer = context.childContainer = context.childContainer || context.container.createChild();\n\n if (typeof context.viewModel === 'string') {\n context.viewModel = context.viewResources ? context.viewResources.relativeToView(context.viewModel) : context.viewModel;\n\n return this.viewEngine.importViewModelResource(context.viewModel).then(function (viewModelResource) {\n childContainer.autoRegister(viewModelResource.value);\n\n if (context.host) {\n childContainer.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].Element, context.host);\n }\n\n context.viewModel = childContainer.viewModel = childContainer.get(viewModelResource.value);\n context.viewModelResource = viewModelResource;\n return context;\n });\n }\n\n var ctor = context.viewModel.constructor;\n var isClass = typeof context.viewModel === 'function';\n if (isClass) {\n ctor = context.viewModel;\n childContainer.autoRegister(ctor);\n }\n var m = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, ctor);\n\n m.elementName = m.elementName || 'dynamic-element';\n\n m.initialize(isClass ? childContainer : context.container || childContainer, ctor);\n\n context.viewModelResource = { metadata: m, value: ctor };\n\n if (context.host) {\n childContainer.registerInstance(aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].Element, context.host);\n }\n childContainer.viewModel = context.viewModel = isClass ? childContainer.get(ctor) : context.viewModel;\n return Promise.resolve(context);\n };\n\n CompositionEngine.prototype.compose = function compose(context) {\n var _this17 = this;\n\n context.childContainer = context.childContainer || context.container.createChild();\n context.view = this.viewLocator.getViewStrategy(context.view);\n\n var transaction = context.childContainer.get(CompositionTransaction);\n var compositionTransactionOwnershipToken = transaction.tryCapture();\n\n if (compositionTransactionOwnershipToken) {\n context.compositionTransactionOwnershipToken = compositionTransactionOwnershipToken;\n } else {\n context.compositionTransactionNotifier = transaction.enlist();\n }\n\n if (context.viewModel) {\n return this._createControllerAndSwap(context);\n } else if (context.view) {\n if (context.viewResources) {\n context.view.makeRelativeTo(context.viewResources.viewUrl);\n }\n\n return context.view.loadViewFactory(this.viewEngine, new ViewCompileInstruction()).then(function (viewFactory) {\n var result = viewFactory.create(context.childContainer);\n result.bind(context.bindingContext, context.overrideContext);\n\n if (context.compositionTransactionOwnershipToken) {\n return context.compositionTransactionOwnershipToken.waitForCompositionComplete().then(function () {\n return _this17._swap(context, result);\n }).then(function () {\n return result;\n });\n }\n\n return _this17._swap(context, result).then(function () {\n return result;\n });\n });\n } else if (context.viewSlot) {\n context.viewSlot.removeAll();\n\n if (context.compositionTransactionNotifier) {\n context.compositionTransactionNotifier.done();\n }\n\n return Promise.resolve(null);\n }\n\n return Promise.resolve(null);\n };\n\n return CompositionEngine;\n}()) || _class16);\n\nvar ElementConfigResource = function () {\n function ElementConfigResource() {\n \n }\n\n ElementConfigResource.prototype.initialize = function initialize(container, target) {};\n\n ElementConfigResource.prototype.register = function register(registry, name) {};\n\n ElementConfigResource.prototype.load = function load(container, target) {\n var config = new target();\n var eventManager = container.get(aurelia_binding__WEBPACK_IMPORTED_MODULE_5__[\"EventManager\"]);\n eventManager.registerElementConfig(config);\n };\n\n return ElementConfigResource;\n}();\n\nfunction resource(instanceOrConfig) {\n return function (target) {\n var isConfig = typeof instanceOrConfig === 'string' || Object.getPrototypeOf(instanceOrConfig) === Object.prototype;\n if (isConfig) {\n target.$resource = instanceOrConfig;\n } else {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, instanceOrConfig, target);\n }\n };\n}\n\nfunction behavior(override) {\n return function (target) {\n if (override instanceof HtmlBehaviorResource) {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, override, target);\n } else {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, target);\n Object.assign(r, override);\n }\n };\n}\n\nfunction customElement(name) {\n return function (target) {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, target);\n r.elementName = validateBehaviorName(name, 'custom element');\n };\n}\n\nfunction customAttribute(name, defaultBindingMode, aliases) {\n return function (target) {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, target);\n r.attributeName = validateBehaviorName(name, 'custom attribute');\n r.attributeDefaultBindingMode = defaultBindingMode;\n r.aliases = aliases;\n };\n}\n\nfunction templateController(target) {\n var deco = function deco(t) {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, t);\n r.liftsContent = true;\n };\n\n return target ? deco(target) : deco;\n}\n\nfunction bindable(nameOrConfigOrTarget, key, descriptor) {\n var deco = function deco(target, key2, descriptor2) {\n var actualTarget = key2 ? target.constructor : target;\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, actualTarget);\n var prop = void 0;\n\n if (key2) {\n nameOrConfigOrTarget = nameOrConfigOrTarget || {};\n nameOrConfigOrTarget.name = key2;\n }\n\n prop = new BindableProperty(nameOrConfigOrTarget);\n return prop.registerWith(actualTarget, r, descriptor2);\n };\n\n if (!nameOrConfigOrTarget) {\n return deco;\n }\n\n if (key) {\n var _target = nameOrConfigOrTarget;\n nameOrConfigOrTarget = null;\n return deco(_target, key, descriptor);\n }\n\n return deco;\n}\n\nfunction dynamicOptions(target) {\n var deco = function deco(t) {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, t);\n r.hasDynamicOptions = true;\n };\n\n return target ? deco(target) : deco;\n}\n\nvar defaultShadowDOMOptions = { mode: 'open' };\n\nfunction useShadowDOM(targetOrOptions) {\n var options = typeof targetOrOptions === 'function' || !targetOrOptions ? defaultShadowDOMOptions : targetOrOptions;\n\n var deco = function deco(t) {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, t);\n r.targetShadowDOM = true;\n r.shadowDOMOptions = options;\n };\n\n return typeof targetOrOptions === 'function' ? deco(targetOrOptions) : deco;\n}\n\nfunction processAttributes(processor) {\n return function (t) {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, t);\n r.processAttributes = function (compiler, resources, node, attributes, elementInstruction) {\n try {\n processor(compiler, resources, node, attributes, elementInstruction);\n } catch (error) {\n aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('templating').error(error);\n }\n };\n };\n}\n\nfunction doNotProcessContent() {\n return false;\n}\n\nfunction processContent(processor) {\n return function (t) {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, t);\n r.processContent = processor ? function (compiler, resources, node, instruction) {\n try {\n return processor(compiler, resources, node, instruction);\n } catch (error) {\n aurelia_logging__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"]('templating').error(error);\n return false;\n }\n } : doNotProcessContent;\n };\n}\n\nfunction containerless(target) {\n var deco = function deco(t) {\n var r = aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].getOrCreateOwn(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, HtmlBehaviorResource, t);\n r.containerless = true;\n };\n\n return target ? deco(target) : deco;\n}\n\nfunction useViewStrategy(strategy) {\n return function (target) {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(ViewLocator.viewStrategyMetadataKey, strategy, target);\n };\n}\n\nfunction useView(path) {\n return useViewStrategy(new RelativeViewStrategy(path));\n}\n\nfunction inlineView(markup, dependencies, dependencyBaseUrl) {\n return useViewStrategy(new InlineViewStrategy(markup, dependencies, dependencyBaseUrl));\n}\n\nfunction noView(targetOrDependencies, dependencyBaseUrl) {\n var target = void 0;\n var dependencies = void 0;\n if (typeof targetOrDependencies === 'function') {\n target = targetOrDependencies;\n } else {\n dependencies = targetOrDependencies;\n target = undefined;\n }\n\n var deco = function deco(t) {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(ViewLocator.viewStrategyMetadataKey, new NoViewStrategy(dependencies, dependencyBaseUrl), t);\n };\n\n return target ? deco(target) : deco;\n}\n\nfunction view(templateOrConfig) {\n return function (target) {\n target.$view = templateOrConfig;\n };\n}\n\nfunction elementConfig(target) {\n var deco = function deco(t) {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].resource, new ElementConfigResource(), t);\n };\n\n return target ? deco(target) : deco;\n}\n\nfunction viewResources() {\n for (var _len = arguments.length, resources = Array(_len), _key7 = 0; _key7 < _len; _key7++) {\n resources[_key7] = arguments[_key7];\n }\n\n return function (target) {\n aurelia_metadata__WEBPACK_IMPORTED_MODULE_1__[\"metadata\"].define(ViewEngine.viewModelRequireMetadataKey, resources, target);\n };\n}\n\nvar TemplatingEngine = (_dec9 = Object(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[\"inject\"])(aurelia_dependency_injection__WEBPACK_IMPORTED_MODULE_6__[\"Container\"], ModuleAnalyzer, ViewCompiler, CompositionEngine), _dec9(_class17 = function () {\n function TemplatingEngine(container, moduleAnalyzer, viewCompiler, compositionEngine) {\n \n\n this._container = container;\n this._moduleAnalyzer = moduleAnalyzer;\n this._viewCompiler = viewCompiler;\n this._compositionEngine = compositionEngine;\n container.registerInstance(Animator, Animator.instance = new Animator());\n }\n\n TemplatingEngine.prototype.configureAnimator = function configureAnimator(animator) {\n this._container.unregister(Animator);\n this._container.registerInstance(Animator, Animator.instance = animator);\n };\n\n TemplatingEngine.prototype.compose = function compose(context) {\n return this._compositionEngine.compose(context);\n };\n\n TemplatingEngine.prototype.enhance = function enhance(instruction) {\n if (instruction instanceof aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].Element) {\n instruction = { element: instruction };\n }\n\n var compilerInstructions = { letExpressions: [] };\n var resources = instruction.resources || this._container.get(ViewResources);\n\n this._viewCompiler._compileNode(instruction.element, resources, compilerInstructions, instruction.element.parentNode, 'root', true);\n\n var factory = new ViewFactory(instruction.element, compilerInstructions, resources);\n var container = instruction.container || this._container.createChild();\n var view = factory.create(container, BehaviorInstruction.enhance());\n\n view.bind(instruction.bindingContext || {}, instruction.overrideContext);\n\n view.firstChild = view.lastChild = view.fragment;\n view.fragment = aurelia_pal__WEBPACK_IMPORTED_MODULE_2__[\"DOM\"].createDocumentFragment();\n view.attached();\n\n return view;\n };\n\n return TemplatingEngine;\n}()) || _class17);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! bluebird */ \"./node_modules/bluebird/js/browser/bluebird.js-exposed\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10ZW1wbGF0aW5nL2Rpc3QvbmF0aXZlLW1vZHVsZXMvYXVyZWxpYS10ZW1wbGF0aW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtdGVtcGxhdGluZy9kaXN0L25hdGl2ZS1tb2R1bGVzL2F1cmVsaWEtdGVtcGxhdGluZy5qcz84NjI4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9jbGFzcywgX3RlbXAsIF9jbGFzczIsIF90ZW1wMiwgX2RlYywgX2NsYXNzMywgX2RlYzIsIF9jbGFzczQsIF9kZWMzLCBfY2xhc3M1LCBfZGVjNCwgX2NsYXNzNiwgX2RlYzUsIF9jbGFzczcsIF9kZWM2LCBfY2xhc3M4LCBfY2xhc3M5LCBfdGVtcDMsIF9jbGFzczEwLCBfdGVtcDQsIF9jbGFzczEyLCBfY2xhc3MxNCwgX3RlbXA1LCBfZGVjNywgX2NsYXNzMTUsIF9kZWM4LCBfY2xhc3MxNiwgX2RlYzksIF9jbGFzczE3O1xuXG5cblxuaW1wb3J0ICogYXMgTG9nTWFuYWdlciBmcm9tICdhdXJlbGlhLWxvZ2dpbmcnO1xuaW1wb3J0IHsgbWV0YWRhdGEsIE9yaWdpbiwgcHJvdG9jb2wgfSBmcm9tICdhdXJlbGlhLW1ldGFkYXRhJztcbmltcG9ydCB7IERPTSwgUExBVEZPUk0sIEZFQVRVUkUgfSBmcm9tICdhdXJlbGlhLXBhbCc7XG5pbXBvcnQgeyBUZW1wbGF0ZVJlZ2lzdHJ5RW50cnksIExvYWRlciB9IGZyb20gJ2F1cmVsaWEtbG9hZGVyJztcbmltcG9ydCB7IHJlbGF0aXZlVG9GaWxlIH0gZnJvbSAnYXVyZWxpYS1wYXRoJztcbmltcG9ydCB7IFNjb3BlLCBFeHByZXNzaW9uLCBWYWx1ZUNvbnZlcnRlclJlc291cmNlLCBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZSwgY2FtZWxDYXNlLCBCaW5kaW5nLCBjcmVhdGVPdmVycmlkZUNvbnRleHQsIHN1YnNjcmliZXJDb2xsZWN0aW9uLCBiaW5kaW5nTW9kZSwgT2JzZXJ2ZXJMb2NhdG9yLCBFdmVudE1hbmFnZXIgfSBmcm9tICdhdXJlbGlhLWJpbmRpbmcnO1xuaW1wb3J0IHsgQ29udGFpbmVyLCByZXNvbHZlciwgaW5qZWN0IH0gZnJvbSAnYXVyZWxpYS1kZXBlbmRlbmN5LWluamVjdGlvbic7XG5pbXBvcnQgeyBUYXNrUXVldWUgfSBmcm9tICdhdXJlbGlhLXRhc2stcXVldWUnO1xuXG5leHBvcnQgdmFyIGFuaW1hdGlvbkV2ZW50ID0ge1xuICBlbnRlckJlZ2luOiAnYW5pbWF0aW9uOmVudGVyOmJlZ2luJyxcbiAgZW50ZXJBY3RpdmU6ICdhbmltYXRpb246ZW50ZXI6YWN0aXZlJyxcbiAgZW50ZXJEb25lOiAnYW5pbWF0aW9uOmVudGVyOmRvbmUnLFxuICBlbnRlclRpbWVvdXQ6ICdhbmltYXRpb246ZW50ZXI6dGltZW91dCcsXG5cbiAgbGVhdmVCZWdpbjogJ2FuaW1hdGlvbjpsZWF2ZTpiZWdpbicsXG4gIGxlYXZlQWN0aXZlOiAnYW5pbWF0aW9uOmxlYXZlOmFjdGl2ZScsXG4gIGxlYXZlRG9uZTogJ2FuaW1hdGlvbjpsZWF2ZTpkb25lJyxcbiAgbGVhdmVUaW1lb3V0OiAnYW5pbWF0aW9uOmxlYXZlOnRpbWVvdXQnLFxuXG4gIHN0YWdnZXJOZXh0OiAnYW5pbWF0aW9uOnN0YWdnZXI6bmV4dCcsXG5cbiAgcmVtb3ZlQ2xhc3NCZWdpbjogJ2FuaW1hdGlvbjpyZW1vdmUtY2xhc3M6YmVnaW4nLFxuICByZW1vdmVDbGFzc0FjdGl2ZTogJ2FuaW1hdGlvbjpyZW1vdmUtY2xhc3M6YWN0aXZlJyxcbiAgcmVtb3ZlQ2xhc3NEb25lOiAnYW5pbWF0aW9uOnJlbW92ZS1jbGFzczpkb25lJyxcbiAgcmVtb3ZlQ2xhc3NUaW1lb3V0OiAnYW5pbWF0aW9uOnJlbW92ZS1jbGFzczp0aW1lb3V0JyxcblxuICBhZGRDbGFzc0JlZ2luOiAnYW5pbWF0aW9uOmFkZC1jbGFzczpiZWdpbicsXG4gIGFkZENsYXNzQWN0aXZlOiAnYW5pbWF0aW9uOmFkZC1jbGFzczphY3RpdmUnLFxuICBhZGRDbGFzc0RvbmU6ICdhbmltYXRpb246YWRkLWNsYXNzOmRvbmUnLFxuICBhZGRDbGFzc1RpbWVvdXQ6ICdhbmltYXRpb246YWRkLWNsYXNzOnRpbWVvdXQnLFxuXG4gIGFuaW1hdGVCZWdpbjogJ2FuaW1hdGlvbjphbmltYXRlOmJlZ2luJyxcbiAgYW5pbWF0ZUFjdGl2ZTogJ2FuaW1hdGlvbjphbmltYXRlOmFjdGl2ZScsXG4gIGFuaW1hdGVEb25lOiAnYW5pbWF0aW9uOmFuaW1hdGU6ZG9uZScsXG4gIGFuaW1hdGVUaW1lb3V0OiAnYW5pbWF0aW9uOmFuaW1hdGU6dGltZW91dCcsXG5cbiAgc2VxdWVuY2VCZWdpbjogJ2FuaW1hdGlvbjpzZXF1ZW5jZTpiZWdpbicsXG4gIHNlcXVlbmNlRG9uZTogJ2FuaW1hdGlvbjpzZXF1ZW5jZTpkb25lJ1xufTtcblxuZXhwb3J0IHZhciBBbmltYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQW5pbWF0b3IoKSB7XG4gICAgXG4gIH1cblxuICBBbmltYXRvci5wcm90b3R5cGUuZW50ZXIgPSBmdW5jdGlvbiBlbnRlcihlbGVtZW50KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH07XG5cbiAgQW5pbWF0b3IucHJvdG90eXBlLmxlYXZlID0gZnVuY3Rpb24gbGVhdmUoZWxlbWVudCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9O1xuXG4gIEFuaW1hdG9yLnByb3RvdHlwZS5yZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9O1xuXG4gIEFuaW1hdG9yLnByb3RvdHlwZS5hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9O1xuXG4gIEFuaW1hdG9yLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gYW5pbWF0ZShlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgfTtcblxuICBBbmltYXRvci5wcm90b3R5cGUucnVuU2VxdWVuY2UgPSBmdW5jdGlvbiBydW5TZXF1ZW5jZShhbmltYXRpb25zKSB7fTtcblxuICBBbmltYXRvci5wcm90b3R5cGUucmVnaXN0ZXJFZmZlY3QgPSBmdW5jdGlvbiByZWdpc3RlckVmZmVjdChlZmZlY3ROYW1lLCBwcm9wZXJ0aWVzKSB7fTtcblxuICBBbmltYXRvci5wcm90b3R5cGUudW5yZWdpc3RlckVmZmVjdCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJFZmZlY3QoZWZmZWN0TmFtZSkge307XG5cbiAgcmV0dXJuIEFuaW1hdG9yO1xufSgpO1xuXG5leHBvcnQgdmFyIENvbXBvc2l0aW9uVHJhbnNhY3Rpb25Ob3RpZmllciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyKG93bmVyKSB7XG4gICAgXG5cbiAgICB0aGlzLm93bmVyID0gb3duZXI7XG4gICAgdGhpcy5vd25lci5fY29tcG9zaXRpb25Db3VudCsrO1xuICB9XG5cbiAgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyLnByb3RvdHlwZS5kb25lID0gZnVuY3Rpb24gZG9uZSgpIHtcbiAgICB0aGlzLm93bmVyLl9jb21wb3NpdGlvbkNvdW50LS07XG4gICAgdGhpcy5vd25lci5fdHJ5Q29tcGxldGVUcmFuc2FjdGlvbigpO1xuICB9O1xuXG4gIHJldHVybiBDb21wb3NpdGlvblRyYW5zYWN0aW9uTm90aWZpZXI7XG59KCk7XG5cbmV4cG9ydCB2YXIgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4ob3duZXIpIHtcbiAgICBcblxuICAgIHRoaXMub3duZXIgPSBvd25lcjtcbiAgICB0aGlzLm93bmVyLl9vd25lcnNoaXBUb2tlbiA9IHRoaXM7XG4gICAgdGhpcy50aGVuYWJsZSA9IHRoaXMuX2NyZWF0ZVRoZW5hYmxlKCk7XG4gIH1cblxuICBDb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4ucHJvdG90eXBlLndhaXRGb3JDb21wb3NpdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gd2FpdEZvckNvbXBvc2l0aW9uQ29tcGxldGUoKSB7XG4gICAgdGhpcy5vd25lci5fdHJ5Q29tcGxldGVUcmFuc2FjdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnRoZW5hYmxlO1xuICB9O1xuXG4gIENvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbi5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgdGhpcy5fcmVzb2x2ZUNhbGxiYWNrKCk7XG4gIH07XG5cbiAgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuLnByb3RvdHlwZS5fY3JlYXRlVGhlbmFibGUgPSBmdW5jdGlvbiBfY3JlYXRlVGhlbmFibGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBfdGhpcy5fcmVzb2x2ZUNhbGxiYWNrID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gQ29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuO1xufSgpO1xuXG5leHBvcnQgdmFyIENvbXBvc2l0aW9uVHJhbnNhY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbXBvc2l0aW9uVHJhbnNhY3Rpb24oKSB7XG4gICAgXG5cbiAgICB0aGlzLl9vd25lcnNoaXBUb2tlbiA9IG51bGw7XG4gICAgdGhpcy5fY29tcG9zaXRpb25Db3VudCA9IDA7XG4gIH1cblxuICBDb21wb3NpdGlvblRyYW5zYWN0aW9uLnByb3RvdHlwZS50cnlDYXB0dXJlID0gZnVuY3Rpb24gdHJ5Q2FwdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3duZXJzaGlwVG9rZW4gPT09IG51bGwgPyBuZXcgQ29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuKHRoaXMpIDogbnVsbDtcbiAgfTtcblxuICBDb21wb3NpdGlvblRyYW5zYWN0aW9uLnByb3RvdHlwZS5lbmxpc3QgPSBmdW5jdGlvbiBlbmxpc3QoKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wb3NpdGlvblRyYW5zYWN0aW9uTm90aWZpZXIodGhpcyk7XG4gIH07XG5cbiAgQ29tcG9zaXRpb25UcmFuc2FjdGlvbi5wcm90b3R5cGUuX3RyeUNvbXBsZXRlVHJhbnNhY3Rpb24gPSBmdW5jdGlvbiBfdHJ5Q29tcGxldGVUcmFuc2FjdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY29tcG9zaXRpb25Db3VudCA8PSAwKSB7XG4gICAgICB0aGlzLl9jb21wb3NpdGlvbkNvdW50ID0gMDtcblxuICAgICAgaWYgKHRoaXMuX293bmVyc2hpcFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB0b2tlbiA9IHRoaXMuX293bmVyc2hpcFRva2VuO1xuICAgICAgICB0aGlzLl9vd25lcnNoaXBUb2tlbiA9IG51bGw7XG4gICAgICAgIHRva2VuLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENvbXBvc2l0aW9uVHJhbnNhY3Rpb247XG59KCk7XG5cbnZhciBjYXBpdGFsTWF0Y2hlciA9IC8oW0EtWl0pL2c7XG5cbmZ1bmN0aW9uIGFkZEh5cGhlbkFuZExvd2VyKGNoYXIpIHtcbiAgcmV0dXJuICctJyArIGNoYXIudG9Mb3dlckNhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9oeXBoZW5hdGUobmFtZSkge1xuICByZXR1cm4gKG5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKS5yZXBsYWNlKGNhcGl0YWxNYXRjaGVyLCBhZGRIeXBoZW5BbmRMb3dlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfaXNBbGxXaGl0ZXNwYWNlKG5vZGUpIHtcbiAgcmV0dXJuICEobm9kZS5hdUludGVycG9sYXRpb25UYXJnZXQgfHwgL1teXFx0XFxuXFxyIF0vLnRlc3Qobm9kZS50ZXh0Q29udGVudCkpO1xufVxuXG5leHBvcnQgdmFyIFZpZXdFbmdpbmVIb29rc1Jlc291cmNlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBWaWV3RW5naW5lSG9va3NSZXNvdXJjZSgpIHtcbiAgICBcbiAgfVxuXG4gIFZpZXdFbmdpbmVIb29rc1Jlc291cmNlLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gaW5pdGlhbGl6ZShjb250YWluZXIsIHRhcmdldCkge1xuICAgIHRoaXMuaW5zdGFuY2UgPSBjb250YWluZXIuZ2V0KHRhcmdldCk7XG4gIH07XG5cbiAgVmlld0VuZ2luZUhvb2tzUmVzb3VyY2UucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIocmVnaXN0cnksIG5hbWUpIHtcbiAgICByZWdpc3RyeS5yZWdpc3RlclZpZXdFbmdpbmVIb29rcyh0aGlzLmluc3RhbmNlKTtcbiAgfTtcblxuICBWaWV3RW5naW5lSG9va3NSZXNvdXJjZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQoY29udGFpbmVyLCB0YXJnZXQpIHt9O1xuXG4gIFZpZXdFbmdpbmVIb29rc1Jlc291cmNlLmNvbnZlbnRpb24gPSBmdW5jdGlvbiBjb252ZW50aW9uKG5hbWUpIHtcbiAgICBpZiAobmFtZS5lbmRzV2l0aCgnVmlld0VuZ2luZUhvb2tzJykpIHtcbiAgICAgIHJldHVybiBuZXcgVmlld0VuZ2luZUhvb2tzUmVzb3VyY2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFZpZXdFbmdpbmVIb29rc1Jlc291cmNlO1xufSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gdmlld0VuZ2luZUhvb2tzKHRhcmdldCkge1xuICB2YXIgZGVjbyA9IGZ1bmN0aW9uIGRlY28odCkge1xuICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5yZXNvdXJjZSwgbmV3IFZpZXdFbmdpbmVIb29rc1Jlc291cmNlKCksIHQpO1xuICB9O1xuXG4gIHJldHVybiB0YXJnZXQgPyBkZWNvKHRhcmdldCkgOiBkZWNvO1xufVxuXG5leHBvcnQgdmFyIEVsZW1lbnRFdmVudHMgPSAoX3RlbXAgPSBfY2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEVsZW1lbnRFdmVudHMoZWxlbWVudCkge1xuICAgIFxuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgfVxuXG4gIEVsZW1lbnRFdmVudHMucHJvdG90eXBlLl9lbnF1ZXVlSGFuZGxlciA9IGZ1bmN0aW9uIF9lbnF1ZXVlSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zW2hhbmRsZXIuZXZlbnROYW1lXSA9IHRoaXMuc3Vic2NyaXB0aW9uc1toYW5kbGVyLmV2ZW50TmFtZV0gfHwgW107XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zW2hhbmRsZXIuZXZlbnROYW1lXS5wdXNoKGhhbmRsZXIpO1xuICB9O1xuXG4gIEVsZW1lbnRFdmVudHMucHJvdG90eXBlLl9kZXF1ZXVlSGFuZGxlciA9IGZ1bmN0aW9uIF9kZXF1ZXVlSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgdmFyIGluZGV4ID0gdm9pZCAwO1xuICAgIHZhciBzdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zW2hhbmRsZXIuZXZlbnROYW1lXTtcbiAgICBpZiAoc3Vic2NyaXB0aW9ucykge1xuICAgICAgaW5kZXggPSBzdWJzY3JpcHRpb25zLmluZGV4T2YoaGFuZGxlcik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBzdWJzY3JpcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyO1xuICB9O1xuXG4gIEVsZW1lbnRFdmVudHMucHJvdG90eXBlLnB1Ymxpc2ggPSBmdW5jdGlvbiBwdWJsaXNoKGV2ZW50TmFtZSkge1xuICAgIHZhciBkZXRhaWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBidWJibGVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgIHZhciBjYW5jZWxhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuXG4gICAgdmFyIGV2ZW50ID0gRE9NLmNyZWF0ZUN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgeyBjYW5jZWxhYmxlOiBjYW5jZWxhYmxlLCBidWJibGVzOiBidWJibGVzLCBkZXRhaWw6IGRldGFpbCB9KTtcbiAgICB0aGlzLmVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH07XG5cbiAgRWxlbWVudEV2ZW50cy5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGV2ZW50TmFtZSwgaGFuZGxlciwgY2FwdHVyZU9yT3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGNhcHR1cmVPck9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYXB0dXJlT3JPcHRpb25zID0gRWxlbWVudEV2ZW50cy5kZWZhdWx0TGlzdGVuZXJPcHRpb25zO1xuICAgICAgfVxuICAgICAgdmFyIGV2ZW50SGFuZGxlciA9IG5ldyBFdmVudEhhbmRsZXJJbXBsKHRoaXMsIGV2ZW50TmFtZSwgaGFuZGxlciwgY2FwdHVyZU9yT3B0aW9ucywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIEVsZW1lbnRFdmVudHMucHJvdG90eXBlLnN1YnNjcmliZU9uY2UgPSBmdW5jdGlvbiBzdWJzY3JpYmVPbmNlKGV2ZW50TmFtZSwgaGFuZGxlciwgY2FwdHVyZU9yT3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGNhcHR1cmVPck9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYXB0dXJlT3JPcHRpb25zID0gRWxlbWVudEV2ZW50cy5kZWZhdWx0TGlzdGVuZXJPcHRpb25zO1xuICAgICAgfVxuICAgICAgdmFyIGV2ZW50SGFuZGxlciA9IG5ldyBFdmVudEhhbmRsZXJJbXBsKHRoaXMsIGV2ZW50TmFtZSwgaGFuZGxlciwgY2FwdHVyZU9yT3B0aW9ucywgdHJ1ZSk7XG4gICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgRWxlbWVudEV2ZW50cy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSAmJiB0eXBlb2YgZXZlbnROYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnNbZXZlbnROYW1lXTtcbiAgICAgIGlmIChzdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIHdoaWxlIChzdWJzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25zLnBvcCgpO1xuICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcG9zZUFsbCgpO1xuICAgIH1cbiAgfTtcblxuICBFbGVtZW50RXZlbnRzLnByb3RvdHlwZS5kaXNwb3NlQWxsID0gZnVuY3Rpb24gZGlzcG9zZUFsbCgpIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5kaXNwb3NlKF9rZXkpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gRWxlbWVudEV2ZW50cztcbn0oKSwgX2NsYXNzLmRlZmF1bHRMaXN0ZW5lck9wdGlvbnMgPSB0cnVlLCBfdGVtcCk7XG5cbnZhciBFdmVudEhhbmRsZXJJbXBsID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudEhhbmRsZXJJbXBsKG93bmVyLCBldmVudE5hbWUsIGhhbmRsZXIsIGNhcHR1cmVPck9wdGlvbnMsIG9uY2UpIHtcbiAgICBcblxuICAgIHRoaXMub3duZXIgPSBvd25lcjtcbiAgICB0aGlzLmV2ZW50TmFtZSA9IGV2ZW50TmFtZTtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuXG4gICAgdGhpcy5jYXB0dXJlID0gdHlwZW9mIGNhcHR1cmVPck9wdGlvbnMgPT09ICdib29sZWFuJyA/IGNhcHR1cmVPck9wdGlvbnMgOiBjYXB0dXJlT3JPcHRpb25zLmNhcHR1cmU7XG4gICAgdGhpcy5idWJibGVzID0gIXRoaXMuY2FwdHVyZTtcbiAgICB0aGlzLmNhcHR1cmVPck9wdGlvbnMgPSBjYXB0dXJlT3JPcHRpb25zO1xuICAgIHRoaXMub25jZSA9IG9uY2U7XG4gICAgb3duZXIuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywgY2FwdHVyZU9yT3B0aW9ucyk7XG4gICAgb3duZXIuX2VucXVldWVIYW5kbGVyKHRoaXMpO1xuICB9XG5cbiAgRXZlbnRIYW5kbGVySW1wbC5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVFdmVudChlKSB7XG4gICAgdmFyIGZuID0gdGhpcy5oYW5kbGVyO1xuICAgIGZuKGUpO1xuICAgIGlmICh0aGlzLm9uY2UpIHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBFdmVudEhhbmRsZXJJbXBsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICB0aGlzLm93bmVyLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSwgdGhpcywgdGhpcy5jYXB0dXJlT3JPcHRpb25zKTtcbiAgICB0aGlzLm93bmVyLl9kZXF1ZXVlSGFuZGxlcih0aGlzKTtcbiAgICB0aGlzLm93bmVyID0gdGhpcy5oYW5kbGVyID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gRXZlbnRIYW5kbGVySW1wbDtcbn0oKTtcblxuZXhwb3J0IHZhciBSZXNvdXJjZUxvYWRDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSZXNvdXJjZUxvYWRDb250ZXh0KCkge1xuICAgIFxuXG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSB7fTtcbiAgfVxuXG4gIFJlc291cmNlTG9hZENvbnRleHQucHJvdG90eXBlLmFkZERlcGVuZGVuY3kgPSBmdW5jdGlvbiBhZGREZXBlbmRlbmN5KHVybCkge1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzW3VybF0gPSB0cnVlO1xuICB9O1xuXG4gIFJlc291cmNlTG9hZENvbnRleHQucHJvdG90eXBlLmhhc0RlcGVuZGVuY3kgPSBmdW5jdGlvbiBoYXNEZXBlbmRlbmN5KHVybCkge1xuICAgIHJldHVybiB1cmwgaW4gdGhpcy5kZXBlbmRlbmNpZXM7XG4gIH07XG5cbiAgcmV0dXJuIFJlc291cmNlTG9hZENvbnRleHQ7XG59KCk7XG5cbmV4cG9ydCB2YXIgVmlld0NvbXBpbGVJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIFZpZXdDb21waWxlSW5zdHJ1Y3Rpb24oKSB7XG4gIHZhciB0YXJnZXRTaGFkb3dET00gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICB2YXIgY29tcGlsZVN1cnJvZ2F0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgXG5cbiAgdGhpcy50YXJnZXRTaGFkb3dET00gPSB0YXJnZXRTaGFkb3dET007XG4gIHRoaXMuY29tcGlsZVN1cnJvZ2F0ZSA9IGNvbXBpbGVTdXJyb2dhdGU7XG4gIHRoaXMuYXNzb2NpYXRlZE1vZHVsZUlkID0gbnVsbDtcbn07XG5cblZpZXdDb21waWxlSW5zdHJ1Y3Rpb24ubm9ybWFsID0gbmV3IFZpZXdDb21waWxlSW5zdHJ1Y3Rpb24oKTtcblxuZXhwb3J0IHZhciBCZWhhdmlvckluc3RydWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCZWhhdmlvckluc3RydWN0aW9uKCkge1xuICAgIFxuICB9XG5cbiAgQmVoYXZpb3JJbnN0cnVjdGlvbi5lbmhhbmNlID0gZnVuY3Rpb24gZW5oYW5jZSgpIHtcbiAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgQmVoYXZpb3JJbnN0cnVjdGlvbigpO1xuICAgIGluc3RydWN0aW9uLmVuaGFuY2UgPSB0cnVlO1xuICAgIHJldHVybiBpbnN0cnVjdGlvbjtcbiAgfTtcblxuICBCZWhhdmlvckluc3RydWN0aW9uLnVuaXRUZXN0ID0gZnVuY3Rpb24gdW5pdFRlc3QodHlwZSwgYXR0cmlidXRlcykge1xuICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBCZWhhdmlvckluc3RydWN0aW9uKCk7XG4gICAgaW5zdHJ1Y3Rpb24udHlwZSA9IHR5cGU7XG4gICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG4gICAgcmV0dXJuIGluc3RydWN0aW9uO1xuICB9O1xuXG4gIEJlaGF2aW9ySW5zdHJ1Y3Rpb24uZWxlbWVudCA9IGZ1bmN0aW9uIGVsZW1lbnQobm9kZSwgdHlwZSkge1xuICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBCZWhhdmlvckluc3RydWN0aW9uKCk7XG4gICAgaW5zdHJ1Y3Rpb24udHlwZSA9IHR5cGU7XG4gICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlcyA9IHt9O1xuICAgIGluc3RydWN0aW9uLmFuY2hvcklzQ29udGFpbmVyID0gIShub2RlLmhhc0F0dHJpYnV0ZSgnY29udGFpbmVybGVzcycpIHx8IHR5cGUuY29udGFpbmVybGVzcyk7XG4gICAgaW5zdHJ1Y3Rpb24uaW5pdGlhdGVkQnlCZWhhdmlvciA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RydWN0aW9uO1xuICB9O1xuXG4gIEJlaGF2aW9ySW5zdHJ1Y3Rpb24uYXR0cmlidXRlID0gZnVuY3Rpb24gYXR0cmlidXRlKGF0dHJOYW1lLCB0eXBlKSB7XG4gICAgdmFyIGluc3RydWN0aW9uID0gbmV3IEJlaGF2aW9ySW5zdHJ1Y3Rpb24oKTtcbiAgICBpbnN0cnVjdGlvbi5hdHRyTmFtZSA9IGF0dHJOYW1lO1xuICAgIGluc3RydWN0aW9uLnR5cGUgPSB0eXBlIHx8IG51bGw7XG4gICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlcyA9IHt9O1xuICAgIHJldHVybiBpbnN0cnVjdGlvbjtcbiAgfTtcblxuICBCZWhhdmlvckluc3RydWN0aW9uLmR5bmFtaWMgPSBmdW5jdGlvbiBkeW5hbWljKGhvc3QsIHZpZXdNb2RlbCwgdmlld0ZhY3RvcnkpIHtcbiAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgQmVoYXZpb3JJbnN0cnVjdGlvbigpO1xuICAgIGluc3RydWN0aW9uLmhvc3QgPSBob3N0O1xuICAgIGluc3RydWN0aW9uLnZpZXdNb2RlbCA9IHZpZXdNb2RlbDtcbiAgICBpbnN0cnVjdGlvbi52aWV3RmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xuICAgIGluc3RydWN0aW9uLmluaGVyaXRCaW5kaW5nQ29udGV4dCA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RydWN0aW9uO1xuICB9O1xuXG4gIHJldHVybiBCZWhhdmlvckluc3RydWN0aW9uO1xufSgpO1xuXG52YXIgYmlQcm90byA9IEJlaGF2aW9ySW5zdHJ1Y3Rpb24ucHJvdG90eXBlO1xuYmlQcm90by5pbml0aWF0ZWRCeUJlaGF2aW9yID0gZmFsc2U7XG5iaVByb3RvLmVuaGFuY2UgPSBmYWxzZTtcbmJpUHJvdG8ucGFydFJlcGxhY2VtZW50cyA9IG51bGw7XG5iaVByb3RvLnZpZXdGYWN0b3J5ID0gbnVsbDtcbmJpUHJvdG8ub3JpZ2luYWxBdHRyTmFtZSA9IG51bGw7XG5iaVByb3RvLnNraXBDb250ZW50UHJvY2Vzc2luZyA9IGZhbHNlO1xuYmlQcm90by5jb250ZW50RmFjdG9yeSA9IG51bGw7XG5iaVByb3RvLnZpZXdNb2RlbCA9IG51bGw7XG5iaVByb3RvLmFuY2hvcklzQ29udGFpbmVyID0gZmFsc2U7XG5iaVByb3RvLmhvc3QgPSBudWxsO1xuYmlQcm90by5hdHRyaWJ1dGVzID0gbnVsbDtcbmJpUHJvdG8udHlwZSA9IG51bGw7XG5iaVByb3RvLmF0dHJOYW1lID0gbnVsbDtcbmJpUHJvdG8uaW5oZXJpdEJpbmRpbmdDb250ZXh0ID0gZmFsc2U7XG5cbkJlaGF2aW9ySW5zdHJ1Y3Rpb24ubm9ybWFsID0gbmV3IEJlaGF2aW9ySW5zdHJ1Y3Rpb24oKTtcblxuZXhwb3J0IHZhciBUYXJnZXRJbnN0cnVjdGlvbiA9IChfdGVtcDIgPSBfY2xhc3MyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUYXJnZXRJbnN0cnVjdGlvbigpIHtcbiAgICBcbiAgfVxuXG4gIFRhcmdldEluc3RydWN0aW9uLnNoYWRvd1Nsb3QgPSBmdW5jdGlvbiBzaGFkb3dTbG90KHBhcmVudEluamVjdG9ySWQpIHtcbiAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgVGFyZ2V0SW5zdHJ1Y3Rpb24oKTtcbiAgICBpbnN0cnVjdGlvbi5wYXJlbnRJbmplY3RvcklkID0gcGFyZW50SW5qZWN0b3JJZDtcbiAgICBpbnN0cnVjdGlvbi5zaGFkb3dTbG90ID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XG4gIH07XG5cbiAgVGFyZ2V0SW5zdHJ1Y3Rpb24uY29udGVudEV4cHJlc3Npb24gPSBmdW5jdGlvbiBjb250ZW50RXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gICAgdmFyIGluc3RydWN0aW9uID0gbmV3IFRhcmdldEluc3RydWN0aW9uKCk7XG4gICAgaW5zdHJ1Y3Rpb24uY29udGVudEV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgIHJldHVybiBpbnN0cnVjdGlvbjtcbiAgfTtcblxuICBUYXJnZXRJbnN0cnVjdGlvbi5sZXRFbGVtZW50ID0gZnVuY3Rpb24gbGV0RWxlbWVudChleHByZXNzaW9ucykge1xuICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBUYXJnZXRJbnN0cnVjdGlvbigpO1xuICAgIGluc3RydWN0aW9uLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7XG4gICAgaW5zdHJ1Y3Rpb24ubGV0RWxlbWVudCA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RydWN0aW9uO1xuICB9O1xuXG4gIFRhcmdldEluc3RydWN0aW9uLmxpZnRpbmcgPSBmdW5jdGlvbiBsaWZ0aW5nKHBhcmVudEluamVjdG9ySWQsIGxpZnRpbmdJbnN0cnVjdGlvbikge1xuICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBUYXJnZXRJbnN0cnVjdGlvbigpO1xuICAgIGluc3RydWN0aW9uLnBhcmVudEluamVjdG9ySWQgPSBwYXJlbnRJbmplY3RvcklkO1xuICAgIGluc3RydWN0aW9uLmV4cHJlc3Npb25zID0gVGFyZ2V0SW5zdHJ1Y3Rpb24ubm9FeHByZXNzaW9ucztcbiAgICBpbnN0cnVjdGlvbi5iZWhhdmlvckluc3RydWN0aW9ucyA9IFtsaWZ0aW5nSW5zdHJ1Y3Rpb25dO1xuICAgIGluc3RydWN0aW9uLnZpZXdGYWN0b3J5ID0gbGlmdGluZ0luc3RydWN0aW9uLnZpZXdGYWN0b3J5O1xuICAgIGluc3RydWN0aW9uLnByb3ZpZGVycyA9IFtsaWZ0aW5nSW5zdHJ1Y3Rpb24udHlwZS50YXJnZXRdO1xuICAgIGluc3RydWN0aW9uLmxpZnRpbmcgPSB0cnVlO1xuICAgIHJldHVybiBpbnN0cnVjdGlvbjtcbiAgfTtcblxuICBUYXJnZXRJbnN0cnVjdGlvbi5ub3JtYWwgPSBmdW5jdGlvbiBub3JtYWwoaW5qZWN0b3JJZCwgcGFyZW50SW5qZWN0b3JJZCwgcHJvdmlkZXJzLCBiZWhhdmlvckluc3RydWN0aW9ucywgZXhwcmVzc2lvbnMsIGVsZW1lbnRJbnN0cnVjdGlvbikge1xuICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBUYXJnZXRJbnN0cnVjdGlvbigpO1xuICAgIGluc3RydWN0aW9uLmluamVjdG9ySWQgPSBpbmplY3RvcklkO1xuICAgIGluc3RydWN0aW9uLnBhcmVudEluamVjdG9ySWQgPSBwYXJlbnRJbmplY3RvcklkO1xuICAgIGluc3RydWN0aW9uLnByb3ZpZGVycyA9IHByb3ZpZGVycztcbiAgICBpbnN0cnVjdGlvbi5iZWhhdmlvckluc3RydWN0aW9ucyA9IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zO1xuICAgIGluc3RydWN0aW9uLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7XG4gICAgaW5zdHJ1Y3Rpb24uYW5jaG9ySXNDb250YWluZXIgPSBlbGVtZW50SW5zdHJ1Y3Rpb24gPyBlbGVtZW50SW5zdHJ1Y3Rpb24uYW5jaG9ySXNDb250YWluZXIgOiB0cnVlO1xuICAgIGluc3RydWN0aW9uLmVsZW1lbnRJbnN0cnVjdGlvbiA9IGVsZW1lbnRJbnN0cnVjdGlvbjtcbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XG4gIH07XG5cbiAgVGFyZ2V0SW5zdHJ1Y3Rpb24uc3Vycm9nYXRlID0gZnVuY3Rpb24gc3Vycm9nYXRlKHByb3ZpZGVycywgYmVoYXZpb3JJbnN0cnVjdGlvbnMsIGV4cHJlc3Npb25zLCB2YWx1ZXMpIHtcbiAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgVGFyZ2V0SW5zdHJ1Y3Rpb24oKTtcbiAgICBpbnN0cnVjdGlvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zO1xuICAgIGluc3RydWN0aW9uLmJlaGF2aW9ySW5zdHJ1Y3Rpb25zID0gYmVoYXZpb3JJbnN0cnVjdGlvbnM7XG4gICAgaW5zdHJ1Y3Rpb24ucHJvdmlkZXJzID0gcHJvdmlkZXJzO1xuICAgIGluc3RydWN0aW9uLnZhbHVlcyA9IHZhbHVlcztcbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XG4gIH07XG5cbiAgcmV0dXJuIFRhcmdldEluc3RydWN0aW9uO1xufSgpLCBfY2xhc3MyLm5vRXhwcmVzc2lvbnMgPSBPYmplY3QuZnJlZXplKFtdKSwgX3RlbXAyKTtcblxudmFyIHRpUHJvdG8gPSBUYXJnZXRJbnN0cnVjdGlvbi5wcm90b3R5cGU7XG5cbnRpUHJvdG8uaW5qZWN0b3JJZCA9IG51bGw7XG50aVByb3RvLnBhcmVudEluamVjdG9ySWQgPSBudWxsO1xuXG50aVByb3RvLnNoYWRvd1Nsb3QgPSBmYWxzZTtcbnRpUHJvdG8uc2xvdE5hbWUgPSBudWxsO1xudGlQcm90by5zbG90RmFsbGJhY2tGYWN0b3J5ID0gbnVsbDtcblxudGlQcm90by5jb250ZW50RXhwcmVzc2lvbiA9IG51bGw7XG50aVByb3RvLmxldEVsZW1lbnQgPSBmYWxzZTtcblxudGlQcm90by5leHByZXNzaW9ucyA9IG51bGw7XG50aVByb3RvLmV4cHJlc3Npb25zID0gbnVsbDtcbnRpUHJvdG8ucHJvdmlkZXJzID0gbnVsbDtcblxudGlQcm90by52aWV3RmFjdG9yeSA9IG51bGw7XG5cbnRpUHJvdG8uYW5jaG9ySXNDb250YWluZXIgPSBmYWxzZTtcbnRpUHJvdG8uZWxlbWVudEluc3RydWN0aW9uID0gbnVsbDtcbnRpUHJvdG8ubGlmdGluZyA9IGZhbHNlO1xuXG50aVByb3RvLnZhbHVlcyA9IG51bGw7XG5cbmV4cG9ydCB2YXIgdmlld1N0cmF0ZWd5ID0gcHJvdG9jb2wuY3JlYXRlKCdhdXJlbGlhOnZpZXctc3RyYXRlZ3knLCB7XG4gIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSh0YXJnZXQpIHtcbiAgICBpZiAoISh0eXBlb2YgdGFyZ2V0LmxvYWRWaWV3RmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHJldHVybiAnVmlldyBzdHJhdGVnaWVzIG11c3QgaW1wbGVtZW50OiBsb2FkVmlld0ZhY3Rvcnkodmlld0VuZ2luZTogVmlld0VuZ2luZSwgY29tcGlsZUluc3RydWN0aW9uOiBWaWV3Q29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dD86IFJlc291cmNlTG9hZENvbnRleHQpOiBQcm9taXNlPFZpZXdGYWN0b3J5Pic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGNvbXBvc2U6IGZ1bmN0aW9uIGNvbXBvc2UodGFyZ2V0KSB7XG4gICAgaWYgKCEodHlwZW9mIHRhcmdldC5tYWtlUmVsYXRpdmVUbyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRhcmdldC5tYWtlUmVsYXRpdmVUbyA9IFBMQVRGT1JNLm5vb3A7XG4gICAgfVxuICB9XG59KTtcblxuZXhwb3J0IHZhciBSZWxhdGl2ZVZpZXdTdHJhdGVneSA9IChfZGVjID0gdmlld1N0cmF0ZWd5KCksIF9kZWMoX2NsYXNzMyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVsYXRpdmVWaWV3U3RyYXRlZ3kocGF0aCkge1xuICAgIFxuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmFic29sdXRlUGF0aCA9IG51bGw7XG4gIH1cblxuICBSZWxhdGl2ZVZpZXdTdHJhdGVneS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gbG9hZFZpZXdGYWN0b3J5KHZpZXdFbmdpbmUsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCkge1xuICAgIGlmICh0aGlzLmFic29sdXRlUGF0aCA9PT0gbnVsbCAmJiB0aGlzLm1vZHVsZUlkKSB7XG4gICAgICB0aGlzLmFic29sdXRlUGF0aCA9IHJlbGF0aXZlVG9GaWxlKHRoaXMucGF0aCwgdGhpcy5tb2R1bGVJZCk7XG4gICAgfVxuXG4gICAgY29tcGlsZUluc3RydWN0aW9uLmFzc29jaWF0ZWRNb2R1bGVJZCA9IHRoaXMubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHZpZXdFbmdpbmUubG9hZFZpZXdGYWN0b3J5KHRoaXMuYWJzb2x1dGVQYXRoIHx8IHRoaXMucGF0aCwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KTtcbiAgfTtcblxuICBSZWxhdGl2ZVZpZXdTdHJhdGVneS5wcm90b3R5cGUubWFrZVJlbGF0aXZlVG8gPSBmdW5jdGlvbiBtYWtlUmVsYXRpdmVUbyhmaWxlKSB7XG4gICAgaWYgKHRoaXMuYWJzb2x1dGVQYXRoID09PSBudWxsKSB7XG4gICAgICB0aGlzLmFic29sdXRlUGF0aCA9IHJlbGF0aXZlVG9GaWxlKHRoaXMucGF0aCwgZmlsZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBSZWxhdGl2ZVZpZXdTdHJhdGVneTtcbn0oKSkgfHwgX2NsYXNzMyk7XG5cbmV4cG9ydCB2YXIgQ29udmVudGlvbmFsVmlld1N0cmF0ZWd5ID0gKF9kZWMyID0gdmlld1N0cmF0ZWd5KCksIF9kZWMyKF9jbGFzczQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbnZlbnRpb25hbFZpZXdTdHJhdGVneSh2aWV3TG9jYXRvciwgb3JpZ2luKSB7XG4gICAgXG5cbiAgICB0aGlzLm1vZHVsZUlkID0gb3JpZ2luLm1vZHVsZUlkO1xuICAgIHRoaXMudmlld1VybCA9IHZpZXdMb2NhdG9yLmNvbnZlcnRPcmlnaW5Ub1ZpZXdVcmwob3JpZ2luKTtcbiAgfVxuXG4gIENvbnZlbnRpb25hbFZpZXdTdHJhdGVneS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gbG9hZFZpZXdGYWN0b3J5KHZpZXdFbmdpbmUsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCkge1xuICAgIGNvbXBpbGVJbnN0cnVjdGlvbi5hc3NvY2lhdGVkTW9kdWxlSWQgPSB0aGlzLm1vZHVsZUlkO1xuICAgIHJldHVybiB2aWV3RW5naW5lLmxvYWRWaWV3RmFjdG9yeSh0aGlzLnZpZXdVcmwsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCk7XG4gIH07XG5cbiAgcmV0dXJuIENvbnZlbnRpb25hbFZpZXdTdHJhdGVneTtcbn0oKSkgfHwgX2NsYXNzNCk7XG5cbmV4cG9ydCB2YXIgTm9WaWV3U3RyYXRlZ3kgPSAoX2RlYzMgPSB2aWV3U3RyYXRlZ3koKSwgX2RlYzMoX2NsYXNzNSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm9WaWV3U3RyYXRlZ3koZGVwZW5kZW5jaWVzLCBkZXBlbmRlbmN5QmFzZVVybCkge1xuICAgIFxuXG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMgfHwgbnVsbDtcbiAgICB0aGlzLmRlcGVuZGVuY3lCYXNlVXJsID0gZGVwZW5kZW5jeUJhc2VVcmwgfHwgJyc7XG4gIH1cblxuICBOb1ZpZXdTdHJhdGVneS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gbG9hZFZpZXdGYWN0b3J5KHZpZXdFbmdpbmUsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cnk7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IHRoaXMuZGVwZW5kZW5jaWVzO1xuXG4gICAgaWYgKGVudHJ5ICYmIGVudHJ5LmZhY3RvcnlJc1JlYWR5KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMuZW50cnkgPSBlbnRyeSA9IG5ldyBUZW1wbGF0ZVJlZ2lzdHJ5RW50cnkodGhpcy5tb2R1bGVJZCB8fCB0aGlzLmRlcGVuZGVuY3lCYXNlVXJsKTtcblxuICAgIGVudHJ5LmRlcGVuZGVuY2llcyA9IFtdO1xuICAgIGVudHJ5LnRlbXBsYXRlSXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBkZXBlbmRlbmNpZXNbaV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGVudHJ5LmFkZERlcGVuZGVuY3koY3VycmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cnkuYWRkRGVwZW5kZW5jeShjdXJyZW50LmZyb20sIGN1cnJlbnQuYXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGlsZUluc3RydWN0aW9uLmFzc29jaWF0ZWRNb2R1bGVJZCA9IHRoaXMubW9kdWxlSWQ7XG5cbiAgICByZXR1cm4gdmlld0VuZ2luZS5sb2FkVmlld0ZhY3RvcnkoZW50cnksIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCk7XG4gIH07XG5cbiAgcmV0dXJuIE5vVmlld1N0cmF0ZWd5O1xufSgpKSB8fCBfY2xhc3M1KTtcblxuZXhwb3J0IHZhciBUZW1wbGF0ZVJlZ2lzdHJ5Vmlld1N0cmF0ZWd5ID0gKF9kZWM0ID0gdmlld1N0cmF0ZWd5KCksIF9kZWM0KF9jbGFzczYgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRlbXBsYXRlUmVnaXN0cnlWaWV3U3RyYXRlZ3kobW9kdWxlSWQsIGVudHJ5KSB7XG4gICAgXG5cbiAgICB0aGlzLm1vZHVsZUlkID0gbW9kdWxlSWQ7XG4gICAgdGhpcy5lbnRyeSA9IGVudHJ5O1xuICB9XG5cbiAgVGVtcGxhdGVSZWdpc3RyeVZpZXdTdHJhdGVneS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gbG9hZFZpZXdGYWN0b3J5KHZpZXdFbmdpbmUsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cnk7XG5cbiAgICBpZiAoZW50cnkuZmFjdG9yeUlzUmVhZHkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50cnkuZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgY29tcGlsZUluc3RydWN0aW9uLmFzc29jaWF0ZWRNb2R1bGVJZCA9IHRoaXMubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHZpZXdFbmdpbmUubG9hZFZpZXdGYWN0b3J5KGVudHJ5LCBjb21waWxlSW5zdHJ1Y3Rpb24sIGxvYWRDb250ZXh0LCB0YXJnZXQpO1xuICB9O1xuXG4gIHJldHVybiBUZW1wbGF0ZVJlZ2lzdHJ5Vmlld1N0cmF0ZWd5O1xufSgpKSB8fCBfY2xhc3M2KTtcblxuZXhwb3J0IHZhciBJbmxpbmVWaWV3U3RyYXRlZ3kgPSAoX2RlYzUgPSB2aWV3U3RyYXRlZ3koKSwgX2RlYzUoX2NsYXNzNyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW5saW5lVmlld1N0cmF0ZWd5KG1hcmt1cCwgZGVwZW5kZW5jaWVzLCBkZXBlbmRlbmN5QmFzZVVybCkge1xuICAgIFxuXG4gICAgdGhpcy5tYXJrdXAgPSBtYXJrdXA7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMgfHwgbnVsbDtcbiAgICB0aGlzLmRlcGVuZGVuY3lCYXNlVXJsID0gZGVwZW5kZW5jeUJhc2VVcmwgfHwgJyc7XG4gIH1cblxuICBJbmxpbmVWaWV3U3RyYXRlZ3kucHJvdG90eXBlLmxvYWRWaWV3RmFjdG9yeSA9IGZ1bmN0aW9uIGxvYWRWaWV3RmFjdG9yeSh2aWV3RW5naW5lLCBjb21waWxlSW5zdHJ1Y3Rpb24sIGxvYWRDb250ZXh0LCB0YXJnZXQpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJ5O1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSB0aGlzLmRlcGVuZGVuY2llcztcblxuICAgIGlmIChlbnRyeSAmJiBlbnRyeS5mYWN0b3J5SXNSZWFkeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbnRyeS5mYWN0b3J5KTtcbiAgICB9XG5cbiAgICB0aGlzLmVudHJ5ID0gZW50cnkgPSBuZXcgVGVtcGxhdGVSZWdpc3RyeUVudHJ5KHRoaXMubW9kdWxlSWQgfHwgdGhpcy5kZXBlbmRlbmN5QmFzZVVybCk7XG4gICAgZW50cnkudGVtcGxhdGUgPSBET00uY3JlYXRlVGVtcGxhdGVGcm9tTWFya3VwKHRoaXMubWFya3VwKTtcblxuICAgIGlmIChkZXBlbmRlbmNpZXMgIT09IG51bGwpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gZGVwZW5kZW5jaWVzW2ldO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBlbnRyeS5hZGREZXBlbmRlbmN5KGN1cnJlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudHJ5LmFkZERlcGVuZGVuY3koY3VycmVudC5mcm9tLCBjdXJyZW50LmFzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBpbGVJbnN0cnVjdGlvbi5hc3NvY2lhdGVkTW9kdWxlSWQgPSB0aGlzLm1vZHVsZUlkO1xuICAgIHJldHVybiB2aWV3RW5naW5lLmxvYWRWaWV3RmFjdG9yeShlbnRyeSwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KTtcbiAgfTtcblxuICByZXR1cm4gSW5saW5lVmlld1N0cmF0ZWd5O1xufSgpKSB8fCBfY2xhc3M3KTtcblxuZXhwb3J0IHZhciBTdGF0aWNWaWV3U3RyYXRlZ3kgPSAoX2RlYzYgPSB2aWV3U3RyYXRlZ3koKSwgX2RlYzYoX2NsYXNzOCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RhdGljVmlld1N0cmF0ZWd5KGNvbmZpZykge1xuICAgIFxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnIHx8IGNvbmZpZyBpbnN0YW5jZW9mIERPTS5FbGVtZW50ICYmIGNvbmZpZy50YWdOYW1lID09PSAnVEVNUExBVEUnKSB7XG4gICAgICBjb25maWcgPSB7XG4gICAgICAgIHRlbXBsYXRlOiBjb25maWdcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMudGVtcGxhdGUgPSBjb25maWcudGVtcGxhdGU7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBjb25maWcuZGVwZW5kZW5jaWVzIHx8IFtdO1xuICAgIHRoaXMuZmFjdG9yeUlzUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLm9uUmVhZHkgPSBudWxsO1xuICAgIHRoaXMubW9kdWxlSWQgPSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIFN0YXRpY1ZpZXdTdHJhdGVneS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gbG9hZFZpZXdGYWN0b3J5KHZpZXdFbmdpbmUsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQsIHRhcmdldCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuZmFjdG9yeUlzUmVhZHkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5mYWN0b3J5KTtcbiAgICB9XG4gICAgdmFyIGRlcHMgPSB0aGlzLmRlcGVuZGVuY2llcztcbiAgICBkZXBzID0gdHlwZW9mIGRlcHMgPT09ICdmdW5jdGlvbicgPyBkZXBzKCkgOiBkZXBzO1xuICAgIGRlcHMgPSBkZXBzID8gZGVwcyA6IFtdO1xuICAgIGRlcHMgPSBBcnJheS5pc0FycmF5KGRlcHMpID8gZGVwcyA6IFtkZXBzXTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChkZXBzKS50aGVuKGZ1bmN0aW9uIChkZXBlbmRlbmNpZXMpIHtcbiAgICAgIHZhciBjb250YWluZXIgPSB2aWV3RW5naW5lLmNvbnRhaW5lcjtcbiAgICAgIHZhciBhcHBSZXNvdXJjZXMgPSB2aWV3RW5naW5lLmFwcFJlc291cmNlcztcbiAgICAgIHZhciB2aWV3Q29tcGlsZXIgPSB2aWV3RW5naW5lLnZpZXdDb21waWxlcjtcbiAgICAgIHZhciB2aWV3UmVzb3VyY2VzID0gbmV3IFZpZXdSZXNvdXJjZXMoYXBwUmVzb3VyY2VzKTtcblxuICAgICAgdmFyIHJlc291cmNlID0gdm9pZCAwO1xuICAgICAgdmFyIGVsRGVwcyA9IFtdO1xuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHZpZXdSZXNvdXJjZXMuYXV0b1JlZ2lzdGVyKGNvbnRhaW5lciwgdGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gZGVwZW5kZW5jaWVzLCBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoX2l0ZXJhdG9yKSwgX2kgPSAwLCBfaXRlcmF0b3IgPSBfaXNBcnJheSA/IF9pdGVyYXRvciA6IF9pdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdKCk7Oykge1xuICAgICAgICB2YXIgX3JlZjtcblxuICAgICAgICBpZiAoX2lzQXJyYXkpIHtcbiAgICAgICAgICBpZiAoX2kgPj0gX2l0ZXJhdG9yLmxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgX3JlZiA9IF9pdGVyYXRvcltfaSsrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfaSA9IF9pdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgaWYgKF9pLmRvbmUpIGJyZWFrO1xuICAgICAgICAgIF9yZWYgPSBfaS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkZXAgPSBfcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZGVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVzb3VyY2UgPSB2aWV3UmVzb3VyY2VzLmF1dG9SZWdpc3Rlcihjb250YWluZXIsIGRlcCk7XG4gICAgICAgICAgaWYgKHJlc291cmNlLmVsZW1lbnROYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBlbERlcHMucHVzaChyZXNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcCAmJiAodHlwZW9mIGRlcCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoZGVwKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2tleTIgaW4gZGVwKSB7XG4gICAgICAgICAgICB2YXIgZXhwb3J0ZWQgPSBkZXBbX2tleTJdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICByZXNvdXJjZSA9IHZpZXdSZXNvdXJjZXMuYXV0b1JlZ2lzdGVyKGNvbnRhaW5lciwgZXhwb3J0ZWQpO1xuICAgICAgICAgICAgICBpZiAocmVzb3VyY2UuZWxlbWVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlbERlcHMucHVzaChyZXNvdXJjZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXBlbmRlbmN5IG5laXRoZXIgZnVuY3Rpb24gbm9yIG9iamVjdC4gUmVjZWl2ZWQ6IFwiJyArICh0eXBlb2YgZGVwID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihkZXApKSArICdcIicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChlbERlcHMubWFwKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICByZXR1cm4gZWwubG9hZChjb250YWluZXIsIGVsLnRhcmdldCk7XG4gICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBmYWN0b3J5ID0gX3RoaXMyLnRlbXBsYXRlICE9PSBudWxsID8gdmlld0NvbXBpbGVyLmNvbXBpbGUoX3RoaXMyLnRlbXBsYXRlLCB2aWV3UmVzb3VyY2VzLCBjb21waWxlSW5zdHJ1Y3Rpb24pIDogbnVsbDtcbiAgICAgICAgX3RoaXMyLmZhY3RvcnlJc1JlYWR5ID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMyLmZhY3RvcnkgPSBmYWN0b3J5O1xuICAgICAgICByZXR1cm4gZmFjdG9yeTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTdGF0aWNWaWV3U3RyYXRlZ3k7XG59KCkpIHx8IF9jbGFzczgpO1xuXG5leHBvcnQgdmFyIFZpZXdMb2NhdG9yID0gKF90ZW1wMyA9IF9jbGFzczkgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFZpZXdMb2NhdG9yKCkge1xuICAgIFxuICB9XG5cbiAgVmlld0xvY2F0b3IucHJvdG90eXBlLmdldFZpZXdTdHJhdGVneSA9IGZ1bmN0aW9uIGdldFZpZXdTdHJhdGVneSh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpID09PSAnb2JqZWN0JyAmJiAnZ2V0Vmlld1N0cmF0ZWd5JyBpbiB2YWx1ZSkge1xuICAgICAgdmFyIF9vcmlnaW4gPSBPcmlnaW4uZ2V0KHZhbHVlLmNvbnN0cnVjdG9yKTtcblxuICAgICAgdmFsdWUgPSB2YWx1ZS5nZXRWaWV3U3RyYXRlZ3koKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgUmVsYXRpdmVWaWV3U3RyYXRlZ3kodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB2aWV3U3RyYXRlZ3kuYXNzZXJ0KHZhbHVlKTtcblxuICAgICAgaWYgKF9vcmlnaW4ubW9kdWxlSWQpIHtcbiAgICAgICAgdmFsdWUubWFrZVJlbGF0aXZlVG8oX29yaWdpbi5tb2R1bGVJZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBuZXcgUmVsYXRpdmVWaWV3U3RyYXRlZ3kodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh2aWV3U3RyYXRlZ3kudmFsaWRhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5jb25zdHJ1Y3RvcjtcbiAgICB9XG5cbiAgICBpZiAoJyR2aWV3JyBpbiB2YWx1ZSkge1xuICAgICAgdmFyIGMgPSB2YWx1ZS4kdmlldztcbiAgICAgIHZhciBfdmlldyA9IHZvaWQgMDtcbiAgICAgIGMgPSB0eXBlb2YgYyA9PT0gJ2Z1bmN0aW9uJyA/IGMuY2FsbCh2YWx1ZSkgOiBjO1xuICAgICAgaWYgKGMgPT09IG51bGwpIHtcbiAgICAgICAgX3ZpZXcgPSBuZXcgTm9WaWV3U3RyYXRlZ3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF92aWV3ID0gYyBpbnN0YW5jZW9mIFN0YXRpY1ZpZXdTdHJhdGVneSA/IGMgOiBuZXcgU3RhdGljVmlld1N0cmF0ZWd5KGMpO1xuICAgICAgfVxuICAgICAgbWV0YWRhdGEuZGVmaW5lKFZpZXdMb2NhdG9yLnZpZXdTdHJhdGVneU1ldGFkYXRhS2V5LCBfdmlldywgdmFsdWUpO1xuICAgICAgcmV0dXJuIF92aWV3O1xuICAgIH1cblxuICAgIHZhciBvcmlnaW4gPSBPcmlnaW4uZ2V0KHZhbHVlKTtcbiAgICB2YXIgc3RyYXRlZ3kgPSBtZXRhZGF0YS5nZXQoVmlld0xvY2F0b3Iudmlld1N0cmF0ZWd5TWV0YWRhdGFLZXksIHZhbHVlKTtcblxuICAgIGlmICghc3RyYXRlZ3kpIHtcbiAgICAgIGlmICghb3JpZ2luLm1vZHVsZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IHZpZXcgc3RyYXRlZ3kgZm9yIG9iamVjdC4nLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHN0cmF0ZWd5ID0gdGhpcy5jcmVhdGVGYWxsYmFja1ZpZXdTdHJhdGVneShvcmlnaW4pO1xuICAgIH0gZWxzZSBpZiAob3JpZ2luLm1vZHVsZUlkKSB7XG4gICAgICBzdHJhdGVneS5tb2R1bGVJZCA9IG9yaWdpbi5tb2R1bGVJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyYXRlZ3k7XG4gIH07XG5cbiAgVmlld0xvY2F0b3IucHJvdG90eXBlLmNyZWF0ZUZhbGxiYWNrVmlld1N0cmF0ZWd5ID0gZnVuY3Rpb24gY3JlYXRlRmFsbGJhY2tWaWV3U3RyYXRlZ3kob3JpZ2luKSB7XG4gICAgcmV0dXJuIG5ldyBDb252ZW50aW9uYWxWaWV3U3RyYXRlZ3kodGhpcywgb3JpZ2luKTtcbiAgfTtcblxuICBWaWV3TG9jYXRvci5wcm90b3R5cGUuY29udmVydE9yaWdpblRvVmlld1VybCA9IGZ1bmN0aW9uIGNvbnZlcnRPcmlnaW5Ub1ZpZXdVcmwob3JpZ2luKSB7XG4gICAgdmFyIG1vZHVsZUlkID0gb3JpZ2luLm1vZHVsZUlkO1xuICAgIHZhciBpZCA9IG1vZHVsZUlkLmVuZHNXaXRoKCcuanMnKSB8fCBtb2R1bGVJZC5lbmRzV2l0aCgnLnRzJykgPyBtb2R1bGVJZC5zdWJzdHJpbmcoMCwgbW9kdWxlSWQubGVuZ3RoIC0gMykgOiBtb2R1bGVJZDtcbiAgICByZXR1cm4gaWQgKyAnLmh0bWwnO1xuICB9O1xuXG4gIHJldHVybiBWaWV3TG9jYXRvcjtcbn0oKSwgX2NsYXNzOS52aWV3U3RyYXRlZ3lNZXRhZGF0YUtleSA9ICdhdXJlbGlhOnZpZXctc3RyYXRlZ3knLCBfdGVtcDMpO1xuXG5mdW5jdGlvbiBtaShuYW1lKSB7XG4gIHRocm93IG5ldyBFcnJvcignQmluZGluZ0xhbmd1YWdlIG11c3QgaW1wbGVtZW50ICcgKyBuYW1lICsgJygpLicpO1xufVxuXG5leHBvcnQgdmFyIEJpbmRpbmdMYW5ndWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQmluZGluZ0xhbmd1YWdlKCkge1xuICAgIFxuICB9XG5cbiAgQmluZGluZ0xhbmd1YWdlLnByb3RvdHlwZS5pbnNwZWN0QXR0cmlidXRlID0gZnVuY3Rpb24gaW5zcGVjdEF0dHJpYnV0ZShyZXNvdXJjZXMsIGVsZW1lbnROYW1lLCBhdHRyTmFtZSwgYXR0clZhbHVlKSB7XG4gICAgbWkoJ2luc3BlY3RBdHRyaWJ1dGUnKTtcbiAgfTtcblxuICBCaW5kaW5nTGFuZ3VhZ2UucHJvdG90eXBlLmNyZWF0ZUF0dHJpYnV0ZUluc3RydWN0aW9uID0gZnVuY3Rpb24gY3JlYXRlQXR0cmlidXRlSW5zdHJ1Y3Rpb24ocmVzb3VyY2VzLCBlbGVtZW50LCBpbmZvLCBleGlzdGluZ0luc3RydWN0aW9uKSB7XG4gICAgbWkoJ2NyZWF0ZUF0dHJpYnV0ZUluc3RydWN0aW9uJyk7XG4gIH07XG5cbiAgQmluZGluZ0xhbmd1YWdlLnByb3RvdHlwZS5jcmVhdGVMZXRFeHByZXNzaW9ucyA9IGZ1bmN0aW9uIGNyZWF0ZUxldEV4cHJlc3Npb25zKHJlc291cmNlcywgZWxlbWVudCkge1xuICAgIG1pKCdjcmVhdGVMZXRFeHByZXNzaW9ucycpO1xuICB9O1xuXG4gIEJpbmRpbmdMYW5ndWFnZS5wcm90b3R5cGUuaW5zcGVjdFRleHRDb250ZW50ID0gZnVuY3Rpb24gaW5zcGVjdFRleHRDb250ZW50KHJlc291cmNlcywgdmFsdWUpIHtcbiAgICBtaSgnaW5zcGVjdFRleHRDb250ZW50Jyk7XG4gIH07XG5cbiAgcmV0dXJuIEJpbmRpbmdMYW5ndWFnZTtcbn0oKTtcblxudmFyIG5vTm9kZXMgPSBPYmplY3QuZnJlZXplKFtdKTtcblxuZXhwb3J0IHZhciBTbG90Q3VzdG9tQXR0cmlidXRlID0gZnVuY3Rpb24gKCkge1xuICBTbG90Q3VzdG9tQXR0cmlidXRlLmluamVjdCA9IGZ1bmN0aW9uIGluamVjdCgpIHtcbiAgICByZXR1cm4gW0RPTS5FbGVtZW50XTtcbiAgfTtcblxuICBmdW5jdGlvbiBTbG90Q3VzdG9tQXR0cmlidXRlKGVsZW1lbnQpIHtcbiAgICBcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5lbGVtZW50LmF1U2xvdEF0dHJpYnV0ZSA9IHRoaXM7XG4gIH1cblxuICBTbG90Q3VzdG9tQXR0cmlidXRlLnByb3RvdHlwZS52YWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiB2YWx1ZUNoYW5nZWQobmV3VmFsdWUsIG9sZFZhbHVlKSB7fTtcblxuICByZXR1cm4gU2xvdEN1c3RvbUF0dHJpYnV0ZTtcbn0oKTtcblxuZXhwb3J0IHZhciBQYXNzVGhyb3VnaFNsb3QgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBhc3NUaHJvdWdoU2xvdChhbmNob3IsIG5hbWUsIGRlc3RpbmF0aW9uTmFtZSwgZmFsbGJhY2tGYWN0b3J5KSB7XG4gICAgXG5cbiAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcbiAgICB0aGlzLmFuY2hvci52aWV3U2xvdCA9IHRoaXM7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IGRlc3RpbmF0aW9uTmFtZTtcbiAgICB0aGlzLmZhbGxiYWNrRmFjdG9yeSA9IGZhbGxiYWNrRmFjdG9yeTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uU2xvdCA9IG51bGw7XG5cbiAgICB0aGlzLnByb2plY3Rpb25zID0gMDtcblxuICAgIHRoaXMuY29udGVudFZpZXcgPSBudWxsO1xuXG4gICAgdmFyIGF0dHIgPSBuZXcgU2xvdEN1c3RvbUF0dHJpYnV0ZSh0aGlzLmFuY2hvcik7XG4gICAgYXR0ci52YWx1ZSA9IHRoaXMuZGVzdGluYXRpb25OYW1lO1xuICB9XG5cbiAgUGFzc1Rocm91Z2hTbG90LnByb3RvdHlwZS5yZW5kZXJGYWxsYmFja0NvbnRlbnQgPSBmdW5jdGlvbiByZW5kZXJGYWxsYmFja0NvbnRlbnQodmlldywgbm9kZXMsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4KSB7XG4gICAgaWYgKHRoaXMuY29udGVudFZpZXcgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY29udGVudFZpZXcgPSB0aGlzLmZhbGxiYWNrRmFjdG9yeS5jcmVhdGUodGhpcy5vd25lclZpZXcuY29udGFpbmVyKTtcbiAgICAgIHRoaXMuY29udGVudFZpZXcuYmluZCh0aGlzLm93bmVyVmlldy5iaW5kaW5nQ29udGV4dCwgdGhpcy5vd25lclZpZXcub3ZlcnJpZGVDb250ZXh0KTtcblxuICAgICAgdmFyIHNsb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHNsb3RzW3RoaXMuZGVzdGluYXRpb25TbG90Lm5hbWVdID0gdGhpcy5kZXN0aW5hdGlvblNsb3Q7XG5cbiAgICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyh0aGlzLmNvbnRlbnRWaWV3LCBzbG90cywgcHJvamVjdGlvblNvdXJjZSwgaW5kZXgsIHRoaXMuZGVzdGluYXRpb25TbG90Lm5hbWUpO1xuICAgIH1cbiAgfTtcblxuICBQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLnBhc3NUaHJvdWdoVG8gPSBmdW5jdGlvbiBwYXNzVGhyb3VnaFRvKGRlc3RpbmF0aW9uU2xvdCkge1xuICAgIHRoaXMuZGVzdGluYXRpb25TbG90ID0gZGVzdGluYXRpb25TbG90O1xuICB9O1xuXG4gIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUuYWRkTm9kZSA9IGZ1bmN0aW9uIGFkZE5vZGUodmlldywgbm9kZSwgcHJvamVjdGlvblNvdXJjZSwgaW5kZXgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50VmlldyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jb250ZW50Vmlldy5yZW1vdmVOb2RlcygpO1xuICAgICAgdGhpcy5jb250ZW50Vmlldy5kZXRhY2hlZCgpO1xuICAgICAgdGhpcy5jb250ZW50Vmlldy51bmJpbmQoKTtcbiAgICAgIHRoaXMuY29udGVudFZpZXcgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLnZpZXdTbG90IGluc3RhbmNlb2YgUGFzc1Rocm91Z2hTbG90KSB7XG4gICAgICBub2RlLnZpZXdTbG90LnBhc3NUaHJvdWdoVG8odGhpcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0aW9ucysrO1xuICAgIHRoaXMuZGVzdGluYXRpb25TbG90LmFkZE5vZGUodmlldywgbm9kZSwgcHJvamVjdGlvblNvdXJjZSwgaW5kZXgpO1xuICB9O1xuXG4gIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUucmVtb3ZlVmlldyA9IGZ1bmN0aW9uIHJlbW92ZVZpZXcodmlldywgcHJvamVjdGlvblNvdXJjZSkge1xuICAgIHRoaXMucHJvamVjdGlvbnMtLTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uU2xvdC5yZW1vdmVWaWV3KHZpZXcsIHByb2plY3Rpb25Tb3VyY2UpO1xuXG4gICAgaWYgKHRoaXMubmVlZHNGYWxsYmFja1JlbmRlcmluZykge1xuICAgICAgdGhpcy5yZW5kZXJGYWxsYmFja0NvbnRlbnQobnVsbCwgbm9Ob2RlcywgcHJvamVjdGlvblNvdXJjZSk7XG4gICAgfVxuICB9O1xuXG4gIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24gcmVtb3ZlQWxsKHByb2plY3Rpb25Tb3VyY2UpIHtcbiAgICB0aGlzLnByb2plY3Rpb25zID0gMDtcbiAgICB0aGlzLmRlc3RpbmF0aW9uU2xvdC5yZW1vdmVBbGwocHJvamVjdGlvblNvdXJjZSk7XG5cbiAgICBpZiAodGhpcy5uZWVkc0ZhbGxiYWNrUmVuZGVyaW5nKSB7XG4gICAgICB0aGlzLnJlbmRlckZhbGxiYWNrQ29udGVudChudWxsLCBub05vZGVzLCBwcm9qZWN0aW9uU291cmNlKTtcbiAgICB9XG4gIH07XG5cbiAgUGFzc1Rocm91Z2hTbG90LnByb3RvdHlwZS5wcm9qZWN0RnJvbSA9IGZ1bmN0aW9uIHByb2plY3RGcm9tKHZpZXcsIHByb2plY3Rpb25Tb3VyY2UpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uU2xvdC5wcm9qZWN0RnJvbSh2aWV3LCBwcm9qZWN0aW9uU291cmNlKTtcbiAgfTtcblxuICBQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLmNyZWF0ZWQgPSBmdW5jdGlvbiBjcmVhdGVkKG93bmVyVmlldykge1xuICAgIHRoaXMub3duZXJWaWV3ID0gb3duZXJWaWV3O1xuICB9O1xuXG4gIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodmlldykge1xuICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3KSB7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3LmJpbmQodmlldy5iaW5kaW5nQ29udGV4dCwgdmlldy5vdmVycmlkZUNvbnRleHQpO1xuICAgIH1cbiAgfTtcblxuICBQYXNzVGhyb3VnaFNsb3QucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gYXR0YWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuY29udGVudFZpZXcpIHtcbiAgICAgIHRoaXMuY29udGVudFZpZXcuYXR0YWNoZWQoKTtcbiAgICB9XG4gIH07XG5cbiAgUGFzc1Rocm91Z2hTbG90LnByb3RvdHlwZS5kZXRhY2hlZCA9IGZ1bmN0aW9uIGRldGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3KSB7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3LmRldGFjaGVkKCk7XG4gICAgfVxuICB9O1xuXG4gIFBhc3NUaHJvdWdoU2xvdC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3KSB7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3LnVuYmluZCgpO1xuICAgIH1cbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoUGFzc1Rocm91Z2hTbG90LCBbe1xuICAgIGtleTogJ25lZWRzRmFsbGJhY2tSZW5kZXJpbmcnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2tGYWN0b3J5ICYmIHRoaXMucHJvamVjdGlvbnMgPT09IDA7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBhc3NUaHJvdWdoU2xvdDtcbn0oKTtcblxuZXhwb3J0IHZhciBTaGFkb3dTbG90ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTaGFkb3dTbG90KGFuY2hvciwgbmFtZSwgZmFsbGJhY2tGYWN0b3J5KSB7XG4gICAgXG5cbiAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcbiAgICB0aGlzLmFuY2hvci5pc0NvbnRlbnRQcm9qZWN0aW9uU291cmNlID0gdHJ1ZTtcbiAgICB0aGlzLmFuY2hvci52aWV3U2xvdCA9IHRoaXM7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmZhbGxiYWNrRmFjdG9yeSA9IGZhbGxiYWNrRmFjdG9yeTtcbiAgICB0aGlzLmNvbnRlbnRWaWV3ID0gbnVsbDtcbiAgICB0aGlzLnByb2plY3Rpb25zID0gMDtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLnByb2plY3RGcm9tQW5jaG9ycyA9IG51bGw7XG4gICAgdGhpcy5kZXN0aW5hdGlvblNsb3RzID0gbnVsbDtcbiAgfVxuXG4gIFNoYWRvd1Nsb3QucHJvdG90eXBlLmFkZE5vZGUgPSBmdW5jdGlvbiBhZGROb2RlKHZpZXcsIG5vZGUsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4LCBkZXN0aW5hdGlvbikge1xuICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3LnJlbW92ZU5vZGVzKCk7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3LmRldGFjaGVkKCk7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3LnVuYmluZCgpO1xuICAgICAgdGhpcy5jb250ZW50VmlldyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudmlld1Nsb3QgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaFNsb3QpIHtcbiAgICAgIG5vZGUudmlld1Nsb3QucGFzc1Rocm91Z2hUbyh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXN0aW5hdGlvblNsb3RzICE9PSBudWxsKSB7XG4gICAgICBTaGFkb3dET00uZGlzdHJpYnV0ZU5vZGVzKHZpZXcsIFtub2RlXSwgdGhpcy5kZXN0aW5hdGlvblNsb3RzLCB0aGlzLCBpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuYXVPd25lclZpZXcgPSB2aWV3O1xuICAgICAgbm9kZS5hdVByb2plY3Rpb25Tb3VyY2UgPSBwcm9qZWN0aW9uU291cmNlO1xuICAgICAgbm9kZS5hdUFzc2lnbmVkU2xvdCA9IHRoaXM7XG5cbiAgICAgIHZhciBhbmNob3IgPSB0aGlzLl9maW5kQW5jaG9yKHZpZXcsIG5vZGUsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4KTtcbiAgICAgIHZhciBwYXJlbnQgPSBhbmNob3IucGFyZW50Tm9kZTtcblxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBhbmNob3IpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5wcm9qZWN0aW9ucysrO1xuICAgIH1cbiAgfTtcblxuICBTaGFkb3dTbG90LnByb3RvdHlwZS5yZW1vdmVWaWV3ID0gZnVuY3Rpb24gcmVtb3ZlVmlldyh2aWV3LCBwcm9qZWN0aW9uU291cmNlKSB7XG4gICAgaWYgKHRoaXMuZGVzdGluYXRpb25TbG90cyAhPT0gbnVsbCkge1xuICAgICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZVZpZXcodmlldywgdGhpcy5kZXN0aW5hdGlvblNsb3RzLCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29udGVudFZpZXcgJiYgdGhpcy5jb250ZW50Vmlldy5oYXNTbG90cykge1xuICAgICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZVZpZXcodmlldywgdGhpcy5jb250ZW50Vmlldy5zbG90cywgcHJvamVjdGlvblNvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmb3VuZCA9IHRoaXMuY2hpbGRyZW4uZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geC5hdVNsb3RQcm9qZWN0RnJvbSA9PT0gcHJvamVjdGlvblNvdXJjZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHZhciBfY2hpbGRyZW4gPSBmb3VuZC5hdVByb2plY3Rpb25DaGlsZHJlbjtcbiAgICAgICAgdmFyIG93bkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBfY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIHZhciBfY2hpbGQgPSBfY2hpbGRyZW5baV07XG5cbiAgICAgICAgICBpZiAoX2NoaWxkLmF1T3duZXJWaWV3ID09PSB2aWV3KSB7XG4gICAgICAgICAgICBfY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgdmlldy5mcmFnbWVudC5hcHBlbmRDaGlsZChfY2hpbGQpO1xuICAgICAgICAgICAgaS0tO2lpLS07XG5cbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbnMtLTtcbiAgICAgICAgICAgIHZhciBpZHggPSBvd25DaGlsZHJlbi5pbmRleE9mKF9jaGlsZCk7XG4gICAgICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICAgICAgb3duQ2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmVlZHNGYWxsYmFja1JlbmRlcmluZykge1xuICAgICAgICAgIHRoaXMucmVuZGVyRmFsbGJhY2tDb250ZW50KHZpZXcsIG5vTm9kZXMsIHByb2plY3Rpb25Tb3VyY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIFNoYWRvd1Nsb3QucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uIHJlbW92ZUFsbChwcm9qZWN0aW9uU291cmNlKSB7XG4gICAgaWYgKHRoaXMuZGVzdGluYXRpb25TbG90cyAhPT0gbnVsbCkge1xuICAgICAgU2hhZG93RE9NLnVuZGlzdHJpYnV0ZUFsbCh0aGlzLmRlc3RpbmF0aW9uU2xvdHMsIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb250ZW50VmlldyAmJiB0aGlzLmNvbnRlbnRWaWV3Lmhhc1Nsb3RzKSB7XG4gICAgICBTaGFkb3dET00udW5kaXN0cmlidXRlQWxsKHRoaXMuY29udGVudFZpZXcuc2xvdHMsIHByb2plY3Rpb25Tb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZm91bmQgPSB0aGlzLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHguYXVTbG90UHJvamVjdEZyb20gPT09IHByb2plY3Rpb25Tb3VyY2U7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHZhciBfY2hpbGRyZW4yID0gZm91bmQuYXVQcm9qZWN0aW9uQ2hpbGRyZW47XG4gICAgICAgIHZhciBvd25DaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gX2NoaWxkcmVuMi5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgdmFyIF9jaGlsZDIgPSBfY2hpbGRyZW4yW2ldO1xuICAgICAgICAgIF9jaGlsZDIuYXVPd25lclZpZXcuZnJhZ21lbnQuYXBwZW5kQ2hpbGQoX2NoaWxkMik7XG5cbiAgICAgICAgICB0aGlzLnByb2plY3Rpb25zLS07XG4gICAgICAgICAgdmFyIGlkeCA9IG93bkNoaWxkcmVuLmluZGV4T2YoX2NoaWxkMik7XG4gICAgICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgICAgICBvd25DaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3VuZC5hdVByb2plY3Rpb25DaGlsZHJlbiA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLm5lZWRzRmFsbGJhY2tSZW5kZXJpbmcpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlckZhbGxiYWNrQ29udGVudChudWxsLCBub05vZGVzLCBwcm9qZWN0aW9uU291cmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBTaGFkb3dTbG90LnByb3RvdHlwZS5fZmluZEFuY2hvciA9IGZ1bmN0aW9uIF9maW5kQW5jaG9yKHZpZXcsIG5vZGUsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4KSB7XG4gICAgaWYgKHByb2plY3Rpb25Tb3VyY2UpIHtcbiAgICAgIHZhciBmb3VuZCA9IHRoaXMuY2hpbGRyZW4uZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geC5hdVNsb3RQcm9qZWN0RnJvbSA9PT0gcHJvamVjdGlvblNvdXJjZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIF9jaGlsZHJlbjMgPSBmb3VuZC5hdVByb2plY3Rpb25DaGlsZHJlbjtcbiAgICAgICAgICB2YXIgdmlld0luZGV4ID0gLTE7XG4gICAgICAgICAgdmFyIGxhc3RWaWV3ID0gdm9pZCAwO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gX2NoaWxkcmVuMy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IF9jaGlsZHJlbjNbaV07XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50LmF1T3duZXJWaWV3ICE9PSBsYXN0Vmlldykge1xuICAgICAgICAgICAgICB2aWV3SW5kZXgrKztcbiAgICAgICAgICAgICAgbGFzdFZpZXcgPSBjdXJyZW50LmF1T3duZXJWaWV3O1xuXG4gICAgICAgICAgICAgIGlmICh2aWV3SW5kZXggPj0gaW5kZXggJiYgbGFzdFZpZXcgIT09IHZpZXcpIHtcbiAgICAgICAgICAgICAgICBfY2hpbGRyZW4zLnNwbGljZShpLCAwLCBub2RlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvdW5kLmF1UHJvamVjdGlvbkNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hbmNob3I7XG4gIH07XG5cbiAgU2hhZG93U2xvdC5wcm90b3R5cGUucHJvamVjdFRvID0gZnVuY3Rpb24gcHJvamVjdFRvKHNsb3RzKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvblNsb3RzID0gc2xvdHM7XG4gIH07XG5cbiAgU2hhZG93U2xvdC5wcm90b3R5cGUucHJvamVjdEZyb20gPSBmdW5jdGlvbiBwcm9qZWN0RnJvbSh2aWV3LCBwcm9qZWN0aW9uU291cmNlKSB7XG4gICAgdmFyIGFuY2hvciA9IERPTS5jcmVhdGVDb21tZW50KCdhbmNob3InKTtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5hbmNob3IucGFyZW50Tm9kZTtcbiAgICBhbmNob3IuYXVTbG90UHJvamVjdEZyb20gPSBwcm9qZWN0aW9uU291cmNlO1xuICAgIGFuY2hvci5hdU93bmVyVmlldyA9IHZpZXc7XG4gICAgYW5jaG9yLmF1UHJvamVjdGlvbkNoaWxkcmVuID0gW107XG4gICAgcGFyZW50Lmluc2VydEJlZm9yZShhbmNob3IsIHRoaXMuYW5jaG9yKTtcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goYW5jaG9yKTtcblxuICAgIGlmICh0aGlzLnByb2plY3RGcm9tQW5jaG9ycyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9qZWN0RnJvbUFuY2hvcnMgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3RGcm9tQW5jaG9ycy5wdXNoKGFuY2hvcik7XG4gIH07XG5cbiAgU2hhZG93U2xvdC5wcm90b3R5cGUucmVuZGVyRmFsbGJhY2tDb250ZW50ID0gZnVuY3Rpb24gcmVuZGVyRmFsbGJhY2tDb250ZW50KHZpZXcsIG5vZGVzLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnRWaWV3ID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3ID0gdGhpcy5mYWxsYmFja0ZhY3RvcnkuY3JlYXRlKHRoaXMub3duZXJWaWV3LmNvbnRhaW5lcik7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3LmJpbmQodGhpcy5vd25lclZpZXcuYmluZGluZ0NvbnRleHQsIHRoaXMub3duZXJWaWV3Lm92ZXJyaWRlQ29udGV4dCk7XG4gICAgICB0aGlzLmNvbnRlbnRWaWV3Lmluc2VydE5vZGVzQmVmb3JlKHRoaXMuYW5jaG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50Vmlldy5oYXNTbG90cykge1xuICAgICAgdmFyIHNsb3RzID0gdGhpcy5jb250ZW50Vmlldy5zbG90cztcbiAgICAgIHZhciBwcm9qZWN0RnJvbUFuY2hvcnMgPSB0aGlzLnByb2plY3RGcm9tQW5jaG9ycztcblxuICAgICAgaWYgKHByb2plY3RGcm9tQW5jaG9ycyAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBzbG90TmFtZSBpbiBzbG90cykge1xuICAgICAgICAgIHZhciBzbG90ID0gc2xvdHNbc2xvdE5hbWVdO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcHJvamVjdEZyb21BbmNob3JzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBhbmNob3IgPSBwcm9qZWN0RnJvbUFuY2hvcnNbaV07XG4gICAgICAgICAgICBzbG90LnByb2plY3RGcm9tKGFuY2hvci5hdU93bmVyVmlldywgYW5jaG9yLmF1U2xvdFByb2plY3RGcm9tKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mYWxsYmFja1Nsb3RzID0gc2xvdHM7XG4gICAgICBTaGFkb3dET00uZGlzdHJpYnV0ZU5vZGVzKHZpZXcsIG5vZGVzLCBzbG90cywgcHJvamVjdGlvblNvdXJjZSwgaW5kZXgpO1xuICAgIH1cbiAgfTtcblxuICBTaGFkb3dTbG90LnByb3RvdHlwZS5jcmVhdGVkID0gZnVuY3Rpb24gY3JlYXRlZChvd25lclZpZXcpIHtcbiAgICB0aGlzLm93bmVyVmlldyA9IG93bmVyVmlldztcbiAgfTtcblxuICBTaGFkb3dTbG90LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh2aWV3KSB7XG4gICAgaWYgKHRoaXMuY29udGVudFZpZXcpIHtcbiAgICAgIHRoaXMuY29udGVudFZpZXcuYmluZCh2aWV3LmJpbmRpbmdDb250ZXh0LCB2aWV3Lm92ZXJyaWRlQ29udGV4dCk7XG4gICAgfVxuICB9O1xuXG4gIFNoYWRvd1Nsb3QucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gYXR0YWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuY29udGVudFZpZXcpIHtcbiAgICAgIHRoaXMuY29udGVudFZpZXcuYXR0YWNoZWQoKTtcbiAgICB9XG4gIH07XG5cbiAgU2hhZG93U2xvdC5wcm90b3R5cGUuZGV0YWNoZWQgPSBmdW5jdGlvbiBkZXRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50Vmlldykge1xuICAgICAgdGhpcy5jb250ZW50Vmlldy5kZXRhY2hlZCgpO1xuICAgIH1cbiAgfTtcblxuICBTaGFkb3dTbG90LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgaWYgKHRoaXMuY29udGVudFZpZXcpIHtcbiAgICAgIHRoaXMuY29udGVudFZpZXcudW5iaW5kKCk7XG4gICAgfVxuICB9O1xuXG4gIF9jcmVhdGVDbGFzcyhTaGFkb3dTbG90LCBbe1xuICAgIGtleTogJ25lZWRzRmFsbGJhY2tSZW5kZXJpbmcnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2tGYWN0b3J5ICYmIHRoaXMucHJvamVjdGlvbnMgPT09IDA7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNoYWRvd1Nsb3Q7XG59KCk7XG5cbmV4cG9ydCB2YXIgU2hhZG93RE9NID0gKF90ZW1wNCA9IF9jbGFzczEwID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTaGFkb3dET00oKSB7XG4gICAgXG4gIH1cblxuICBTaGFkb3dET00uZ2V0U2xvdE5hbWUgPSBmdW5jdGlvbiBnZXRTbG90TmFtZShub2RlKSB7XG4gICAgaWYgKG5vZGUuYXVTbG90QXR0cmlidXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBTaGFkb3dET00uZGVmYXVsdFNsb3RLZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGUuYXVTbG90QXR0cmlidXRlLnZhbHVlO1xuICB9O1xuXG4gIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyA9IGZ1bmN0aW9uIGRpc3RyaWJ1dGVWaWV3KHZpZXcsIHNsb3RzLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCwgZGVzdGluYXRpb25PdmVycmlkZSkge1xuICAgIHZhciBub2RlcyA9IHZvaWQgMDtcblxuICAgIGlmICh2aWV3ID09PSBudWxsKSB7XG4gICAgICBub2RlcyA9IG5vTm9kZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZE5vZGVzID0gdmlldy5mcmFnbWVudC5jaGlsZE5vZGVzO1xuICAgICAgdmFyIGlpID0gY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICBub2RlcyA9IG5ldyBBcnJheShpaSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBub2Rlc1tpXSA9IGNoaWxkTm9kZXNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgU2hhZG93RE9NLmRpc3RyaWJ1dGVOb2Rlcyh2aWV3LCBub2Rlcywgc2xvdHMsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4LCBkZXN0aW5hdGlvbk92ZXJyaWRlKTtcbiAgfTtcblxuICBTaGFkb3dET00udW5kaXN0cmlidXRlVmlldyA9IGZ1bmN0aW9uIHVuZGlzdHJpYnV0ZVZpZXcodmlldywgc2xvdHMsIHByb2plY3Rpb25Tb3VyY2UpIHtcbiAgICBmb3IgKHZhciBzbG90TmFtZSBpbiBzbG90cykge1xuICAgICAgc2xvdHNbc2xvdE5hbWVdLnJlbW92ZVZpZXcodmlldywgcHJvamVjdGlvblNvdXJjZSk7XG4gICAgfVxuICB9O1xuXG4gIFNoYWRvd0RPTS51bmRpc3RyaWJ1dGVBbGwgPSBmdW5jdGlvbiB1bmRpc3RyaWJ1dGVBbGwoc2xvdHMsIHByb2plY3Rpb25Tb3VyY2UpIHtcbiAgICBmb3IgKHZhciBzbG90TmFtZSBpbiBzbG90cykge1xuICAgICAgc2xvdHNbc2xvdE5hbWVdLnJlbW92ZUFsbChwcm9qZWN0aW9uU291cmNlKTtcbiAgICB9XG4gIH07XG5cbiAgU2hhZG93RE9NLmRpc3RyaWJ1dGVOb2RlcyA9IGZ1bmN0aW9uIGRpc3RyaWJ1dGVOb2Rlcyh2aWV3LCBub2Rlcywgc2xvdHMsIHByb2plY3Rpb25Tb3VyY2UsIGluZGV4LCBkZXN0aW5hdGlvbk92ZXJyaWRlKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbm9kZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgdmFyIGN1cnJlbnROb2RlID0gbm9kZXNbaV07XG4gICAgICB2YXIgbm9kZVR5cGUgPSBjdXJyZW50Tm9kZS5ub2RlVHlwZTtcblxuICAgICAgaWYgKGN1cnJlbnROb2RlLmlzQ29udGVudFByb2plY3Rpb25Tb3VyY2UpIHtcbiAgICAgICAgY3VycmVudE5vZGUudmlld1Nsb3QucHJvamVjdFRvKHNsb3RzKTtcblxuICAgICAgICBmb3IgKHZhciBzbG90TmFtZSBpbiBzbG90cykge1xuICAgICAgICAgIHNsb3RzW3Nsb3ROYW1lXS5wcm9qZWN0RnJvbSh2aWV3LCBjdXJyZW50Tm9kZS52aWV3U2xvdCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGlpLS07aS0tO1xuICAgICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gMyB8fCBjdXJyZW50Tm9kZS52aWV3U2xvdCBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoU2xvdCkge1xuICAgICAgICBpZiAobm9kZVR5cGUgPT09IDMgJiYgX2lzQWxsV2hpdGVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgaWktLTtpLS07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGZvdW5kID0gc2xvdHNbZGVzdGluYXRpb25PdmVycmlkZSB8fCBTaGFkb3dET00uZ2V0U2xvdE5hbWUoY3VycmVudE5vZGUpXTtcblxuICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgZm91bmQuYWRkTm9kZSh2aWV3LCBjdXJyZW50Tm9kZSwgcHJvamVjdGlvblNvdXJjZSwgaW5kZXgpO1xuICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgaWktLTtpLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGlpLS07aS0tO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9zbG90TmFtZSBpbiBzbG90cykge1xuICAgICAgdmFyIHNsb3QgPSBzbG90c1tfc2xvdE5hbWVdO1xuXG4gICAgICBpZiAoc2xvdC5uZWVkc0ZhbGxiYWNrUmVuZGVyaW5nKSB7XG4gICAgICAgIHNsb3QucmVuZGVyRmFsbGJhY2tDb250ZW50KHZpZXcsIG5vZGVzLCBwcm9qZWN0aW9uU291cmNlLCBpbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTaGFkb3dET007XG59KCksIF9jbGFzczEwLmRlZmF1bHRTbG90S2V5ID0gJ19fYXUtZGVmYXVsdC1zbG90LWtleV9fJywgX3RlbXA0KTtcblxuZnVuY3Rpb24gcmVnaXN0ZXIobG9va3VwLCBuYW1lLCByZXNvdXJjZSwgdHlwZSkge1xuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXhpc3RpbmcgPSBsb29rdXBbbmFtZV07XG4gIGlmIChleGlzdGluZykge1xuICAgIGlmIChleGlzdGluZyAhPT0gcmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHJlZ2lzdGVyICcgKyB0eXBlICsgJyB3aGVuIG9uZSB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMuIE5hbWU6ICcgKyBuYW1lICsgJy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBsb29rdXBbbmFtZV0gPSByZXNvdXJjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQmVoYXZpb3JOYW1lKG5hbWUsIHR5cGUpIHtcbiAgaWYgKC9bQS1aXS8udGVzdChuYW1lKSkge1xuICAgIHZhciBuZXdOYW1lID0gX2h5cGhlbmF0ZShuYW1lKTtcbiAgICBMb2dNYW5hZ2VyLmdldExvZ2dlcigndGVtcGxhdGluZycpLndhcm4oJ1xcJycgKyBuYW1lICsgJ1xcJyBpcyBub3QgYSB2YWxpZCAnICsgdHlwZSArICcgbmFtZSBhbmQgaGFzIGJlZW4gY29udmVydGVkIHRvIFxcJycgKyBuZXdOYW1lICsgJ1xcJy4gVXBwZXItY2FzZSBsZXR0ZXJzIGFyZSBub3QgYWxsb3dlZCBiZWNhdXNlIHRoZSBET00gaXMgbm90IGNhc2Utc2Vuc2l0aXZlLicpO1xuICAgIHJldHVybiBuZXdOYW1lO1xuICB9XG4gIHJldHVybiBuYW1lO1xufVxuXG52YXIgY29udmVudGlvbk1hcmsgPSAnX19hdV9yZXNvdXJjZV9fJztcblxuZXhwb3J0IHZhciBWaWV3UmVzb3VyY2VzID0gZnVuY3Rpb24gKCkge1xuICBWaWV3UmVzb3VyY2VzLmNvbnZlbnRpb24gPSBmdW5jdGlvbiBjb252ZW50aW9uKHRhcmdldCwgZXhpc3RpbmcpIHtcbiAgICB2YXIgcmVzb3VyY2UgPSB2b2lkIDA7XG5cbiAgICBpZiAoZXhpc3RpbmcgJiYgY29udmVudGlvbk1hcmsgaW4gZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgaWYgKCckcmVzb3VyY2UnIGluIHRhcmdldCkge1xuICAgICAgdmFyIGNvbmZpZyA9IHRhcmdldC4kcmVzb3VyY2U7XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXNvdXJjZSA9IGV4aXN0aW5nIHx8IG5ldyBIdG1sQmVoYXZpb3JSZXNvdXJjZSgpO1xuICAgICAgICByZXNvdXJjZVtjb252ZW50aW9uTWFya10gPSB0cnVlO1xuICAgICAgICBpZiAoIXJlc291cmNlLmVsZW1lbnROYW1lKSB7XG4gICAgICAgICAgcmVzb3VyY2UuZWxlbWVudE5hbWUgPSB2YWxpZGF0ZUJlaGF2aW9yTmFtZShjb25maWcsICdjdXN0b20gZWxlbWVudCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbmZpZyA9IGNvbmZpZy5jYWxsKHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uZmlnID0geyBuYW1lOiBjb25maWcgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyk7XG5cbiAgICAgICAgdmFyIHJlc291cmNlVHlwZSA9IGNvbmZpZy50eXBlIHx8ICdlbGVtZW50JztcblxuICAgICAgICB2YXIgX25hbWUgPSBjb25maWcubmFtZTtcbiAgICAgICAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgICBjYXNlICdlbGVtZW50JzpjYXNlICdhdHRyaWJ1dGUnOlxuICAgICAgICAgICAgcmVzb3VyY2UgPSBleGlzdGluZyB8fCBuZXcgSHRtbEJlaGF2aW9yUmVzb3VyY2UoKTtcbiAgICAgICAgICAgIHJlc291cmNlW2NvbnZlbnRpb25NYXJrXSA9IHRydWU7XG4gICAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlID09PSAnZWxlbWVudCcpIHtcbiAgICAgICAgICAgICAgaWYgKCFyZXNvdXJjZS5lbGVtZW50TmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmVsZW1lbnROYW1lID0gX25hbWUgPyB2YWxpZGF0ZUJlaGF2aW9yTmFtZShfbmFtZSwgJ2N1c3RvbSBlbGVtZW50JykgOiBfaHlwaGVuYXRlKHRhcmdldC5uYW1lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCFyZXNvdXJjZS5hdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYXR0cmlidXRlTmFtZSA9IF9uYW1lID8gdmFsaWRhdGVCZWhhdmlvck5hbWUoX25hbWUsICdjdXN0b20gYXR0cmlidXRlJykgOiBfaHlwaGVuYXRlKHRhcmdldC5uYW1lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCd0ZW1wbGF0ZUNvbnRyb2xsZXInIGluIGNvbmZpZykge1xuICAgICAgICAgICAgICBjb25maWcubGlmdHNDb250ZW50ID0gY29uZmlnLnRlbXBsYXRlQ29udHJvbGxlcjtcbiAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy50ZW1wbGF0ZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ2RlZmF1bHRCaW5kaW5nTW9kZScgaW4gY29uZmlnICYmIHJlc291cmNlLmF0dHJpYnV0ZURlZmF1bHRCaW5kaW5nTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNvbmZpZy5hdHRyaWJ1dGVEZWZhdWx0QmluZGluZ01vZGUgPSBjb25maWcuZGVmYXVsdEJpbmRpbmdNb2RlO1xuICAgICAgICAgICAgICBkZWxldGUgY29uZmlnLmRlZmF1bHRCaW5kaW5nTW9kZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5uYW1lO1xuXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc291cmNlLCBjb25maWcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndmFsdWVDb252ZXJ0ZXInOlxuICAgICAgICAgICAgcmVzb3VyY2UgPSBuZXcgVmFsdWVDb252ZXJ0ZXJSZXNvdXJjZShjYW1lbENhc2UoX25hbWUgfHwgdGFyZ2V0Lm5hbWUpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JpbmRpbmdCZWhhdmlvcic6XG4gICAgICAgICAgICByZXNvdXJjZSA9IG5ldyBCaW5kaW5nQmVoYXZpb3JSZXNvdXJjZShjYW1lbENhc2UoX25hbWUgfHwgdGFyZ2V0Lm5hbWUpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3ZpZXdFbmdpbmVIb29rcyc6XG4gICAgICAgICAgICByZXNvdXJjZSA9IG5ldyBWaWV3RW5naW5lSG9va3NSZXNvdXJjZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSHRtbEJlaGF2aW9yUmVzb3VyY2UpIHtcbiAgICAgICAgdmFyIF9iaW5kYWJsZXMgPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IHVuZGVmaW5lZCA6IGNvbmZpZy5iaW5kYWJsZXM7XG4gICAgICAgIHZhciBjdXJyZW50UHJvcHMgPSByZXNvdXJjZS5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfYmluZGFibGVzKSkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IF9iaW5kYWJsZXMubGVuZ3RoOyBpaSA+IGk7ICsraSkge1xuICAgICAgICAgICAgdmFyIHByb3AgPSBfYmluZGFibGVzW2ldO1xuICAgICAgICAgICAgaWYgKCFwcm9wIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJyAmJiAhcHJvcC5uYW1lKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiaW5kYWJsZSBwcm9wZXJ0eSBhdCBcIicgKyBpICsgJ1wiIGZvciBjbGFzcyBcIicgKyB0YXJnZXQubmFtZSArICdcIi4gRXhwZWN0ZWQgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIFwibmFtZVwiIHByb3BlcnR5LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld1Byb3AgPSBuZXcgQmluZGFibGVQcm9wZXJ0eShwcm9wKTtcblxuICAgICAgICAgICAgdmFyIGV4aXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGN1cnJlbnRQcm9wcy5sZW5ndGg7IGpqID4gajsgKytqKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50UHJvcHNbal0ubmFtZSA9PT0gbmV3UHJvcC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleGlzdGVkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3UHJvcC5yZWdpc3RlcldpdGgodGFyZ2V0LCByZXNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfTtcblxuICBmdW5jdGlvbiBWaWV3UmVzb3VyY2VzKHBhcmVudCwgdmlld1VybCkge1xuICAgIFxuXG4gICAgdGhpcy5iaW5kaW5nTGFuZ3VhZ2UgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQgfHwgbnVsbDtcbiAgICB0aGlzLmhhc1BhcmVudCA9IHRoaXMucGFyZW50ICE9PSBudWxsO1xuICAgIHRoaXMudmlld1VybCA9IHZpZXdVcmwgfHwgJyc7XG4gICAgdGhpcy5sb29rdXBGdW5jdGlvbnMgPSB7XG4gICAgICB2YWx1ZUNvbnZlcnRlcnM6IHRoaXMuZ2V0VmFsdWVDb252ZXJ0ZXIuYmluZCh0aGlzKSxcbiAgICAgIGJpbmRpbmdCZWhhdmlvcnM6IHRoaXMuZ2V0QmluZGluZ0JlaGF2aW9yLmJpbmQodGhpcylcbiAgICB9O1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5lbGVtZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy52YWx1ZUNvbnZlcnRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuYmluZGluZ0JlaGF2aW9ycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5hdHRyaWJ1dGVNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMudmFsdWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmJlZm9yZUNvbXBpbGUgPSB0aGlzLmFmdGVyQ29tcGlsZSA9IHRoaXMuYmVmb3JlQ3JlYXRlID0gdGhpcy5hZnRlckNyZWF0ZSA9IHRoaXMuYmVmb3JlQmluZCA9IHRoaXMuYmVmb3JlVW5iaW5kID0gZmFsc2U7XG4gIH1cblxuICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5fdHJ5QWRkSG9vayA9IGZ1bmN0aW9uIF90cnlBZGRIb29rKG9iaiwgbmFtZSkge1xuICAgIGlmICh0eXBlb2Ygb2JqW25hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZnVuYyA9IG9ialtuYW1lXS5iaW5kKG9iaik7XG4gICAgICB2YXIgY291bnRlciA9IDE7XG4gICAgICB2YXIgY2FsbGJhY2tOYW1lID0gdm9pZCAwO1xuXG4gICAgICB3aGlsZSAodGhpc1tjYWxsYmFja05hbWUgPSBuYW1lICsgY291bnRlci50b1N0cmluZygpXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvdW50ZXIrKztcbiAgICAgIH1cblxuICAgICAgdGhpc1tuYW1lXSA9IHRydWU7XG4gICAgICB0aGlzW2NhbGxiYWNrTmFtZV0gPSBmdW5jO1xuICAgIH1cbiAgfTtcblxuICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5faW52b2tlSG9vayA9IGZ1bmN0aW9uIF9pbnZva2VIb29rKG5hbWUsIG9uZSwgdHdvLCB0aHJlZSwgZm91cikge1xuICAgIGlmICh0aGlzLmhhc1BhcmVudCkge1xuICAgICAgdGhpcy5wYXJlbnQuX2ludm9rZUhvb2sobmFtZSwgb25lLCB0d28sIHRocmVlLCBmb3VyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1tuYW1lXSkge1xuICAgICAgdGhpc1tuYW1lICsgJzEnXShvbmUsIHR3bywgdGhyZWUsIGZvdXIpO1xuXG4gICAgICB2YXIgY2FsbGJhY2tOYW1lID0gbmFtZSArICcyJztcbiAgICAgIGlmICh0aGlzW2NhbGxiYWNrTmFtZV0pIHtcbiAgICAgICAgdGhpc1tjYWxsYmFja05hbWVdKG9uZSwgdHdvLCB0aHJlZSwgZm91cik7XG5cbiAgICAgICAgY2FsbGJhY2tOYW1lID0gbmFtZSArICczJztcbiAgICAgICAgaWYgKHRoaXNbY2FsbGJhY2tOYW1lXSkge1xuICAgICAgICAgIHRoaXNbY2FsbGJhY2tOYW1lXShvbmUsIHR3bywgdGhyZWUsIGZvdXIpO1xuXG4gICAgICAgICAgdmFyIGNvdW50ZXIgPSA0O1xuXG4gICAgICAgICAgd2hpbGUgKHRoaXNbY2FsbGJhY2tOYW1lID0gbmFtZSArIGNvdW50ZXIudG9TdHJpbmcoKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpc1tjYWxsYmFja05hbWVdKG9uZSwgdHdvLCB0aHJlZSwgZm91cik7XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLnJlZ2lzdGVyVmlld0VuZ2luZUhvb2tzID0gZnVuY3Rpb24gcmVnaXN0ZXJWaWV3RW5naW5lSG9va3MoaG9va3MpIHtcbiAgICB0aGlzLl90cnlBZGRIb29rKGhvb2tzLCAnYmVmb3JlQ29tcGlsZScpO1xuICAgIHRoaXMuX3RyeUFkZEhvb2soaG9va3MsICdhZnRlckNvbXBpbGUnKTtcbiAgICB0aGlzLl90cnlBZGRIb29rKGhvb2tzLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgdGhpcy5fdHJ5QWRkSG9vayhob29rcywgJ2FmdGVyQ3JlYXRlJyk7XG4gICAgdGhpcy5fdHJ5QWRkSG9vayhob29rcywgJ2JlZm9yZUJpbmQnKTtcbiAgICB0aGlzLl90cnlBZGRIb29rKGhvb2tzLCAnYmVmb3JlVW5iaW5kJyk7XG4gIH07XG5cbiAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUuZ2V0QmluZGluZ0xhbmd1YWdlID0gZnVuY3Rpb24gZ2V0QmluZGluZ0xhbmd1YWdlKGJpbmRpbmdMYW5ndWFnZUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuYmluZGluZ0xhbmd1YWdlIHx8ICh0aGlzLmJpbmRpbmdMYW5ndWFnZSA9IGJpbmRpbmdMYW5ndWFnZUZhbGxiYWNrKTtcbiAgfTtcblxuICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5wYXRjaEluUGFyZW50ID0gZnVuY3Rpb24gcGF0Y2hJblBhcmVudChuZXdQYXJlbnQpIHtcbiAgICB2YXIgb3JpZ2luYWxQYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuICAgIHRoaXMucGFyZW50ID0gbmV3UGFyZW50IHx8IG51bGw7XG4gICAgdGhpcy5oYXNQYXJlbnQgPSB0aGlzLnBhcmVudCAhPT0gbnVsbDtcblxuICAgIGlmIChuZXdQYXJlbnQucGFyZW50ID09PSBudWxsKSB7XG4gICAgICBuZXdQYXJlbnQucGFyZW50ID0gb3JpZ2luYWxQYXJlbnQ7XG4gICAgICBuZXdQYXJlbnQuaGFzUGFyZW50ID0gb3JpZ2luYWxQYXJlbnQgIT09IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLnJlbGF0aXZlVG9WaWV3ID0gZnVuY3Rpb24gcmVsYXRpdmVUb1ZpZXcocGF0aCkge1xuICAgIHJldHVybiByZWxhdGl2ZVRvRmlsZShwYXRoLCB0aGlzLnZpZXdVcmwpO1xuICB9O1xuXG4gIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLnJlZ2lzdGVyRWxlbWVudCA9IGZ1bmN0aW9uIHJlZ2lzdGVyRWxlbWVudCh0YWdOYW1lLCBiZWhhdmlvcikge1xuICAgIHJlZ2lzdGVyKHRoaXMuZWxlbWVudHMsIHRhZ05hbWUsIGJlaGF2aW9yLCAnYW4gRWxlbWVudCcpO1xuICB9O1xuXG4gIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLmdldEVsZW1lbnQgPSBmdW5jdGlvbiBnZXRFbGVtZW50KHRhZ05hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50c1t0YWdOYW1lXSB8fCAodGhpcy5oYXNQYXJlbnQgPyB0aGlzLnBhcmVudC5nZXRFbGVtZW50KHRhZ05hbWUpIDogbnVsbCk7XG4gIH07XG5cbiAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUubWFwQXR0cmlidXRlID0gZnVuY3Rpb24gbWFwQXR0cmlidXRlKGF0dHJpYnV0ZSkge1xuICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZU1hcFthdHRyaWJ1dGVdIHx8ICh0aGlzLmhhc1BhcmVudCA/IHRoaXMucGFyZW50Lm1hcEF0dHJpYnV0ZShhdHRyaWJ1dGUpIDogbnVsbCk7XG4gIH07XG5cbiAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUucmVnaXN0ZXJBdHRyaWJ1dGUgPSBmdW5jdGlvbiByZWdpc3RlckF0dHJpYnV0ZShhdHRyaWJ1dGUsIGJlaGF2aW9yLCBrbm93bkF0dHJpYnV0ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlTWFwW2F0dHJpYnV0ZV0gPSBrbm93bkF0dHJpYnV0ZTtcbiAgICByZWdpc3Rlcih0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSwgYmVoYXZpb3IsICdhbiBBdHRyaWJ1dGUnKTtcbiAgfTtcblxuICBWaWV3UmVzb3VyY2VzLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1thdHRyaWJ1dGVdIHx8ICh0aGlzLmhhc1BhcmVudCA/IHRoaXMucGFyZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpIDogbnVsbCk7XG4gIH07XG5cbiAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUucmVnaXN0ZXJWYWx1ZUNvbnZlcnRlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyVmFsdWVDb252ZXJ0ZXIobmFtZSwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgICByZWdpc3Rlcih0aGlzLnZhbHVlQ29udmVydGVycywgbmFtZSwgdmFsdWVDb252ZXJ0ZXIsICdhIFZhbHVlQ29udmVydGVyJyk7XG4gIH07XG5cbiAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUuZ2V0VmFsdWVDb252ZXJ0ZXIgPSBmdW5jdGlvbiBnZXRWYWx1ZUNvbnZlcnRlcihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVDb252ZXJ0ZXJzW25hbWVdIHx8ICh0aGlzLmhhc1BhcmVudCA/IHRoaXMucGFyZW50LmdldFZhbHVlQ29udmVydGVyKG5hbWUpIDogbnVsbCk7XG4gIH07XG5cbiAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUucmVnaXN0ZXJCaW5kaW5nQmVoYXZpb3IgPSBmdW5jdGlvbiByZWdpc3RlckJpbmRpbmdCZWhhdmlvcihuYW1lLCBiaW5kaW5nQmVoYXZpb3IpIHtcbiAgICByZWdpc3Rlcih0aGlzLmJpbmRpbmdCZWhhdmlvcnMsIG5hbWUsIGJpbmRpbmdCZWhhdmlvciwgJ2EgQmluZGluZ0JlaGF2aW9yJyk7XG4gIH07XG5cbiAgVmlld1Jlc291cmNlcy5wcm90b3R5cGUuZ2V0QmluZGluZ0JlaGF2aW9yID0gZnVuY3Rpb24gZ2V0QmluZGluZ0JlaGF2aW9yKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5iaW5kaW5nQmVoYXZpb3JzW25hbWVdIHx8ICh0aGlzLmhhc1BhcmVudCA/IHRoaXMucGFyZW50LmdldEJpbmRpbmdCZWhhdmlvcihuYW1lKSA6IG51bGwpO1xuICB9O1xuXG4gIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLnJlZ2lzdGVyVmFsdWUgPSBmdW5jdGlvbiByZWdpc3RlclZhbHVlKG5hbWUsIHZhbHVlKSB7XG4gICAgcmVnaXN0ZXIodGhpcy52YWx1ZXMsIG5hbWUsIHZhbHVlLCAnYSB2YWx1ZScpO1xuICB9O1xuXG4gIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUobmFtZSkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1tuYW1lXSB8fCAodGhpcy5oYXNQYXJlbnQgPyB0aGlzLnBhcmVudC5nZXRWYWx1ZShuYW1lKSA6IG51bGwpO1xuICB9O1xuXG4gIFZpZXdSZXNvdXJjZXMucHJvdG90eXBlLmF1dG9SZWdpc3RlciA9IGZ1bmN0aW9uIGF1dG9SZWdpc3Rlcihjb250YWluZXIsIGltcGwpIHtcbiAgICB2YXIgcmVzb3VyY2VUeXBlTWV0YSA9IG1ldGFkYXRhLmdldE93bihtZXRhZGF0YS5yZXNvdXJjZSwgaW1wbCk7XG4gICAgaWYgKHJlc291cmNlVHlwZU1ldGEpIHtcbiAgICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhIGluc3RhbmNlb2YgSHRtbEJlaGF2aW9yUmVzb3VyY2UpIHtcbiAgICAgICAgVmlld1Jlc291cmNlcy5jb252ZW50aW9uKGltcGwsIHJlc291cmNlVHlwZU1ldGEpO1xuXG4gICAgICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhLmF0dHJpYnV0ZU5hbWUgPT09IG51bGwgJiYgcmVzb3VyY2VUeXBlTWV0YS5lbGVtZW50TmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIEh0bWxCZWhhdmlvclJlc291cmNlLmNvbnZlbnRpb24oaW1wbC5uYW1lLCByZXNvdXJjZVR5cGVNZXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzb3VyY2VUeXBlTWV0YS5hdHRyaWJ1dGVOYW1lID09PSBudWxsICYmIHJlc291cmNlVHlwZU1ldGEuZWxlbWVudE5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXNvdXJjZVR5cGVNZXRhLmVsZW1lbnROYW1lID0gX2h5cGhlbmF0ZShpbXBsLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc291cmNlVHlwZU1ldGEgPSBWaWV3UmVzb3VyY2VzLmNvbnZlbnRpb24oaW1wbCkgfHwgSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihpbXBsLm5hbWUpIHx8IFZhbHVlQ29udmVydGVyUmVzb3VyY2UuY29udmVudGlvbihpbXBsLm5hbWUpIHx8IEJpbmRpbmdCZWhhdmlvclJlc291cmNlLmNvbnZlbnRpb24oaW1wbC5uYW1lKSB8fCBWaWV3RW5naW5lSG9va3NSZXNvdXJjZS5jb252ZW50aW9uKGltcGwubmFtZSk7XG4gICAgICBpZiAoIXJlc291cmNlVHlwZU1ldGEpIHtcbiAgICAgICAgcmVzb3VyY2VUeXBlTWV0YSA9IG5ldyBIdG1sQmVoYXZpb3JSZXNvdXJjZSgpO1xuICAgICAgICByZXNvdXJjZVR5cGVNZXRhLmVsZW1lbnROYW1lID0gX2h5cGhlbmF0ZShpbXBsLm5hbWUpO1xuICAgICAgfVxuICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCByZXNvdXJjZVR5cGVNZXRhLCBpbXBsKTtcbiAgICB9XG4gICAgcmVzb3VyY2VUeXBlTWV0YS5pbml0aWFsaXplKGNvbnRhaW5lciwgaW1wbCk7XG4gICAgcmVzb3VyY2VUeXBlTWV0YS5yZWdpc3Rlcih0aGlzKTtcbiAgICByZXR1cm4gcmVzb3VyY2VUeXBlTWV0YTtcbiAgfTtcblxuICByZXR1cm4gVmlld1Jlc291cmNlcztcbn0oKTtcblxuZXhwb3J0IHZhciBWaWV3ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBWaWV3KGNvbnRhaW5lciwgdmlld0ZhY3RvcnksIGZyYWdtZW50LCBjb250cm9sbGVycywgYmluZGluZ3MsIGNoaWxkcmVuLCBzbG90cykge1xuICAgIFxuXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy52aWV3RmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xuICAgIHRoaXMucmVzb3VyY2VzID0gdmlld0ZhY3RvcnkucmVzb3VyY2VzO1xuICAgIHRoaXMuZnJhZ21lbnQgPSBmcmFnbWVudDtcbiAgICB0aGlzLmZpcnN0Q2hpbGQgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgIHRoaXMubGFzdENoaWxkID0gZnJhZ21lbnQubGFzdENoaWxkO1xuICAgIHRoaXMuY29udHJvbGxlcnMgPSBjb250cm9sbGVycztcbiAgICB0aGlzLmJpbmRpbmdzID0gYmluZGluZ3M7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMuc2xvdHMgPSBzbG90cztcbiAgICB0aGlzLmhhc1Nsb3RzID0gZmFsc2U7XG4gICAgdGhpcy5mcm9tQ2FjaGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQm91bmQgPSBmYWxzZTtcbiAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJpbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jb250cm9sbGVyID0gbnVsbDtcbiAgICB0aGlzLnZpZXdNb2RlbFNjb3BlID0gbnVsbDtcbiAgICB0aGlzLmFuaW1hdGFibGVFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lzVXNlckNvbnRyb2xsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbnRlbnRWaWV3ID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9rZXkzIGluIHNsb3RzKSB7XG4gICAgICB0aGlzLmhhc1Nsb3RzID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIFZpZXcucHJvdG90eXBlLnJldHVyblRvQ2FjaGUgPSBmdW5jdGlvbiByZXR1cm5Ub0NhY2hlKCkge1xuICAgIHRoaXMudmlld0ZhY3RvcnkucmV0dXJuVmlld1RvQ2FjaGUodGhpcyk7XG4gIH07XG5cbiAgVmlldy5wcm90b3R5cGUuY3JlYXRlZCA9IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGlpID0gdm9pZCAwO1xuICAgIHZhciBjb250cm9sbGVycyA9IHRoaXMuY29udHJvbGxlcnM7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGNvbnRyb2xsZXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNvbnRyb2xsZXJzW2ldLmNyZWF0ZWQodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIFZpZXcucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQsIF9zeXN0ZW1VcGRhdGUpIHtcbiAgICB2YXIgY29udHJvbGxlcnMgPSB2b2lkIDA7XG4gICAgdmFyIGJpbmRpbmdzID0gdm9pZCAwO1xuICAgIHZhciBjaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgaWkgPSB2b2lkIDA7XG5cbiAgICBpZiAoX3N5c3RlbVVwZGF0ZSAmJiB0aGlzLl9pc1VzZXJDb250cm9sbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNCb3VuZCkge1xuICAgICAgaWYgKHRoaXMuYmluZGluZ0NvbnRleHQgPT09IGJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bmJpbmQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xuICAgIHRoaXMuYmluZGluZ0NvbnRleHQgPSBiaW5kaW5nQ29udGV4dDtcbiAgICB0aGlzLm92ZXJyaWRlQ29udGV4dCA9IG92ZXJyaWRlQ29udGV4dCB8fCBjcmVhdGVPdmVycmlkZUNvbnRleHQoYmluZGluZ0NvbnRleHQpO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMuX2ludm9rZUhvb2soJ2JlZm9yZUJpbmQnLCB0aGlzKTtcblxuICAgIGJpbmRpbmdzID0gdGhpcy5iaW5kaW5ncztcbiAgICBmb3IgKGkgPSAwLCBpaSA9IGJpbmRpbmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGJpbmRpbmdzW2ldLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlld01vZGVsU2NvcGUgIT09IG51bGwpIHtcbiAgICAgIGJpbmRpbmdDb250ZXh0LmJpbmQodGhpcy52aWV3TW9kZWxTY29wZS5iaW5kaW5nQ29udGV4dCwgdGhpcy52aWV3TW9kZWxTY29wZS5vdmVycmlkZUNvbnRleHQpO1xuICAgICAgdGhpcy52aWV3TW9kZWxTY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcnMgPSB0aGlzLmNvbnRyb2xsZXJzO1xuICAgIGZvciAoaSA9IDAsIGlpID0gY29udHJvbGxlcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY29udHJvbGxlcnNbaV0uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgZm9yIChpID0gMCwgaWkgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjaGlsZHJlbltpXS5iaW5kKGJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1Nsb3RzKSB7XG4gICAgICBTaGFkb3dET00uZGlzdHJpYnV0ZVZpZXcodGhpcy5jb250ZW50VmlldywgdGhpcy5zbG90cyk7XG4gICAgfVxuICB9O1xuXG4gIFZpZXcucHJvdG90eXBlLmFkZEJpbmRpbmcgPSBmdW5jdGlvbiBhZGRCaW5kaW5nKGJpbmRpbmcpIHtcbiAgICB0aGlzLmJpbmRpbmdzLnB1c2goYmluZGluZyk7XG5cbiAgICBpZiAodGhpcy5pc0JvdW5kKSB7XG4gICAgICBiaW5kaW5nLmJpbmQodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIFZpZXcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIHVuYmluZCgpIHtcbiAgICB2YXIgY29udHJvbGxlcnMgPSB2b2lkIDA7XG4gICAgdmFyIGJpbmRpbmdzID0gdm9pZCAwO1xuICAgIHZhciBjaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgaWkgPSB2b2lkIDA7XG5cbiAgICBpZiAodGhpcy5pc0JvdW5kKSB7XG4gICAgICB0aGlzLmlzQm91bmQgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb3VyY2VzLl9pbnZva2VIb29rKCdiZWZvcmVVbmJpbmQnLCB0aGlzKTtcblxuICAgICAgaWYgKHRoaXMuY29udHJvbGxlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIudW5iaW5kKCk7XG4gICAgICB9XG5cbiAgICAgIGJpbmRpbmdzID0gdGhpcy5iaW5kaW5ncztcbiAgICAgIGZvciAoaSA9IDAsIGlpID0gYmluZGluZ3MubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBiaW5kaW5nc1tpXS51bmJpbmQoKTtcbiAgICAgIH1cblxuICAgICAgY29udHJvbGxlcnMgPSB0aGlzLmNvbnRyb2xsZXJzO1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBjb250cm9sbGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGNvbnRyb2xsZXJzW2ldLnVuYmluZCgpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgY2hpbGRyZW5baV0udW5iaW5kKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYmluZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgdGhpcy5vdmVycmlkZUNvbnRleHQgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBWaWV3LnByb3RvdHlwZS5pbnNlcnROb2Rlc0JlZm9yZSA9IGZ1bmN0aW9uIGluc2VydE5vZGVzQmVmb3JlKHJlZk5vZGUpIHtcbiAgICByZWZOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZnJhZ21lbnQsIHJlZk5vZGUpO1xuICB9O1xuXG4gIFZpZXcucHJvdG90eXBlLmFwcGVuZE5vZGVzVG8gPSBmdW5jdGlvbiBhcHBlbmROb2Rlc1RvKHBhcmVudCkge1xuICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmZyYWdtZW50KTtcbiAgfTtcblxuICBWaWV3LnByb3RvdHlwZS5yZW1vdmVOb2RlcyA9IGZ1bmN0aW9uIHJlbW92ZU5vZGVzKCkge1xuICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQ7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLmZpcnN0Q2hpbGQ7XG4gICAgdmFyIGVuZCA9IHRoaXMubGFzdENoaWxkO1xuICAgIHZhciBuZXh0ID0gdm9pZCAwO1xuXG4gICAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAgIG5leHQgPSBjdXJyZW50Lm5leHRTaWJsaW5nO1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY3VycmVudCk7XG5cbiAgICAgIGlmIChjdXJyZW50ID09PSBlbmQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQgPSBuZXh0O1xuICAgIH1cbiAgfTtcblxuICBWaWV3LnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uIGF0dGFjaGVkKCkge1xuICAgIHZhciBjb250cm9sbGVycyA9IHZvaWQgMDtcbiAgICB2YXIgY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGlpID0gdm9pZCAwO1xuXG4gICAgaWYgKHRoaXMuaXNBdHRhY2hlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNBdHRhY2hlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5jb250cm9sbGVyICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuYXR0YWNoZWQoKTtcbiAgICB9XG5cbiAgICBjb250cm9sbGVycyA9IHRoaXMuY29udHJvbGxlcnM7XG4gICAgZm9yIChpID0gMCwgaWkgPSBjb250cm9sbGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjb250cm9sbGVyc1tpXS5hdHRhY2hlZCgpO1xuICAgIH1cblxuICAgIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICBmb3IgKGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNoaWxkcmVuW2ldLmF0dGFjaGVkKCk7XG4gICAgfVxuICB9O1xuXG4gIFZpZXcucHJvdG90eXBlLmRldGFjaGVkID0gZnVuY3Rpb24gZGV0YWNoZWQoKSB7XG4gICAgdmFyIGNvbnRyb2xsZXJzID0gdm9pZCAwO1xuICAgIHZhciBjaGlsZHJlbiA9IHZvaWQgMDtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgaWkgPSB2b2lkIDA7XG5cbiAgICBpZiAodGhpcy5pc0F0dGFjaGVkKSB7XG4gICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuY29udHJvbGxlciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuZGV0YWNoZWQoKTtcbiAgICAgIH1cblxuICAgICAgY29udHJvbGxlcnMgPSB0aGlzLmNvbnRyb2xsZXJzO1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBjb250cm9sbGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGNvbnRyb2xsZXJzW2ldLmRldGFjaGVkKCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgIGZvciAoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBjaGlsZHJlbltpXS5kZXRhY2hlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVmlldztcbn0oKTtcblxuZnVuY3Rpb24gZ2V0QW5pbWF0YWJsZUVsZW1lbnQodmlldykge1xuICBpZiAodmlldy5hbmltYXRhYmxlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZpZXcuYW5pbWF0YWJsZUVsZW1lbnQ7XG4gIH1cblxuICB2YXIgY3VycmVudCA9IHZpZXcuZmlyc3RDaGlsZDtcblxuICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFNpYmxpbmc7XG4gIH1cblxuICBpZiAoY3VycmVudCAmJiBjdXJyZW50Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgcmV0dXJuIHZpZXcuYW5pbWF0YWJsZUVsZW1lbnQgPSBjdXJyZW50LmNsYXNzTGlzdC5jb250YWlucygnYXUtYW5pbWF0ZScpID8gY3VycmVudCA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gdmlldy5hbmltYXRhYmxlRWxlbWVudCA9IG51bGw7XG59XG5cbmV4cG9ydCB2YXIgVmlld1Nsb3QgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFZpZXdTbG90KGFuY2hvciwgYW5jaG9ySXNDb250YWluZXIpIHtcbiAgICB2YXIgYW5pbWF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEFuaW1hdG9yLmluc3RhbmNlO1xuXG4gICAgXG5cbiAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcbiAgICB0aGlzLmFuY2hvcklzQ29udGFpbmVyID0gYW5jaG9ySXNDb250YWluZXI7XG4gICAgdGhpcy5iaW5kaW5nQ29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5vdmVycmlkZUNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuYW5pbWF0b3IgPSBhbmltYXRvcjtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XG4gICAgdGhpcy5pc0F0dGFjaGVkID0gZmFsc2U7XG4gICAgdGhpcy5jb250ZW50U2VsZWN0b3JzID0gbnVsbDtcbiAgICBhbmNob3Iudmlld1Nsb3QgPSB0aGlzO1xuICAgIGFuY2hvci5pc0NvbnRlbnRQcm9qZWN0aW9uU291cmNlID0gZmFsc2U7XG4gIH1cblxuICBWaWV3U2xvdC5wcm90b3R5cGUuYW5pbWF0ZVZpZXcgPSBmdW5jdGlvbiBhbmltYXRlVmlldyh2aWV3KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2VudGVyJztcblxuICAgIHZhciBhbmltYXRhYmxlRWxlbWVudCA9IGdldEFuaW1hdGFibGVFbGVtZW50KHZpZXcpO1xuXG4gICAgaWYgKGFuaW1hdGFibGVFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0b3IuZW50ZXIoYW5pbWF0YWJsZUVsZW1lbnQpO1xuICAgICAgICBjYXNlICdsZWF2ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0b3IubGVhdmUoYW5pbWF0YWJsZUVsZW1lbnQpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhbmltYXRpb24gZGlyZWN0aW9uOiAnICsgZGlyZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLnRyYW5zZm9ybUNoaWxkTm9kZXNJbnRvVmlldyA9IGZ1bmN0aW9uIHRyYW5zZm9ybUNoaWxkTm9kZXNJbnRvVmlldygpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5hbmNob3I7XG5cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goe1xuICAgICAgZnJhZ21lbnQ6IHBhcmVudCxcbiAgICAgIGZpcnN0Q2hpbGQ6IHBhcmVudC5maXJzdENoaWxkLFxuICAgICAgbGFzdENoaWxkOiBwYXJlbnQubGFzdENoaWxkLFxuICAgICAgcmV0dXJuVG9DYWNoZTogZnVuY3Rpb24gcmV0dXJuVG9DYWNoZSgpIHt9LFxuICAgICAgcmVtb3ZlTm9kZXM6IGZ1bmN0aW9uIHJlbW92ZU5vZGVzKCkge1xuICAgICAgICB2YXIgbGFzdCA9IHZvaWQgMDtcblxuICAgICAgICB3aGlsZSAobGFzdCA9IHBhcmVudC5sYXN0Q2hpbGQpIHtcbiAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQobGFzdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge30sXG4gICAgICBiaW5kOiBmdW5jdGlvbiBiaW5kKCkge30sXG4gICAgICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZCgpIHt9LFxuICAgICAgYXR0YWNoZWQ6IGZ1bmN0aW9uIGF0dGFjaGVkKCkge30sXG4gICAgICBkZXRhY2hlZDogZnVuY3Rpb24gZGV0YWNoZWQoKSB7fVxuICAgIH0pO1xuICB9O1xuXG4gIFZpZXdTbG90LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0KSB7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGlpID0gdm9pZCAwO1xuICAgIHZhciBjaGlsZHJlbiA9IHZvaWQgMDtcblxuICAgIGlmICh0aGlzLmlzQm91bmQpIHtcbiAgICAgIGlmICh0aGlzLmJpbmRpbmdDb250ZXh0ID09PSBiaW5kaW5nQ29udGV4dCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMudW5iaW5kKCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0JvdW5kID0gdHJ1ZTtcbiAgICB0aGlzLmJpbmRpbmdDb250ZXh0ID0gYmluZGluZ0NvbnRleHQgPSBiaW5kaW5nQ29udGV4dCB8fCB0aGlzLmJpbmRpbmdDb250ZXh0O1xuICAgIHRoaXMub3ZlcnJpZGVDb250ZXh0ID0gb3ZlcnJpZGVDb250ZXh0ID0gb3ZlcnJpZGVDb250ZXh0IHx8IHRoaXMub3ZlcnJpZGVDb250ZXh0O1xuXG4gICAgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgIGZvciAoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY2hpbGRyZW5baV0uYmluZChiaW5kaW5nQ29udGV4dCwgb3ZlcnJpZGVDb250ZXh0LCB0cnVlKTtcbiAgICB9XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIHVuYmluZCgpIHtcbiAgICBpZiAodGhpcy5pc0JvdW5kKSB7XG4gICAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICAgIHZhciBpaSA9IHZvaWQgMDtcbiAgICAgIHZhciBfY2hpbGRyZW40ID0gdGhpcy5jaGlsZHJlbjtcblxuICAgICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XG4gICAgICB0aGlzLmJpbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgIHRoaXMub3ZlcnJpZGVDb250ZXh0ID0gbnVsbDtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBfY2hpbGRyZW40Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgX2NoaWxkcmVuNFtpXS51bmJpbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCh2aWV3KSB7XG4gICAgaWYgKHRoaXMuYW5jaG9ySXNDb250YWluZXIpIHtcbiAgICAgIHZpZXcuYXBwZW5kTm9kZXNUbyh0aGlzLmFuY2hvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZpZXcuaW5zZXJ0Tm9kZXNCZWZvcmUodGhpcy5hbmNob3IpO1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCh2aWV3KTtcblxuICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcbiAgICAgIHZpZXcuYXR0YWNoZWQoKTtcbiAgICAgIHJldHVybiB0aGlzLmFuaW1hdGVWaWV3KHZpZXcsICdlbnRlcicpO1xuICAgIH1cbiAgfTtcblxuICBWaWV3U2xvdC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KGluZGV4LCB2aWV3KSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICB2YXIgbGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xuXG4gICAgaWYgKGluZGV4ID09PSAwICYmIGxlbmd0aCA9PT0gMCB8fCBpbmRleCA+PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZCh2aWV3KTtcbiAgICB9XG5cbiAgICB2aWV3Lmluc2VydE5vZGVzQmVmb3JlKGNoaWxkcmVuW2luZGV4XS5maXJzdENoaWxkKTtcbiAgICBjaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIHZpZXcpO1xuXG4gICAgaWYgKHRoaXMuaXNBdHRhY2hlZCkge1xuICAgICAgdmlldy5hdHRhY2hlZCgpO1xuICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZVZpZXcodmlldywgJ2VudGVyJyk7XG4gICAgfVxuICB9O1xuXG4gIFZpZXdTbG90LnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gbW92ZShzb3VyY2VJbmRleCwgdGFyZ2V0SW5kZXgpIHtcbiAgICBpZiAoc291cmNlSW5kZXggPT09IHRhcmdldEluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICB2YXIgdmlldyA9IGNoaWxkcmVuW3NvdXJjZUluZGV4XTtcblxuICAgIHZpZXcucmVtb3ZlTm9kZXMoKTtcbiAgICB2aWV3Lmluc2VydE5vZGVzQmVmb3JlKGNoaWxkcmVuW3RhcmdldEluZGV4XS5maXJzdENoaWxkKTtcbiAgICBjaGlsZHJlbi5zcGxpY2Uoc291cmNlSW5kZXgsIDEpO1xuICAgIGNoaWxkcmVuLnNwbGljZSh0YXJnZXRJbmRleCwgMCwgdmlldyk7XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSh2aWV3LCByZXR1cm5Ub0NhY2hlLCBza2lwQW5pbWF0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlQXQodGhpcy5jaGlsZHJlbi5pbmRleE9mKHZpZXcpLCByZXR1cm5Ub0NhY2hlLCBza2lwQW5pbWF0aW9uKTtcbiAgfTtcblxuICBWaWV3U2xvdC5wcm90b3R5cGUucmVtb3ZlTWFueSA9IGZ1bmN0aW9uIHJlbW92ZU1hbnkodmlld3NUb1JlbW92ZSwgcmV0dXJuVG9DYWNoZSwgc2tpcEFuaW1hdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICB2YXIgaWkgPSB2aWV3c1RvUmVtb3ZlLmxlbmd0aDtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgcm1Qcm9taXNlcyA9IFtdO1xuXG4gICAgdmlld3NUb1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKHNraXBBbmltYXRpb24pIHtcbiAgICAgICAgY2hpbGQucmVtb3ZlTm9kZXMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgYW5pbWF0aW9uID0gX3RoaXMzLmFuaW1hdGVWaWV3KGNoaWxkLCAnbGVhdmUnKTtcbiAgICAgIGlmIChhbmltYXRpb24pIHtcbiAgICAgICAgcm1Qcm9taXNlcy5wdXNoKGFuaW1hdGlvbi50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQucmVtb3ZlTm9kZXMoKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQucmVtb3ZlTm9kZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZW1vdmVBY3Rpb24gPSBmdW5jdGlvbiByZW1vdmVBY3Rpb24oKSB7XG4gICAgICBpZiAoX3RoaXMzLmlzQXR0YWNoZWQpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICB2aWV3c1RvUmVtb3ZlW2ldLmRldGFjaGVkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVyblRvQ2FjaGUpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICB2aWV3c1RvUmVtb3ZlW2ldLnJldHVyblRvQ2FjaGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaWk7ICsraSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjaGlsZHJlbi5pbmRleE9mKHZpZXdzVG9SZW1vdmVbaV0pO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHJtUHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJtUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlQWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVtb3ZlQWN0aW9uKCk7XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLnJlbW92ZUF0ID0gZnVuY3Rpb24gcmVtb3ZlQXQoaW5kZXgsIHJldHVyblRvQ2FjaGUsIHNraXBBbmltYXRpb24pIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciB2aWV3ID0gdGhpcy5jaGlsZHJlbltpbmRleF07XG5cbiAgICB2YXIgcmVtb3ZlQWN0aW9uID0gZnVuY3Rpb24gcmVtb3ZlQWN0aW9uKCkge1xuICAgICAgaW5kZXggPSBfdGhpczQuY2hpbGRyZW4uaW5kZXhPZih2aWV3KTtcbiAgICAgIHZpZXcucmVtb3ZlTm9kZXMoKTtcbiAgICAgIF90aGlzNC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICBpZiAoX3RoaXM0LmlzQXR0YWNoZWQpIHtcbiAgICAgICAgdmlldy5kZXRhY2hlZCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuVG9DYWNoZSkge1xuICAgICAgICB2aWV3LnJldHVyblRvQ2FjaGUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZpZXc7XG4gICAgfTtcblxuICAgIGlmICghc2tpcEFuaW1hdGlvbikge1xuICAgICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuYW5pbWF0ZVZpZXcodmlldywgJ2xlYXZlJyk7XG4gICAgICBpZiAoYW5pbWF0aW9uKSB7XG4gICAgICAgIHJldHVybiBhbmltYXRpb24udGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbW92ZUFjdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVtb3ZlQWN0aW9uKCk7XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uIHJlbW92ZUFsbChyZXR1cm5Ub0NhY2hlLCBza2lwQW5pbWF0aW9uKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgIHZhciBpaSA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgcm1Qcm9taXNlcyA9IFtdO1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIGlmIChza2lwQW5pbWF0aW9uKSB7XG4gICAgICAgIGNoaWxkLnJlbW92ZU5vZGVzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGFuaW1hdGlvbiA9IF90aGlzNS5hbmltYXRlVmlldyhjaGlsZCwgJ2xlYXZlJyk7XG4gICAgICBpZiAoYW5pbWF0aW9uKSB7XG4gICAgICAgIHJtUHJvbWlzZXMucHVzaChhbmltYXRpb24udGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkLnJlbW92ZU5vZGVzKCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkLnJlbW92ZU5vZGVzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVtb3ZlQWN0aW9uID0gZnVuY3Rpb24gcmVtb3ZlQWN0aW9uKCkge1xuICAgICAgaWYgKF90aGlzNS5pc0F0dGFjaGVkKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgY2hpbGRyZW5baV0uZGV0YWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuVG9DYWNoZSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIHZhciBfY2hpbGQzID0gY2hpbGRyZW5baV07XG5cbiAgICAgICAgICBpZiAoX2NoaWxkMykge1xuICAgICAgICAgICAgX2NoaWxkMy5yZXR1cm5Ub0NhY2hlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF90aGlzNS5jaGlsZHJlbiA9IFtdO1xuICAgIH07XG5cbiAgICBpZiAocm1Qcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocm1Qcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZW1vdmVBY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZW1vdmVBY3Rpb24oKTtcbiAgfTtcblxuICBWaWV3U2xvdC5wcm90b3R5cGUuYXR0YWNoZWQgPSBmdW5jdGlvbiBhdHRhY2hlZCgpIHtcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgaWkgPSB2b2lkIDA7XG4gICAgdmFyIGNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHZhciBjaGlsZCA9IHZvaWQgMDtcblxuICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlO1xuXG4gICAgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgIGZvciAoaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGNoaWxkLmF0dGFjaGVkKCk7XG4gICAgICB0aGlzLmFuaW1hdGVWaWV3KGNoaWxkLCAnZW50ZXInKTtcbiAgICB9XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLmRldGFjaGVkID0gZnVuY3Rpb24gZGV0YWNoZWQoKSB7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGlpID0gdm9pZCAwO1xuICAgIHZhciBjaGlsZHJlbiA9IHZvaWQgMDtcblxuICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcbiAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xuICAgICAgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGNoaWxkcmVuW2ldLmRldGFjaGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIFZpZXdTbG90LnByb3RvdHlwZS5wcm9qZWN0VG8gPSBmdW5jdGlvbiBwcm9qZWN0VG8oc2xvdHMpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIHRoaXMucHJvamVjdFRvU2xvdHMgPSBzbG90cztcbiAgICB0aGlzLmFkZCA9IHRoaXMuX3Byb2plY3Rpb25BZGQ7XG4gICAgdGhpcy5pbnNlcnQgPSB0aGlzLl9wcm9qZWN0aW9uSW5zZXJ0O1xuICAgIHRoaXMubW92ZSA9IHRoaXMuX3Byb2plY3Rpb25Nb3ZlO1xuICAgIHRoaXMucmVtb3ZlID0gdGhpcy5fcHJvamVjdGlvblJlbW92ZTtcbiAgICB0aGlzLnJlbW92ZUF0ID0gdGhpcy5fcHJvamVjdGlvblJlbW92ZUF0O1xuICAgIHRoaXMucmVtb3ZlTWFueSA9IHRoaXMuX3Byb2plY3Rpb25SZW1vdmVNYW55O1xuICAgIHRoaXMucmVtb3ZlQWxsID0gdGhpcy5fcHJvamVjdGlvblJlbW92ZUFsbDtcbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKHZpZXcpIHtcbiAgICAgIHJldHVybiBTaGFkb3dET00uZGlzdHJpYnV0ZVZpZXcodmlldywgc2xvdHMsIF90aGlzNik7XG4gICAgfSk7XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLl9wcm9qZWN0aW9uQWRkID0gZnVuY3Rpb24gX3Byb2plY3Rpb25BZGQodmlldykge1xuICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyh2aWV3LCB0aGlzLnByb2plY3RUb1Nsb3RzLCB0aGlzKTtcblxuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCh2aWV3KTtcblxuICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcbiAgICAgIHZpZXcuYXR0YWNoZWQoKTtcbiAgICB9XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLl9wcm9qZWN0aW9uSW5zZXJ0ID0gZnVuY3Rpb24gX3Byb2plY3Rpb25JbnNlcnQoaW5kZXgsIHZpZXcpIHtcbiAgICBpZiAoaW5kZXggPT09IDAgJiYgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFkZCh2aWV3KTtcbiAgICB9IGVsc2Uge1xuICAgICAgU2hhZG93RE9NLmRpc3RyaWJ1dGVWaWV3KHZpZXcsIHRoaXMucHJvamVjdFRvU2xvdHMsIHRoaXMsIGluZGV4KTtcblxuICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIHZpZXcpO1xuXG4gICAgICBpZiAodGhpcy5pc0F0dGFjaGVkKSB7XG4gICAgICAgIHZpZXcuYXR0YWNoZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLl9wcm9qZWN0aW9uTW92ZSA9IGZ1bmN0aW9uIF9wcm9qZWN0aW9uTW92ZShzb3VyY2VJbmRleCwgdGFyZ2V0SW5kZXgpIHtcbiAgICBpZiAoc291cmNlSW5kZXggPT09IHRhcmdldEluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICB2YXIgdmlldyA9IGNoaWxkcmVuW3NvdXJjZUluZGV4XTtcblxuICAgIFNoYWRvd0RPTS51bmRpc3RyaWJ1dGVWaWV3KHZpZXcsIHRoaXMucHJvamVjdFRvU2xvdHMsIHRoaXMpO1xuICAgIFNoYWRvd0RPTS5kaXN0cmlidXRlVmlldyh2aWV3LCB0aGlzLnByb2plY3RUb1Nsb3RzLCB0aGlzLCB0YXJnZXRJbmRleCk7XG5cbiAgICBjaGlsZHJlbi5zcGxpY2Uoc291cmNlSW5kZXgsIDEpO1xuICAgIGNoaWxkcmVuLnNwbGljZSh0YXJnZXRJbmRleCwgMCwgdmlldyk7XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLl9wcm9qZWN0aW9uUmVtb3ZlID0gZnVuY3Rpb24gX3Byb2plY3Rpb25SZW1vdmUodmlldywgcmV0dXJuVG9DYWNoZSkge1xuICAgIFNoYWRvd0RPTS51bmRpc3RyaWJ1dGVWaWV3KHZpZXcsIHRoaXMucHJvamVjdFRvU2xvdHMsIHRoaXMpO1xuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKHRoaXMuY2hpbGRyZW4uaW5kZXhPZih2aWV3KSwgMSk7XG5cbiAgICBpZiAodGhpcy5pc0F0dGFjaGVkKSB7XG4gICAgICB2aWV3LmRldGFjaGVkKCk7XG4gICAgfVxuICAgIGlmIChyZXR1cm5Ub0NhY2hlKSB7XG4gICAgICB2aWV3LnJldHVyblRvQ2FjaGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLl9wcm9qZWN0aW9uUmVtb3ZlQXQgPSBmdW5jdGlvbiBfcHJvamVjdGlvblJlbW92ZUF0KGluZGV4LCByZXR1cm5Ub0NhY2hlKSB7XG4gICAgdmFyIHZpZXcgPSB0aGlzLmNoaWxkcmVuW2luZGV4XTtcblxuICAgIFNoYWRvd0RPTS51bmRpc3RyaWJ1dGVWaWV3KHZpZXcsIHRoaXMucHJvamVjdFRvU2xvdHMsIHRoaXMpO1xuICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcbiAgICAgIHZpZXcuZGV0YWNoZWQoKTtcbiAgICB9XG4gICAgaWYgKHJldHVyblRvQ2FjaGUpIHtcbiAgICAgIHZpZXcucmV0dXJuVG9DYWNoZSgpO1xuICAgIH1cbiAgfTtcblxuICBWaWV3U2xvdC5wcm90b3R5cGUuX3Byb2plY3Rpb25SZW1vdmVNYW55ID0gZnVuY3Rpb24gX3Byb2plY3Rpb25SZW1vdmVNYW55KHZpZXdzVG9SZW1vdmUsIHJldHVyblRvQ2FjaGUpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgIHZpZXdzVG9SZW1vdmUuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuICAgICAgcmV0dXJuIF90aGlzNy5yZW1vdmUodmlldywgcmV0dXJuVG9DYWNoZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgVmlld1Nsb3QucHJvdG90eXBlLl9wcm9qZWN0aW9uUmVtb3ZlQWxsID0gZnVuY3Rpb24gX3Byb2plY3Rpb25SZW1vdmVBbGwocmV0dXJuVG9DYWNoZSkge1xuICAgIFNoYWRvd0RPTS51bmRpc3RyaWJ1dGVBbGwodGhpcy5wcm9qZWN0VG9TbG90cywgdGhpcyk7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgIHZhciBpaSA9IGNoaWxkcmVuLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWk7ICsraSkge1xuICAgICAgaWYgKHJldHVyblRvQ2FjaGUpIHtcbiAgICAgICAgY2hpbGRyZW5baV0ucmV0dXJuVG9DYWNoZSgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcbiAgICAgICAgY2hpbGRyZW5baV0uZGV0YWNoZWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gIH07XG5cbiAgcmV0dXJuIFZpZXdTbG90O1xufSgpO1xuXG52YXIgUHJvdmlkZXJSZXNvbHZlciA9IHJlc29sdmVyKF9jbGFzczEyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQcm92aWRlclJlc29sdmVyKCkge1xuICAgIFxuICB9XG5cbiAgUHJvdmlkZXJSZXNvbHZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0KGNvbnRhaW5lciwga2V5KSB7XG4gICAgdmFyIGlkID0ga2V5Ll9fcHJvdmlkZXJJZF9fO1xuICAgIHJldHVybiBpZCBpbiBjb250YWluZXIgPyBjb250YWluZXJbaWRdIDogY29udGFpbmVyW2lkXSA9IGNvbnRhaW5lci5pbnZva2Uoa2V5KTtcbiAgfTtcblxuICByZXR1cm4gUHJvdmlkZXJSZXNvbHZlcjtcbn0oKSkgfHwgX2NsYXNzMTI7XG5cbnZhciBwcm92aWRlclJlc29sdmVySW5zdGFuY2UgPSBuZXcgUHJvdmlkZXJSZXNvbHZlcigpO1xuXG5mdW5jdGlvbiBlbGVtZW50Q29udGFpbmVyR2V0KGtleSkge1xuICBpZiAoa2V5ID09PSBET00uRWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7XG4gIH1cblxuICBpZiAoa2V5ID09PSBCb3VuZFZpZXdGYWN0b3J5KSB7XG4gICAgaWYgKHRoaXMuYm91bmRWaWV3RmFjdG9yeSkge1xuICAgICAgcmV0dXJuIHRoaXMuYm91bmRWaWV3RmFjdG9yeTtcbiAgICB9XG5cbiAgICB2YXIgZmFjdG9yeSA9IHRoaXMuaW5zdHJ1Y3Rpb24udmlld0ZhY3Rvcnk7XG4gICAgdmFyIF9wYXJ0UmVwbGFjZW1lbnRzID0gdGhpcy5wYXJ0UmVwbGFjZW1lbnRzO1xuXG4gICAgaWYgKF9wYXJ0UmVwbGFjZW1lbnRzKSB7XG4gICAgICBmYWN0b3J5ID0gX3BhcnRSZXBsYWNlbWVudHNbZmFjdG9yeS5wYXJ0XSB8fCBmYWN0b3J5O1xuICAgIH1cblxuICAgIHRoaXMuYm91bmRWaWV3RmFjdG9yeSA9IG5ldyBCb3VuZFZpZXdGYWN0b3J5KHRoaXMsIGZhY3RvcnksIF9wYXJ0UmVwbGFjZW1lbnRzKTtcbiAgICByZXR1cm4gdGhpcy5ib3VuZFZpZXdGYWN0b3J5O1xuICB9XG5cbiAgaWYgKGtleSA9PT0gVmlld1Nsb3QpIHtcbiAgICBpZiAodGhpcy52aWV3U2xvdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnZpZXdTbG90ID0gbmV3IFZpZXdTbG90KHRoaXMuZWxlbWVudCwgdGhpcy5pbnN0cnVjdGlvbi5hbmNob3JJc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmVsZW1lbnQuaXNDb250ZW50UHJvamVjdGlvblNvdXJjZSA9IHRoaXMuaW5zdHJ1Y3Rpb24ubGlmdGluZztcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaCh0aGlzLnZpZXdTbG90KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy52aWV3U2xvdDtcbiAgfVxuXG4gIGlmIChrZXkgPT09IEVsZW1lbnRFdmVudHMpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50RXZlbnRzIHx8ICh0aGlzLmVsZW1lbnRFdmVudHMgPSBuZXcgRWxlbWVudEV2ZW50cyh0aGlzLmVsZW1lbnQpKTtcbiAgfVxuXG4gIGlmIChrZXkgPT09IENvbXBvc2l0aW9uVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NpdGlvblRyYW5zYWN0aW9uIHx8ICh0aGlzLmNvbXBvc2l0aW9uVHJhbnNhY3Rpb24gPSB0aGlzLnBhcmVudC5nZXQoa2V5KSk7XG4gIH1cblxuICBpZiAoa2V5ID09PSBWaWV3UmVzb3VyY2VzKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld1Jlc291cmNlcztcbiAgfVxuXG4gIGlmIChrZXkgPT09IFRhcmdldEluc3RydWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb247XG4gIH1cblxuICByZXR1cm4gdGhpcy5zdXBlckdldChrZXkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50Q29udGFpbmVyKHBhcmVudCwgZWxlbWVudCwgaW5zdHJ1Y3Rpb24sIGNoaWxkcmVuLCBwYXJ0UmVwbGFjZW1lbnRzLCByZXNvdXJjZXMpIHtcbiAgdmFyIGNvbnRhaW5lciA9IHBhcmVudC5jcmVhdGVDaGlsZCgpO1xuICB2YXIgcHJvdmlkZXJzID0gdm9pZCAwO1xuICB2YXIgaSA9IHZvaWQgMDtcblxuICBjb250YWluZXIuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIGNvbnRhaW5lci5pbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uO1xuICBjb250YWluZXIuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgY29udGFpbmVyLnZpZXdSZXNvdXJjZXMgPSByZXNvdXJjZXM7XG4gIGNvbnRhaW5lci5wYXJ0UmVwbGFjZW1lbnRzID0gcGFydFJlcGxhY2VtZW50cztcblxuICBwcm92aWRlcnMgPSBpbnN0cnVjdGlvbi5wcm92aWRlcnM7XG4gIGkgPSBwcm92aWRlcnMubGVuZ3RoO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBjb250YWluZXIuX3Jlc29sdmVycy5zZXQocHJvdmlkZXJzW2ldLCBwcm92aWRlclJlc29sdmVySW5zdGFuY2UpO1xuICB9XG5cbiAgY29udGFpbmVyLnN1cGVyR2V0ID0gY29udGFpbmVyLmdldDtcbiAgY29udGFpbmVyLmdldCA9IGVsZW1lbnRDb250YWluZXJHZXQ7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGFzQXR0cmlidXRlKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGUobmFtZSkge1xuICByZXR1cm4gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VFbGVtZW50SW50b0FuY2hvcihlbGVtZW50LCBlbGVtZW50SW5zdHJ1Y3Rpb24pIHtcbiAgdmFyIGFuY2hvciA9IERPTS5jcmVhdGVDb21tZW50KCdhbmNob3InKTtcblxuICBpZiAoZWxlbWVudEluc3RydWN0aW9uKSB7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7XG5cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkLnRhZ05hbWUgPT09ICdBVS1DT05URU5UJykge1xuICAgICAgYW5jaG9yLmNvbnRlbnRFbGVtZW50ID0gZmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBhbmNob3IuX2VsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgYW5jaG9yLmhhc0F0dHJpYnV0ZSA9IGhhc0F0dHJpYnV0ZTtcbiAgICBhbmNob3IuZ2V0QXR0cmlidXRlID0gZ2V0QXR0cmlidXRlO1xuICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUgPSBzZXRBdHRyaWJ1dGU7XG4gIH1cblxuICBET00ucmVwbGFjZU5vZGUoYW5jaG9yLCBlbGVtZW50KTtcblxuICByZXR1cm4gYW5jaG9yO1xufVxuXG5mdW5jdGlvbiBhcHBseUluc3RydWN0aW9ucyhjb250YWluZXJzLCBlbGVtZW50LCBpbnN0cnVjdGlvbiwgY29udHJvbGxlcnMsIGJpbmRpbmdzLCBjaGlsZHJlbiwgc2hhZG93U2xvdHMsIHBhcnRSZXBsYWNlbWVudHMsIHJlc291cmNlcykge1xuICB2YXIgYmVoYXZpb3JJbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbi5iZWhhdmlvckluc3RydWN0aW9ucztcbiAgdmFyIGV4cHJlc3Npb25zID0gaW5zdHJ1Y3Rpb24uZXhwcmVzc2lvbnM7XG4gIHZhciBlbGVtZW50Q29udGFpbmVyID0gdm9pZCAwO1xuICB2YXIgaSA9IHZvaWQgMDtcbiAgdmFyIGlpID0gdm9pZCAwO1xuICB2YXIgY3VycmVudCA9IHZvaWQgMDtcbiAgdmFyIGluc3RhbmNlID0gdm9pZCAwO1xuXG4gIGlmIChpbnN0cnVjdGlvbi5jb250ZW50RXhwcmVzc2lvbikge1xuICAgIGJpbmRpbmdzLnB1c2goaW5zdHJ1Y3Rpb24uY29udGVudEV4cHJlc3Npb24uY3JlYXRlQmluZGluZyhlbGVtZW50Lm5leHRTaWJsaW5nKSk7XG4gICAgZWxlbWVudC5uZXh0U2libGluZy5hdUludGVycG9sYXRpb25UYXJnZXQgPSB0cnVlO1xuICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5zdHJ1Y3Rpb24uc2hhZG93U2xvdCkge1xuICAgIHZhciBjb21tZW50QW5jaG9yID0gRE9NLmNyZWF0ZUNvbW1lbnQoJ3Nsb3QnKTtcbiAgICB2YXIgc2xvdCA9IHZvaWQgMDtcblxuICAgIGlmIChpbnN0cnVjdGlvbi5zbG90RGVzdGluYXRpb24pIHtcbiAgICAgIHNsb3QgPSBuZXcgUGFzc1Rocm91Z2hTbG90KGNvbW1lbnRBbmNob3IsIGluc3RydWN0aW9uLnNsb3ROYW1lLCBpbnN0cnVjdGlvbi5zbG90RGVzdGluYXRpb24sIGluc3RydWN0aW9uLnNsb3RGYWxsYmFja0ZhY3RvcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbG90ID0gbmV3IFNoYWRvd1Nsb3QoY29tbWVudEFuY2hvciwgaW5zdHJ1Y3Rpb24uc2xvdE5hbWUsIGluc3RydWN0aW9uLnNsb3RGYWxsYmFja0ZhY3RvcnkpO1xuICAgIH1cblxuICAgIERPTS5yZXBsYWNlTm9kZShjb21tZW50QW5jaG9yLCBlbGVtZW50KTtcbiAgICBzaGFkb3dTbG90c1tpbnN0cnVjdGlvbi5zbG90TmFtZV0gPSBzbG90O1xuICAgIGNvbnRyb2xsZXJzLnB1c2goc2xvdCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluc3RydWN0aW9uLmxldEVsZW1lbnQpIHtcbiAgICBmb3IgKGkgPSAwLCBpaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGJpbmRpbmdzLnB1c2goZXhwcmVzc2lvbnNbaV0uY3JlYXRlQmluZGluZygpKTtcbiAgICB9XG4gICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGgpIHtcbiAgICBpZiAoIWluc3RydWN0aW9uLmFuY2hvcklzQ29udGFpbmVyKSB7XG4gICAgICBlbGVtZW50ID0gbWFrZUVsZW1lbnRJbnRvQW5jaG9yKGVsZW1lbnQsIGluc3RydWN0aW9uLmVsZW1lbnRJbnN0cnVjdGlvbik7XG4gICAgfVxuXG4gICAgY29udGFpbmVyc1tpbnN0cnVjdGlvbi5pbmplY3RvcklkXSA9IGVsZW1lbnRDb250YWluZXIgPSBjcmVhdGVFbGVtZW50Q29udGFpbmVyKGNvbnRhaW5lcnNbaW5zdHJ1Y3Rpb24ucGFyZW50SW5qZWN0b3JJZF0sIGVsZW1lbnQsIGluc3RydWN0aW9uLCBjaGlsZHJlbiwgcGFydFJlcGxhY2VtZW50cywgcmVzb3VyY2VzKTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gYmVoYXZpb3JJbnN0cnVjdGlvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY3VycmVudCA9IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zW2ldO1xuICAgICAgaW5zdGFuY2UgPSBjdXJyZW50LnR5cGUuY3JlYXRlKGVsZW1lbnRDb250YWluZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGJpbmRpbmdzKTtcbiAgICAgIGNvbnRyb2xsZXJzLnB1c2goaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDAsIGlpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgIGJpbmRpbmdzLnB1c2goZXhwcmVzc2lvbnNbaV0uY3JlYXRlQmluZGluZyhlbGVtZW50KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3R5bGVTdHJpbmdUb09iamVjdChzdHlsZSwgdGFyZ2V0KSB7XG4gIHZhciBhdHRyaWJ1dGVzID0gc3R5bGUuc3BsaXQoJzsnKTtcbiAgdmFyIGZpcnN0SW5kZXhPZkNvbG9uID0gdm9pZCAwO1xuICB2YXIgaSA9IHZvaWQgMDtcbiAgdmFyIGN1cnJlbnQgPSB2b2lkIDA7XG4gIHZhciBrZXkgPSB2b2lkIDA7XG4gIHZhciB2YWx1ZSA9IHZvaWQgMDtcblxuICB0YXJnZXQgPSB0YXJnZXQgfHwge307XG5cbiAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjdXJyZW50ID0gYXR0cmlidXRlc1tpXTtcbiAgICBmaXJzdEluZGV4T2ZDb2xvbiA9IGN1cnJlbnQuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGN1cnJlbnQuc3Vic3RyaW5nKDAsIGZpcnN0SW5kZXhPZkNvbG9uKS50cmltKCk7XG4gICAgdmFsdWUgPSBjdXJyZW50LnN1YnN0cmluZyhmaXJzdEluZGV4T2ZDb2xvbiArIDEpLnRyaW0oKTtcbiAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gc3R5bGVPYmplY3RUb1N0cmluZyhvYmopIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuXG4gIGZvciAodmFyIF9rZXk0IGluIG9iaikge1xuICAgIHJlc3VsdCArPSBfa2V5NCArICc6JyArIG9ialtfa2V5NF0gKyAnOyc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBhcHBseVN1cnJvZ2F0ZUluc3RydWN0aW9uKGNvbnRhaW5lciwgZWxlbWVudCwgaW5zdHJ1Y3Rpb24sIGNvbnRyb2xsZXJzLCBiaW5kaW5ncywgY2hpbGRyZW4pIHtcbiAgdmFyIGJlaGF2aW9ySW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb24uYmVoYXZpb3JJbnN0cnVjdGlvbnM7XG4gIHZhciBleHByZXNzaW9ucyA9IGluc3RydWN0aW9uLmV4cHJlc3Npb25zO1xuICB2YXIgcHJvdmlkZXJzID0gaW5zdHJ1Y3Rpb24ucHJvdmlkZXJzO1xuICB2YXIgdmFsdWVzID0gaW5zdHJ1Y3Rpb24udmFsdWVzO1xuICB2YXIgaSA9IHZvaWQgMDtcbiAgdmFyIGlpID0gdm9pZCAwO1xuICB2YXIgY3VycmVudCA9IHZvaWQgMDtcbiAgdmFyIGluc3RhbmNlID0gdm9pZCAwO1xuICB2YXIgY3VycmVudEF0dHJpYnV0ZVZhbHVlID0gdm9pZCAwO1xuXG4gIGkgPSBwcm92aWRlcnMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgY29udGFpbmVyLl9yZXNvbHZlcnMuc2V0KHByb3ZpZGVyc1tpXSwgcHJvdmlkZXJSZXNvbHZlckluc3RhbmNlKTtcbiAgfVxuXG4gIGZvciAodmFyIF9rZXk1IGluIHZhbHVlcykge1xuICAgIGN1cnJlbnRBdHRyaWJ1dGVWYWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKF9rZXk1KTtcblxuICAgIGlmIChjdXJyZW50QXR0cmlidXRlVmFsdWUpIHtcbiAgICAgIGlmIChfa2V5NSA9PT0gJ2NsYXNzJykge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXJyZW50QXR0cmlidXRlVmFsdWUgKyAnICcgKyB2YWx1ZXNbX2tleTVdKTtcbiAgICAgIH0gZWxzZSBpZiAoX2tleTUgPT09ICdzdHlsZScpIHtcbiAgICAgICAgdmFyIHN0eWxlT2JqZWN0ID0gc3R5bGVTdHJpbmdUb09iamVjdCh2YWx1ZXNbX2tleTVdKTtcbiAgICAgICAgc3R5bGVTdHJpbmdUb09iamVjdChjdXJyZW50QXR0cmlidXRlVmFsdWUsIHN0eWxlT2JqZWN0KTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVPYmplY3RUb1N0cmluZyhzdHlsZU9iamVjdCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShfa2V5NSwgdmFsdWVzW19rZXk1XSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJlaGF2aW9ySW5zdHJ1Y3Rpb25zLmxlbmd0aCkge1xuICAgIGZvciAoaSA9IDAsIGlpID0gYmVoYXZpb3JJbnN0cnVjdGlvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY3VycmVudCA9IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zW2ldO1xuICAgICAgaW5zdGFuY2UgPSBjdXJyZW50LnR5cGUuY3JlYXRlKGNvbnRhaW5lciwgY3VycmVudCwgZWxlbWVudCwgYmluZGluZ3MpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UuY29udGVudFZpZXcpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChpbnN0YW5jZS5jb250ZW50Vmlldyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRyb2xsZXJzLnB1c2goaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDAsIGlpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgIGJpbmRpbmdzLnB1c2goZXhwcmVzc2lvbnNbaV0uY3JlYXRlQmluZGluZyhlbGVtZW50KSk7XG4gIH1cbn1cblxuZXhwb3J0IHZhciBCb3VuZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCb3VuZFZpZXdGYWN0b3J5KHBhcmVudENvbnRhaW5lciwgdmlld0ZhY3RvcnksIHBhcnRSZXBsYWNlbWVudHMpIHtcbiAgICBcblxuICAgIHRoaXMucGFyZW50Q29udGFpbmVyID0gcGFyZW50Q29udGFpbmVyO1xuICAgIHRoaXMudmlld0ZhY3RvcnkgPSB2aWV3RmFjdG9yeTtcbiAgICB0aGlzLmZhY3RvcnlDcmVhdGVJbnN0cnVjdGlvbiA9IHsgcGFydFJlcGxhY2VtZW50czogcGFydFJlcGxhY2VtZW50cyB9O1xuICB9XG5cbiAgQm91bmRWaWV3RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgIHZhciB2aWV3ID0gdGhpcy52aWV3RmFjdG9yeS5jcmVhdGUodGhpcy5wYXJlbnRDb250YWluZXIuY3JlYXRlQ2hpbGQoKSwgdGhpcy5mYWN0b3J5Q3JlYXRlSW5zdHJ1Y3Rpb24pO1xuICAgIHZpZXcuX2lzVXNlckNvbnRyb2xsZWQgPSB0cnVlO1xuICAgIHJldHVybiB2aWV3O1xuICB9O1xuXG4gIEJvdW5kVmlld0ZhY3RvcnkucHJvdG90eXBlLnNldENhY2hlU2l6ZSA9IGZ1bmN0aW9uIHNldENhY2hlU2l6ZShzaXplLCBkb05vdE92ZXJyaWRlSWZBbHJlYWR5U2V0KSB7XG4gICAgdGhpcy52aWV3RmFjdG9yeS5zZXRDYWNoZVNpemUoc2l6ZSwgZG9Ob3RPdmVycmlkZUlmQWxyZWFkeVNldCk7XG4gIH07XG5cbiAgQm91bmRWaWV3RmFjdG9yeS5wcm90b3R5cGUuZ2V0Q2FjaGVkVmlldyA9IGZ1bmN0aW9uIGdldENhY2hlZFZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld0ZhY3RvcnkuZ2V0Q2FjaGVkVmlldygpO1xuICB9O1xuXG4gIEJvdW5kVmlld0ZhY3RvcnkucHJvdG90eXBlLnJldHVyblZpZXdUb0NhY2hlID0gZnVuY3Rpb24gcmV0dXJuVmlld1RvQ2FjaGUodmlldykge1xuICAgIHRoaXMudmlld0ZhY3RvcnkucmV0dXJuVmlld1RvQ2FjaGUodmlldyk7XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKEJvdW5kVmlld0ZhY3RvcnksIFt7XG4gICAga2V5OiAnaXNDYWNoaW5nJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZpZXdGYWN0b3J5LmlzQ2FjaGluZztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQm91bmRWaWV3RmFjdG9yeTtcbn0oKTtcblxuZXhwb3J0IHZhciBWaWV3RmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVmlld0ZhY3RvcnkodGVtcGxhdGUsIGluc3RydWN0aW9ucywgcmVzb3VyY2VzKSB7XG4gICAgXG5cbiAgICB0aGlzLmlzQ2FjaGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMucmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuICAgIHRoaXMuY2FjaGVTaXplID0gLTE7XG4gICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gIH1cblxuICBWaWV3RmFjdG9yeS5wcm90b3R5cGUuc2V0Q2FjaGVTaXplID0gZnVuY3Rpb24gc2V0Q2FjaGVTaXplKHNpemUsIGRvTm90T3ZlcnJpZGVJZkFscmVhZHlTZXQpIHtcbiAgICBpZiAoc2l6ZSkge1xuICAgICAgaWYgKHNpemUgPT09ICcqJykge1xuICAgICAgICBzaXplID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNpemUgPSBwYXJzZUludChzaXplLCAxMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FjaGVTaXplID09PSAtMSB8fCAhZG9Ob3RPdmVycmlkZUlmQWxyZWFkeVNldCkge1xuICAgICAgdGhpcy5jYWNoZVNpemUgPSBzaXplO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhY2hlU2l6ZSA+IDApIHtcbiAgICAgIHRoaXMuY2FjaGUgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5pc0NhY2hpbmcgPSB0aGlzLmNhY2hlU2l6ZSA+IDA7XG4gIH07XG5cbiAgVmlld0ZhY3RvcnkucHJvdG90eXBlLmdldENhY2hlZFZpZXcgPSBmdW5jdGlvbiBnZXRDYWNoZWRWaWV3KCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlICE9PSBudWxsID8gdGhpcy5jYWNoZS5wb3AoKSB8fCBudWxsIDogbnVsbDtcbiAgfTtcblxuICBWaWV3RmFjdG9yeS5wcm90b3R5cGUucmV0dXJuVmlld1RvQ2FjaGUgPSBmdW5jdGlvbiByZXR1cm5WaWV3VG9DYWNoZSh2aWV3KSB7XG4gICAgaWYgKHZpZXcuaXNBdHRhY2hlZCkge1xuICAgICAgdmlldy5kZXRhY2hlZCgpO1xuICAgIH1cblxuICAgIGlmICh2aWV3LmlzQm91bmQpIHtcbiAgICAgIHZpZXcudW5iaW5kKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FjaGUgIT09IG51bGwgJiYgdGhpcy5jYWNoZS5sZW5ndGggPCB0aGlzLmNhY2hlU2l6ZSkge1xuICAgICAgdmlldy5mcm9tQ2FjaGUgPSB0cnVlO1xuICAgICAgdGhpcy5jYWNoZS5wdXNoKHZpZXcpO1xuICAgIH1cbiAgfTtcblxuICBWaWV3RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGNvbnRhaW5lciwgY3JlYXRlSW5zdHJ1Y3Rpb24sIGVsZW1lbnQpIHtcbiAgICBjcmVhdGVJbnN0cnVjdGlvbiA9IGNyZWF0ZUluc3RydWN0aW9uIHx8IEJlaGF2aW9ySW5zdHJ1Y3Rpb24ubm9ybWFsO1xuXG4gICAgdmFyIGNhY2hlZFZpZXcgPSB0aGlzLmdldENhY2hlZFZpZXcoKTtcbiAgICBpZiAoY2FjaGVkVmlldyAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFZpZXc7XG4gICAgfVxuXG4gICAgdmFyIGZyYWdtZW50ID0gY3JlYXRlSW5zdHJ1Y3Rpb24uZW5oYW5jZSA/IHRoaXMudGVtcGxhdGUgOiB0aGlzLnRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICB2YXIgaW5zdHJ1Y3RhYmxlcyA9IGZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hdS10YXJnZXQnKTtcbiAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgdmFyIHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuICAgIHZhciBjb250cm9sbGVycyA9IFtdO1xuICAgIHZhciBiaW5kaW5ncyA9IFtdO1xuICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuICAgIHZhciBzaGFkb3dTbG90cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGNvbnRhaW5lcnMgPSB7IHJvb3Q6IGNvbnRhaW5lciB9O1xuICAgIHZhciBwYXJ0UmVwbGFjZW1lbnRzID0gY3JlYXRlSW5zdHJ1Y3Rpb24ucGFydFJlcGxhY2VtZW50cztcbiAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICB2YXIgaWkgPSB2b2lkIDA7XG4gICAgdmFyIHZpZXcgPSB2b2lkIDA7XG4gICAgdmFyIGluc3RydWN0YWJsZSA9IHZvaWQgMDtcbiAgICB2YXIgaW5zdHJ1Y3Rpb24gPSB2b2lkIDA7XG5cbiAgICB0aGlzLnJlc291cmNlcy5faW52b2tlSG9vaygnYmVmb3JlQ3JlYXRlJywgdGhpcywgY29udGFpbmVyLCBmcmFnbWVudCwgY3JlYXRlSW5zdHJ1Y3Rpb24pO1xuXG4gICAgaWYgKGVsZW1lbnQgJiYgdGhpcy5zdXJyb2dhdGVJbnN0cnVjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgYXBwbHlTdXJyb2dhdGVJbnN0cnVjdGlvbihjb250YWluZXIsIGVsZW1lbnQsIHRoaXMuc3Vycm9nYXRlSW5zdHJ1Y3Rpb24sIGNvbnRyb2xsZXJzLCBiaW5kaW5ncywgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVJbnN0cnVjdGlvbi5lbmhhbmNlICYmIGZyYWdtZW50Lmhhc0F0dHJpYnV0ZSgnYXUtdGFyZ2V0LWlkJykpIHtcbiAgICAgIGluc3RydWN0YWJsZSA9IGZyYWdtZW50O1xuICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNbaW5zdHJ1Y3RhYmxlLmdldEF0dHJpYnV0ZSgnYXUtdGFyZ2V0LWlkJyldO1xuICAgICAgYXBwbHlJbnN0cnVjdGlvbnMoY29udGFpbmVycywgaW5zdHJ1Y3RhYmxlLCBpbnN0cnVjdGlvbiwgY29udHJvbGxlcnMsIGJpbmRpbmdzLCBjaGlsZHJlbiwgc2hhZG93U2xvdHMsIHBhcnRSZXBsYWNlbWVudHMsIHJlc291cmNlcyk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgaWkgPSBpbnN0cnVjdGFibGVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGluc3RydWN0YWJsZSA9IGluc3RydWN0YWJsZXNbaV07XG4gICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpbnN0cnVjdGFibGUuZ2V0QXR0cmlidXRlKCdhdS10YXJnZXQtaWQnKV07XG4gICAgICBhcHBseUluc3RydWN0aW9ucyhjb250YWluZXJzLCBpbnN0cnVjdGFibGUsIGluc3RydWN0aW9uLCBjb250cm9sbGVycywgYmluZGluZ3MsIGNoaWxkcmVuLCBzaGFkb3dTbG90cywgcGFydFJlcGxhY2VtZW50cywgcmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICB2aWV3ID0gbmV3IFZpZXcoY29udGFpbmVyLCB0aGlzLCBmcmFnbWVudCwgY29udHJvbGxlcnMsIGJpbmRpbmdzLCBjaGlsZHJlbiwgc2hhZG93U2xvdHMpO1xuXG4gICAgaWYgKCFjcmVhdGVJbnN0cnVjdGlvbi5pbml0aWF0ZWRCeUJlaGF2aW9yKSB7XG4gICAgICB2aWV3LmNyZWF0ZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlcy5faW52b2tlSG9vaygnYWZ0ZXJDcmVhdGUnLCB2aWV3KTtcblxuICAgIHJldHVybiB2aWV3O1xuICB9O1xuXG4gIHJldHVybiBWaWV3RmFjdG9yeTtcbn0oKTtcblxudmFyIG5leHRJbmplY3RvcklkID0gMDtcbmZ1bmN0aW9uIGdldE5leHRJbmplY3RvcklkKCkge1xuICByZXR1cm4gKytuZXh0SW5qZWN0b3JJZDtcbn1cblxudmFyIGxhc3RBVVRhcmdldElEID0gMDtcbmZ1bmN0aW9uIGdldE5leHRBVVRhcmdldElEKCkge1xuICByZXR1cm4gKCsrbGFzdEFVVGFyZ2V0SUQpLnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIG1ha2VJbnRvSW5zdHJ1Y3Rpb25UYXJnZXQoZWxlbWVudCkge1xuICB2YXIgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgdmFyIGF1VGFyZ2V0SUQgPSBnZXROZXh0QVVUYXJnZXRJRCgpO1xuXG4gIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHZhbHVlID8gdmFsdWUgKyAnIGF1LXRhcmdldCcgOiAnYXUtdGFyZ2V0Jyk7XG4gIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhdS10YXJnZXQtaWQnLCBhdVRhcmdldElEKTtcblxuICByZXR1cm4gYXVUYXJnZXRJRDtcbn1cblxuZnVuY3Rpb24gbWFrZVNoYWRvd1Nsb3QoY29tcGlsZXIsIHJlc291cmNlcywgbm9kZSwgaW5zdHJ1Y3Rpb25zLCBwYXJlbnRJbmplY3RvcklkKSB7XG4gIHZhciBhdVNoYWRvd1Nsb3QgPSBET00uY3JlYXRlRWxlbWVudCgnYXUtc2hhZG93LXNsb3QnKTtcbiAgRE9NLnJlcGxhY2VOb2RlKGF1U2hhZG93U2xvdCwgbm9kZSk7XG5cbiAgdmFyIGF1VGFyZ2V0SUQgPSBtYWtlSW50b0luc3RydWN0aW9uVGFyZ2V0KGF1U2hhZG93U2xvdCk7XG4gIHZhciBpbnN0cnVjdGlvbiA9IFRhcmdldEluc3RydWN0aW9uLnNoYWRvd1Nsb3QocGFyZW50SW5qZWN0b3JJZCk7XG5cbiAgaW5zdHJ1Y3Rpb24uc2xvdE5hbWUgPSBub2RlLmdldEF0dHJpYnV0ZSgnbmFtZScpIHx8IFNoYWRvd0RPTS5kZWZhdWx0U2xvdEtleTtcbiAgaW5zdHJ1Y3Rpb24uc2xvdERlc3RpbmF0aW9uID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3Nsb3QnKTtcblxuICBpZiAobm9kZS5pbm5lckhUTUwudHJpbSgpKSB7XG4gICAgdmFyIGZyYWdtZW50ID0gRE9NLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICB2YXIgX2NoaWxkNCA9IHZvaWQgMDtcblxuICAgIHdoaWxlIChfY2hpbGQ0ID0gbm9kZS5maXJzdENoaWxkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChfY2hpbGQ0KTtcbiAgICB9XG5cbiAgICBpbnN0cnVjdGlvbi5zbG90RmFsbGJhY2tGYWN0b3J5ID0gY29tcGlsZXIuY29tcGlsZShmcmFnbWVudCwgcmVzb3VyY2VzKTtcbiAgfVxuXG4gIGluc3RydWN0aW9uc1thdVRhcmdldElEXSA9IGluc3RydWN0aW9uO1xuXG4gIHJldHVybiBhdVNoYWRvd1Nsb3Q7XG59XG5cbnZhciBkZWZhdWx0TGV0SGFuZGxlciA9IEJpbmRpbmdMYW5ndWFnZS5wcm90b3R5cGUuY3JlYXRlTGV0RXhwcmVzc2lvbnM7XG5cbmV4cG9ydCB2YXIgVmlld0NvbXBpbGVyID0gZnVuY3Rpb24gKCkge1xuICBWaWV3Q29tcGlsZXIuaW5qZWN0ID0gZnVuY3Rpb24gaW5qZWN0KCkge1xuICAgIHJldHVybiBbQmluZGluZ0xhbmd1YWdlLCBWaWV3UmVzb3VyY2VzXTtcbiAgfTtcblxuICBmdW5jdGlvbiBWaWV3Q29tcGlsZXIoYmluZGluZ0xhbmd1YWdlLCByZXNvdXJjZXMpIHtcbiAgICBcblxuICAgIHRoaXMuYmluZGluZ0xhbmd1YWdlID0gYmluZGluZ0xhbmd1YWdlO1xuICAgIHRoaXMucmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuICB9XG5cbiAgVmlld0NvbXBpbGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gY29tcGlsZShzb3VyY2UsIHJlc291cmNlcywgY29tcGlsZUluc3RydWN0aW9uKSB7XG4gICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzIHx8IHRoaXMucmVzb3VyY2VzO1xuICAgIGNvbXBpbGVJbnN0cnVjdGlvbiA9IGNvbXBpbGVJbnN0cnVjdGlvbiB8fCBWaWV3Q29tcGlsZUluc3RydWN0aW9uLm5vcm1hbDtcbiAgICBzb3VyY2UgPSB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IERPTS5jcmVhdGVUZW1wbGF0ZUZyb21NYXJrdXAoc291cmNlKSA6IHNvdXJjZTtcblxuICAgIHZhciBjb250ZW50ID0gdm9pZCAwO1xuICAgIHZhciBwYXJ0ID0gdm9pZCAwO1xuICAgIHZhciBjYWNoZVNpemUgPSB2b2lkIDA7XG5cbiAgICBpZiAoc291cmNlLmNvbnRlbnQpIHtcbiAgICAgIHBhcnQgPSBzb3VyY2UuZ2V0QXR0cmlidXRlKCdwYXJ0Jyk7XG4gICAgICBjYWNoZVNpemUgPSBzb3VyY2UuZ2V0QXR0cmlidXRlKCd2aWV3LWNhY2hlJyk7XG4gICAgICBjb250ZW50ID0gRE9NLmFkb3B0Tm9kZShzb3VyY2UuY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSBzb3VyY2U7XG4gICAgfVxuXG4gICAgY29tcGlsZUluc3RydWN0aW9uLnRhcmdldFNoYWRvd0RPTSA9IGNvbXBpbGVJbnN0cnVjdGlvbi50YXJnZXRTaGFkb3dET00gJiYgRkVBVFVSRS5zaGFkb3dET007XG4gICAgcmVzb3VyY2VzLl9pbnZva2VIb29rKCdiZWZvcmVDb21waWxlJywgY29udGVudCwgcmVzb3VyY2VzLCBjb21waWxlSW5zdHJ1Y3Rpb24pO1xuXG4gICAgdmFyIGluc3RydWN0aW9ucyA9IHt9O1xuICAgIHRoaXMuX2NvbXBpbGVOb2RlKGNvbnRlbnQsIHJlc291cmNlcywgaW5zdHJ1Y3Rpb25zLCBzb3VyY2UsICdyb290JywgIWNvbXBpbGVJbnN0cnVjdGlvbi50YXJnZXRTaGFkb3dET00pO1xuXG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBjb250ZW50LmZpcnN0Q2hpbGQ7XG4gICAgaWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgdmFyIHRhcmdldElkID0gZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2F1LXRhcmdldC1pZCcpO1xuICAgICAgaWYgKHRhcmdldElkKSB7XG4gICAgICAgIHZhciBpbnMgPSBpbnN0cnVjdGlvbnNbdGFyZ2V0SWRdO1xuXG4gICAgICAgIGlmIChpbnMuc2hhZG93U2xvdCB8fCBpbnMubGlmdGluZyB8fCBpbnMuZWxlbWVudEluc3RydWN0aW9uICYmICFpbnMuZWxlbWVudEluc3RydWN0aW9uLmFuY2hvcklzQ29udGFpbmVyKSB7XG4gICAgICAgICAgY29udGVudC5pbnNlcnRCZWZvcmUoRE9NLmNyZWF0ZUNvbW1lbnQoJ3ZpZXcnKSwgZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmFjdG9yeSA9IG5ldyBWaWV3RmFjdG9yeShjb250ZW50LCBpbnN0cnVjdGlvbnMsIHJlc291cmNlcyk7XG5cbiAgICBmYWN0b3J5LnN1cnJvZ2F0ZUluc3RydWN0aW9uID0gY29tcGlsZUluc3RydWN0aW9uLmNvbXBpbGVTdXJyb2dhdGUgPyB0aGlzLl9jb21waWxlU3Vycm9nYXRlKHNvdXJjZSwgcmVzb3VyY2VzKSA6IG51bGw7XG4gICAgZmFjdG9yeS5wYXJ0ID0gcGFydDtcblxuICAgIGlmIChjYWNoZVNpemUpIHtcbiAgICAgIGZhY3Rvcnkuc2V0Q2FjaGVTaXplKGNhY2hlU2l6ZSk7XG4gICAgfVxuXG4gICAgcmVzb3VyY2VzLl9pbnZva2VIb29rKCdhZnRlckNvbXBpbGUnLCBmYWN0b3J5KTtcblxuICAgIHJldHVybiBmYWN0b3J5O1xuICB9O1xuXG4gIFZpZXdDb21waWxlci5wcm90b3R5cGUuX2NvbXBpbGVOb2RlID0gZnVuY3Rpb24gX2NvbXBpbGVOb2RlKG5vZGUsIHJlc291cmNlcywgaW5zdHJ1Y3Rpb25zLCBwYXJlbnROb2RlLCBwYXJlbnRJbmplY3RvcklkLCB0YXJnZXRMaWdodERPTSkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZUVsZW1lbnQobm9kZSwgcmVzb3VyY2VzLCBpbnN0cnVjdGlvbnMsIHBhcmVudE5vZGUsIHBhcmVudEluamVjdG9ySWQsIHRhcmdldExpZ2h0RE9NKTtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdmFyIGV4cHJlc3Npb24gPSByZXNvdXJjZXMuZ2V0QmluZGluZ0xhbmd1YWdlKHRoaXMuYmluZGluZ0xhbmd1YWdlKS5pbnNwZWN0VGV4dENvbnRlbnQocmVzb3VyY2VzLCBub2RlLndob2xlVGV4dCk7XG4gICAgICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICAgICAgdmFyIG1hcmtlciA9IERPTS5jcmVhdGVFbGVtZW50KCdhdS1tYXJrZXInKTtcbiAgICAgICAgICB2YXIgYXVUYXJnZXRJRCA9IG1ha2VJbnRvSW5zdHJ1Y3Rpb25UYXJnZXQobWFya2VyKTtcbiAgICAgICAgICAobm9kZS5wYXJlbnROb2RlIHx8IHBhcmVudE5vZGUpLmluc2VydEJlZm9yZShtYXJrZXIsIG5vZGUpO1xuICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSAnICc7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zW2F1VGFyZ2V0SURdID0gVGFyZ2V0SW5zdHJ1Y3Rpb24uY29udGVudEV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG5cbiAgICAgICAgICB3aGlsZSAobm9kZS5uZXh0U2libGluZyAmJiBub2RlLm5leHRTaWJsaW5nLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgICAgICAobm9kZS5wYXJlbnROb2RlIHx8IHBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKG5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAobm9kZS5uZXh0U2libGluZyAmJiBub2RlLm5leHRTaWJsaW5nLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICBjYXNlIDExOlxuICAgICAgICB2YXIgY3VycmVudENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICB3aGlsZSAoY3VycmVudENoaWxkKSB7XG4gICAgICAgICAgY3VycmVudENoaWxkID0gdGhpcy5fY29tcGlsZU5vZGUoY3VycmVudENoaWxkLCByZXNvdXJjZXMsIGluc3RydWN0aW9ucywgbm9kZSwgcGFyZW50SW5qZWN0b3JJZCwgdGFyZ2V0TGlnaHRET00pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gIH07XG5cbiAgVmlld0NvbXBpbGVyLnByb3RvdHlwZS5fY29tcGlsZVN1cnJvZ2F0ZSA9IGZ1bmN0aW9uIF9jb21waWxlU3Vycm9nYXRlKG5vZGUsIHJlc291cmNlcykge1xuICAgIHZhciB0YWdOYW1lID0gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgdmFyIGJpbmRpbmdMYW5ndWFnZSA9IHJlc291cmNlcy5nZXRCaW5kaW5nTGFuZ3VhZ2UodGhpcy5iaW5kaW5nTGFuZ3VhZ2UpO1xuICAgIHZhciBrbm93bkF0dHJpYnV0ZSA9IHZvaWQgMDtcbiAgICB2YXIgcHJvcGVydHkgPSB2b2lkIDA7XG4gICAgdmFyIGluc3RydWN0aW9uID0gdm9pZCAwO1xuICAgIHZhciBpID0gdm9pZCAwO1xuICAgIHZhciBpaSA9IHZvaWQgMDtcbiAgICB2YXIgYXR0ciA9IHZvaWQgMDtcbiAgICB2YXIgYXR0ck5hbWUgPSB2b2lkIDA7XG4gICAgdmFyIGF0dHJWYWx1ZSA9IHZvaWQgMDtcbiAgICB2YXIgaW5mbyA9IHZvaWQgMDtcbiAgICB2YXIgdHlwZSA9IHZvaWQgMDtcbiAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTtcbiAgICB2YXIgZXhwcmVzc2lvbiA9IHZvaWQgMDtcbiAgICB2YXIgYmVoYXZpb3JJbnN0cnVjdGlvbnMgPSBbXTtcbiAgICB2YXIgdmFsdWVzID0ge307XG4gICAgdmFyIGhhc1ZhbHVlcyA9IGZhbHNlO1xuICAgIHZhciBwcm92aWRlcnMgPSBbXTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBhdHRyID0gYXR0cmlidXRlc1tpXTtcbiAgICAgIGF0dHJOYW1lID0gYXR0ci5uYW1lO1xuICAgICAgYXR0clZhbHVlID0gYXR0ci52YWx1ZTtcblxuICAgICAgaW5mbyA9IGJpbmRpbmdMYW5ndWFnZS5pbnNwZWN0QXR0cmlidXRlKHJlc291cmNlcywgdGFnTmFtZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICB0eXBlID0gcmVzb3VyY2VzLmdldEF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcblxuICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAga25vd25BdHRyaWJ1dGUgPSByZXNvdXJjZXMubWFwQXR0cmlidXRlKGluZm8uYXR0ck5hbWUpO1xuICAgICAgICBpZiAoa25vd25BdHRyaWJ1dGUpIHtcbiAgICAgICAgICBwcm9wZXJ0eSA9IHR5cGUuYXR0cmlidXRlc1trbm93bkF0dHJpYnV0ZV07XG5cbiAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIGluZm8uZGVmYXVsdEJpbmRpbmdNb2RlID0gcHJvcGVydHkuZGVmYXVsdEJpbmRpbmdNb2RlO1xuXG4gICAgICAgICAgICBpZiAoIWluZm8uY29tbWFuZCAmJiAhaW5mby5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGluZm8uY29tbWFuZCA9IHByb3BlcnR5Lmhhc09wdGlvbnMgPyAnb3B0aW9ucycgOiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5mby5jb21tYW5kICYmIGluZm8uY29tbWFuZCAhPT0gJ29wdGlvbnMnICYmIHR5cGUucHJpbWFyeVByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHZhciBfcHJpbWFyeVByb3BlcnR5ID0gdHlwZS5wcmltYXJ5UHJvcGVydHk7XG4gICAgICAgICAgICAgIGF0dHJOYW1lID0gaW5mby5hdHRyTmFtZSA9IF9wcmltYXJ5UHJvcGVydHkuYXR0cmlidXRlO1xuXG4gICAgICAgICAgICAgIGluZm8uZGVmYXVsdEJpbmRpbmdNb2RlID0gX3ByaW1hcnlQcm9wZXJ0eS5kZWZhdWx0QmluZGluZ01vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluc3RydWN0aW9uID0gYmluZGluZ0xhbmd1YWdlLmNyZWF0ZUF0dHJpYnV0ZUluc3RydWN0aW9uKHJlc291cmNlcywgbm9kZSwgaW5mbywgdW5kZWZpbmVkLCB0eXBlKTtcblxuICAgICAgaWYgKGluc3RydWN0aW9uKSB7XG4gICAgICAgIGlmIChpbnN0cnVjdGlvbi5hbHRlcmVkQXR0cikge1xuICAgICAgICAgIHR5cGUgPSByZXNvdXJjZXMuZ2V0QXR0cmlidXRlKGluc3RydWN0aW9uLmF0dHJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnN0cnVjdGlvbi5kaXNjcmV0ZSkge1xuICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goaW5zdHJ1Y3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbi50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZ3VyZVByb3BlcnRpZXMoaW5zdHJ1Y3Rpb24sIHJlc291cmNlcyk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlLmxpZnRzQ29udGVudCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgcGxhY2UgYSB0ZW1wbGF0ZSBjb250cm9sbGVyIG9uIGEgc3Vycm9nYXRlIGVsZW1lbnQuJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBiZWhhdmlvckluc3RydWN0aW9ucy5wdXNoKGluc3RydWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW2luc3RydWN0aW9uLmF0dHJOYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgIGluc3RydWN0aW9uID0gQmVoYXZpb3JJbnN0cnVjdGlvbi5hdHRyaWJ1dGUoYXR0ck5hbWUsIHR5cGUpO1xuICAgICAgICAgIGluc3RydWN0aW9uLmF0dHJpYnV0ZXNbcmVzb3VyY2VzLm1hcEF0dHJpYnV0ZShhdHRyTmFtZSldID0gYXR0clZhbHVlO1xuXG4gICAgICAgICAgaWYgKHR5cGUubGlmdHNDb250ZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgcGxhY2UgYSB0ZW1wbGF0ZSBjb250cm9sbGVyIG9uIGEgc3Vycm9nYXRlIGVsZW1lbnQuJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJlaGF2aW9ySW5zdHJ1Y3Rpb25zLnB1c2goaW5zdHJ1Y3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSAhPT0gJ2lkJyAmJiBhdHRyTmFtZSAhPT0gJ3BhcnQnICYmIGF0dHJOYW1lICE9PSAncmVwbGFjZS1wYXJ0Jykge1xuICAgICAgICAgIGhhc1ZhbHVlcyA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2F0dHJOYW1lXSA9IGF0dHJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggfHwgYmVoYXZpb3JJbnN0cnVjdGlvbnMubGVuZ3RoIHx8IGhhc1ZhbHVlcykge1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGluc3RydWN0aW9uID0gYmVoYXZpb3JJbnN0cnVjdGlvbnNbaV07XG4gICAgICAgIGluc3RydWN0aW9uLnR5cGUuY29tcGlsZSh0aGlzLCByZXNvdXJjZXMsIG5vZGUsIGluc3RydWN0aW9uKTtcbiAgICAgICAgcHJvdmlkZXJzLnB1c2goaW5zdHJ1Y3Rpb24udHlwZS50YXJnZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbi5hdHRyVG9SZW1vdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGV4cHJlc3Npb24uYXR0clRvUmVtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gVGFyZ2V0SW5zdHJ1Y3Rpb24uc3Vycm9nYXRlKHByb3ZpZGVycywgYmVoYXZpb3JJbnN0cnVjdGlvbnMsIGV4cHJlc3Npb25zLCB2YWx1ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIFZpZXdDb21waWxlci5wcm90b3R5cGUuX2NvbXBpbGVFbGVtZW50ID0gZnVuY3Rpb24gX2NvbXBpbGVFbGVtZW50KG5vZGUsIHJlc291cmNlcywgaW5zdHJ1Y3Rpb25zLCBwYXJlbnROb2RlLCBwYXJlbnRJbmplY3RvcklkLCB0YXJnZXRMaWdodERPTSkge1xuICAgIHZhciB0YWdOYW1lID0gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgdmFyIGV4cHJlc3Npb25zID0gW107XG4gICAgdmFyIGV4cHJlc3Npb24gPSB2b2lkIDA7XG4gICAgdmFyIGJlaGF2aW9ySW5zdHJ1Y3Rpb25zID0gW107XG4gICAgdmFyIHByb3ZpZGVycyA9IFtdO1xuICAgIHZhciBiaW5kaW5nTGFuZ3VhZ2UgPSByZXNvdXJjZXMuZ2V0QmluZGluZ0xhbmd1YWdlKHRoaXMuYmluZGluZ0xhbmd1YWdlKTtcbiAgICB2YXIgbGlmdGluZ0luc3RydWN0aW9uID0gdm9pZCAwO1xuICAgIHZhciB2aWV3RmFjdG9yeSA9IHZvaWQgMDtcbiAgICB2YXIgdHlwZSA9IHZvaWQgMDtcbiAgICB2YXIgZWxlbWVudEluc3RydWN0aW9uID0gdm9pZCAwO1xuICAgIHZhciBlbGVtZW50UHJvcGVydHkgPSB2b2lkIDA7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGlpID0gdm9pZCAwO1xuICAgIHZhciBhdHRyID0gdm9pZCAwO1xuICAgIHZhciBhdHRyTmFtZSA9IHZvaWQgMDtcbiAgICB2YXIgYXR0clZhbHVlID0gdm9pZCAwO1xuICAgIHZhciBvcmlnaW5hbEF0dHJOYW1lID0gdm9pZCAwO1xuICAgIHZhciBpbnN0cnVjdGlvbiA9IHZvaWQgMDtcbiAgICB2YXIgaW5mbyA9IHZvaWQgMDtcbiAgICB2YXIgcHJvcGVydHkgPSB2b2lkIDA7XG4gICAgdmFyIGtub3duQXR0cmlidXRlID0gdm9pZCAwO1xuICAgIHZhciBhdVRhcmdldElEID0gdm9pZCAwO1xuICAgIHZhciBpbmplY3RvcklkID0gdm9pZCAwO1xuXG4gICAgaWYgKHRhZ05hbWUgPT09ICdzbG90Jykge1xuICAgICAgaWYgKHRhcmdldExpZ2h0RE9NKSB7XG4gICAgICAgIG5vZGUgPSBtYWtlU2hhZG93U2xvdCh0aGlzLCByZXNvdXJjZXMsIG5vZGUsIGluc3RydWN0aW9ucywgcGFyZW50SW5qZWN0b3JJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIGlmICghKCdjb250ZW50JyBpbiBub2RlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgcGxhY2UgYSB0ZW1wbGF0ZSBlbGVtZW50IHdpdGhpbiAnICsgbm9kZS5uYW1lc3BhY2VVUkkgKyAnIG5hbWVzcGFjZScpO1xuICAgICAgfVxuICAgICAgdmlld0ZhY3RvcnkgPSB0aGlzLmNvbXBpbGUobm9kZSwgcmVzb3VyY2VzKTtcbiAgICAgIHZpZXdGYWN0b3J5LnBhcnQgPSBub2RlLmdldEF0dHJpYnV0ZSgncGFydCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlID0gcmVzb3VyY2VzLmdldEVsZW1lbnQobm9kZS5nZXRBdHRyaWJ1dGUoJ2FzLWVsZW1lbnQnKSB8fCB0YWdOYW1lKTtcblxuICAgICAgaWYgKHRhZ05hbWUgPT09ICdsZXQnICYmICF0eXBlICYmIGJpbmRpbmdMYW5ndWFnZS5jcmVhdGVMZXRFeHByZXNzaW9ucyAhPT0gZGVmYXVsdExldEhhbmRsZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnMgPSBiaW5kaW5nTGFuZ3VhZ2UuY3JlYXRlTGV0RXhwcmVzc2lvbnMocmVzb3VyY2VzLCBub2RlKTtcbiAgICAgICAgYXVUYXJnZXRJRCA9IG1ha2VJbnRvSW5zdHJ1Y3Rpb25UYXJnZXQobm9kZSk7XG4gICAgICAgIGluc3RydWN0aW9uc1thdVRhcmdldElEXSA9IFRhcmdldEluc3RydWN0aW9uLmxldEVsZW1lbnQoZXhwcmVzc2lvbnMpO1xuICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGVsZW1lbnRJbnN0cnVjdGlvbiA9IEJlaGF2aW9ySW5zdHJ1Y3Rpb24uZWxlbWVudChub2RlLCB0eXBlKTtcbiAgICAgICAgdHlwZS5wcm9jZXNzQXR0cmlidXRlcyh0aGlzLCByZXNvdXJjZXMsIG5vZGUsIGF0dHJpYnV0ZXMsIGVsZW1lbnRJbnN0cnVjdGlvbik7XG4gICAgICAgIGJlaGF2aW9ySW5zdHJ1Y3Rpb25zLnB1c2goZWxlbWVudEluc3RydWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICBvcmlnaW5hbEF0dHJOYW1lID0gYXR0ck5hbWUgPSBhdHRyLm5hbWU7XG4gICAgICBhdHRyVmFsdWUgPSBhdHRyLnZhbHVlO1xuICAgICAgaW5mbyA9IGJpbmRpbmdMYW5ndWFnZS5pbnNwZWN0QXR0cmlidXRlKHJlc291cmNlcywgdGFnTmFtZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG5cbiAgICAgIGlmICh0YXJnZXRMaWdodERPTSAmJiBpbmZvLmF0dHJOYW1lID09PSAnc2xvdCcpIHtcbiAgICAgICAgaW5mby5hdHRyTmFtZSA9IGF0dHJOYW1lID0gJ2F1LXNsb3QnO1xuICAgICAgfVxuXG4gICAgICB0eXBlID0gcmVzb3VyY2VzLmdldEF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcbiAgICAgIGVsZW1lbnRQcm9wZXJ0eSA9IG51bGw7XG5cbiAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGtub3duQXR0cmlidXRlID0gcmVzb3VyY2VzLm1hcEF0dHJpYnV0ZShpbmZvLmF0dHJOYW1lKTtcbiAgICAgICAgaWYgKGtub3duQXR0cmlidXRlKSB7XG4gICAgICAgICAgcHJvcGVydHkgPSB0eXBlLmF0dHJpYnV0ZXNba25vd25BdHRyaWJ1dGVdO1xuXG4gICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICBpbmZvLmRlZmF1bHRCaW5kaW5nTW9kZSA9IHByb3BlcnR5LmRlZmF1bHRCaW5kaW5nTW9kZTtcblxuICAgICAgICAgICAgaWYgKCFpbmZvLmNvbW1hbmQgJiYgIWluZm8uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpbmZvLmNvbW1hbmQgPSBwcm9wZXJ0eS5oYXNPcHRpb25zID8gJ29wdGlvbnMnIDogbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluZm8uY29tbWFuZCAmJiBpbmZvLmNvbW1hbmQgIT09ICdvcHRpb25zJyAmJiB0eXBlLnByaW1hcnlQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB2YXIgX3ByaW1hcnlQcm9wZXJ0eTIgPSB0eXBlLnByaW1hcnlQcm9wZXJ0eTtcbiAgICAgICAgICAgICAgYXR0ck5hbWUgPSBpbmZvLmF0dHJOYW1lID0gX3ByaW1hcnlQcm9wZXJ0eTIuYXR0cmlidXRlO1xuXG4gICAgICAgICAgICAgIGluZm8uZGVmYXVsdEJpbmRpbmdNb2RlID0gX3ByaW1hcnlQcm9wZXJ0eTIuZGVmYXVsdEJpbmRpbmdNb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50SW5zdHJ1Y3Rpb24pIHtcbiAgICAgICAgZWxlbWVudFByb3BlcnR5ID0gZWxlbWVudEluc3RydWN0aW9uLnR5cGUuYXR0cmlidXRlc1tpbmZvLmF0dHJOYW1lXTtcbiAgICAgICAgaWYgKGVsZW1lbnRQcm9wZXJ0eSkge1xuICAgICAgICAgIGluZm8uZGVmYXVsdEJpbmRpbmdNb2RlID0gZWxlbWVudFByb3BlcnR5LmRlZmF1bHRCaW5kaW5nTW9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudFByb3BlcnR5KSB7XG4gICAgICAgIGluc3RydWN0aW9uID0gYmluZGluZ0xhbmd1YWdlLmNyZWF0ZUF0dHJpYnV0ZUluc3RydWN0aW9uKHJlc291cmNlcywgbm9kZSwgaW5mbywgZWxlbWVudEluc3RydWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RydWN0aW9uID0gYmluZGluZ0xhbmd1YWdlLmNyZWF0ZUF0dHJpYnV0ZUluc3RydWN0aW9uKHJlc291cmNlcywgbm9kZSwgaW5mbywgdW5kZWZpbmVkLCB0eXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RydWN0aW9uKSB7XG4gICAgICAgIGlmIChpbnN0cnVjdGlvbi5hbHRlcmVkQXR0cikge1xuICAgICAgICAgIHR5cGUgPSByZXNvdXJjZXMuZ2V0QXR0cmlidXRlKGluc3RydWN0aW9uLmF0dHJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnN0cnVjdGlvbi5kaXNjcmV0ZSkge1xuICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goaW5zdHJ1Y3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbi50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZ3VyZVByb3BlcnRpZXMoaW5zdHJ1Y3Rpb24sIHJlc291cmNlcyk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlLmxpZnRzQ29udGVudCkge1xuICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5vcmlnaW5hbEF0dHJOYW1lID0gb3JpZ2luYWxBdHRyTmFtZTtcbiAgICAgICAgICAgICAgbGlmdGluZ0luc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb247XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYmVoYXZpb3JJbnN0cnVjdGlvbnMucHVzaChpbnN0cnVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50UHJvcGVydHkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRJbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW2luZm8uYXR0ck5hbWVdLnRhcmdldFByb3BlcnR5ID0gZWxlbWVudFByb3BlcnR5Lm5hbWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goaW5zdHJ1Y3Rpb24uYXR0cmlidXRlc1tpbnN0cnVjdGlvbi5hdHRyTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICBpbnN0cnVjdGlvbiA9IEJlaGF2aW9ySW5zdHJ1Y3Rpb24uYXR0cmlidXRlKGF0dHJOYW1lLCB0eXBlKTtcbiAgICAgICAgICBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzW3Jlc291cmNlcy5tYXBBdHRyaWJ1dGUoYXR0ck5hbWUpXSA9IGF0dHJWYWx1ZTtcblxuICAgICAgICAgIGlmICh0eXBlLmxpZnRzQ29udGVudCkge1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ub3JpZ2luYWxBdHRyTmFtZSA9IG9yaWdpbmFsQXR0ck5hbWU7XG4gICAgICAgICAgICBsaWZ0aW5nSW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiZWhhdmlvckluc3RydWN0aW9ucy5wdXNoKGluc3RydWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFByb3BlcnR5KSB7XG4gICAgICAgICAgZWxlbWVudEluc3RydWN0aW9uLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gYXR0clZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpZnRpbmdJbnN0cnVjdGlvbikge1xuICAgICAgbGlmdGluZ0luc3RydWN0aW9uLnZpZXdGYWN0b3J5ID0gdmlld0ZhY3Rvcnk7XG4gICAgICBub2RlID0gbGlmdGluZ0luc3RydWN0aW9uLnR5cGUuY29tcGlsZSh0aGlzLCByZXNvdXJjZXMsIG5vZGUsIGxpZnRpbmdJbnN0cnVjdGlvbiwgcGFyZW50Tm9kZSk7XG4gICAgICBhdVRhcmdldElEID0gbWFrZUludG9JbnN0cnVjdGlvblRhcmdldChub2RlKTtcbiAgICAgIGluc3RydWN0aW9uc1thdVRhcmdldElEXSA9IFRhcmdldEluc3RydWN0aW9uLmxpZnRpbmcocGFyZW50SW5qZWN0b3JJZCwgbGlmdGluZ0luc3RydWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNraXBDb250ZW50UHJvY2Vzc2luZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoIHx8IGJlaGF2aW9ySW5zdHJ1Y3Rpb25zLmxlbmd0aCkge1xuICAgICAgICBpbmplY3RvcklkID0gYmVoYXZpb3JJbnN0cnVjdGlvbnMubGVuZ3RoID8gZ2V0TmV4dEluamVjdG9ySWQoKSA6IGZhbHNlO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gYmVoYXZpb3JJbnN0cnVjdGlvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGluc3RydWN0aW9uID0gYmVoYXZpb3JJbnN0cnVjdGlvbnNbaV07XG4gICAgICAgICAgaW5zdHJ1Y3Rpb24udHlwZS5jb21waWxlKHRoaXMsIHJlc291cmNlcywgbm9kZSwgaW5zdHJ1Y3Rpb24sIHBhcmVudE5vZGUpO1xuICAgICAgICAgIHByb3ZpZGVycy5wdXNoKGluc3RydWN0aW9uLnR5cGUudGFyZ2V0KTtcbiAgICAgICAgICBza2lwQ29udGVudFByb2Nlc3NpbmcgPSBza2lwQ29udGVudFByb2Nlc3NpbmcgfHwgaW5zdHJ1Y3Rpb24uc2tpcENvbnRlbnRQcm9jZXNzaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2ldO1xuICAgICAgICAgIGlmIChleHByZXNzaW9uLmF0dHJUb1JlbW92ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShleHByZXNzaW9uLmF0dHJUb1JlbW92ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXVUYXJnZXRJRCA9IG1ha2VJbnRvSW5zdHJ1Y3Rpb25UYXJnZXQobm9kZSk7XG4gICAgICAgIGluc3RydWN0aW9uc1thdVRhcmdldElEXSA9IFRhcmdldEluc3RydWN0aW9uLm5vcm1hbChpbmplY3RvcklkLCBwYXJlbnRJbmplY3RvcklkLCBwcm92aWRlcnMsIGJlaGF2aW9ySW5zdHJ1Y3Rpb25zLCBleHByZXNzaW9ucywgZWxlbWVudEluc3RydWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNraXBDb250ZW50UHJvY2Vzc2luZykge1xuICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgIHdoaWxlIChjdXJyZW50Q2hpbGQpIHtcbiAgICAgICAgY3VycmVudENoaWxkID0gdGhpcy5fY29tcGlsZU5vZGUoY3VycmVudENoaWxkLCByZXNvdXJjZXMsIGluc3RydWN0aW9ucywgbm9kZSwgaW5qZWN0b3JJZCB8fCBwYXJlbnRJbmplY3RvcklkLCB0YXJnZXRMaWdodERPTSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gIH07XG5cbiAgVmlld0NvbXBpbGVyLnByb3RvdHlwZS5fY29uZmlndXJlUHJvcGVydGllcyA9IGZ1bmN0aW9uIF9jb25maWd1cmVQcm9wZXJ0aWVzKGluc3RydWN0aW9uLCByZXNvdXJjZXMpIHtcbiAgICB2YXIgdHlwZSA9IGluc3RydWN0aW9uLnR5cGU7XG4gICAgdmFyIGF0dHJOYW1lID0gaW5zdHJ1Y3Rpb24uYXR0ck5hbWU7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBpbnN0cnVjdGlvbi5hdHRyaWJ1dGVzO1xuICAgIHZhciBwcm9wZXJ0eSA9IHZvaWQgMDtcbiAgICB2YXIga2V5ID0gdm9pZCAwO1xuICAgIHZhciB2YWx1ZSA9IHZvaWQgMDtcblxuICAgIHZhciBrbm93bkF0dHJpYnV0ZSA9IHJlc291cmNlcy5tYXBBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgIGlmIChrbm93bkF0dHJpYnV0ZSAmJiBhdHRyTmFtZSBpbiBhdHRyaWJ1dGVzICYmIGtub3duQXR0cmlidXRlICE9PSBhdHRyTmFtZSkge1xuICAgICAgYXR0cmlidXRlc1trbm93bkF0dHJpYnV0ZV0gPSBhdHRyaWJ1dGVzW2F0dHJOYW1lXTtcbiAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzW2F0dHJOYW1lXTtcbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XTtcblxuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbHVlKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHByb3BlcnR5ID0gdHlwZS5hdHRyaWJ1dGVzW2tleV07XG5cbiAgICAgICAgaWYgKHByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZS50YXJnZXRQcm9wZXJ0eSA9IHByb3BlcnR5Lm5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUudGFyZ2V0UHJvcGVydHkgPSBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFZpZXdDb21waWxlcjtcbn0oKTtcblxuZXhwb3J0IHZhciBSZXNvdXJjZU1vZHVsZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVzb3VyY2VNb2R1bGUobW9kdWxlSWQpIHtcbiAgICBcblxuICAgIHRoaXMuaWQgPSBtb2R1bGVJZDtcbiAgICB0aGlzLm1vZHVsZUluc3RhbmNlID0gbnVsbDtcbiAgICB0aGlzLm1haW5SZXNvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSBudWxsO1xuICAgIHRoaXMudmlld1N0cmF0ZWd5ID0gbnVsbDtcbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9uTG9hZGVkID0gbnVsbDtcbiAgICB0aGlzLmxvYWRDb250ZXh0ID0gbnVsbDtcbiAgfVxuXG4gIFJlc291cmNlTW9kdWxlLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gaW5pdGlhbGl6ZShjb250YWluZXIpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMubWFpblJlc291cmNlO1xuICAgIHZhciByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcbiAgICB2YXIgdnMgPSB0aGlzLnZpZXdTdHJhdGVneTtcblxuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3VycmVudC5tZXRhZGF0YS52aWV3U3RyYXRlZ3kgPSB2cztcbiAgICAgIGN1cnJlbnQuaW5pdGlhbGl6ZShjb250YWluZXIpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJlc291cmNlcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjdXJyZW50ID0gcmVzb3VyY2VzW2ldO1xuICAgICAgY3VycmVudC5tZXRhZGF0YS52aWV3U3RyYXRlZ3kgPSB2cztcbiAgICAgIGN1cnJlbnQuaW5pdGlhbGl6ZShjb250YWluZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZXNvdXJjZU1vZHVsZS5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3RlcihyZWdpc3RyeSwgbmFtZSkge1xuICAgIHZhciBtYWluID0gdGhpcy5tYWluUmVzb3VyY2U7XG4gICAgdmFyIHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG4gICAgaWYgKG1haW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWFpbi5yZWdpc3RlcihyZWdpc3RyeSwgbmFtZSk7XG4gICAgICBuYW1lID0gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZXNvdXJjZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgcmVzb3VyY2VzW2ldLnJlZ2lzdGVyKHJlZ2lzdHJ5LCBuYW1lKTtcbiAgICAgIG5hbWUgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBSZXNvdXJjZU1vZHVsZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQoY29udGFpbmVyLCBsb2FkQ29udGV4dCkge1xuICAgIGlmICh0aGlzLm9uTG9hZGVkICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkQ29udGV4dCA9PT0gbG9hZENvbnRleHQgPyBQcm9taXNlLnJlc29sdmUoKSA6IHRoaXMub25Mb2FkZWQ7XG4gICAgfVxuXG4gICAgdmFyIG1haW4gPSB0aGlzLm1haW5SZXNvdXJjZTtcbiAgICB2YXIgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG4gICAgdmFyIGxvYWRzID0gdm9pZCAwO1xuXG4gICAgaWYgKG1haW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9hZHMgPSBuZXcgQXJyYXkocmVzb3VyY2VzLmxlbmd0aCArIDEpO1xuICAgICAgbG9hZHNbMF0gPSBtYWluLmxvYWQoY29udGFpbmVyLCBsb2FkQ29udGV4dCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZXNvdXJjZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBsb2Fkc1tpICsgMV0gPSByZXNvdXJjZXNbaV0ubG9hZChjb250YWluZXIsIGxvYWRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZHMgPSBuZXcgQXJyYXkocmVzb3VyY2VzLmxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwLCBfaWkgPSByZXNvdXJjZXMubGVuZ3RoOyBfaTIgPCBfaWk7ICsrX2kyKSB7XG4gICAgICAgIGxvYWRzW19pMl0gPSByZXNvdXJjZXNbX2kyXS5sb2FkKGNvbnRhaW5lciwgbG9hZENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubG9hZENvbnRleHQgPSBsb2FkQ29udGV4dDtcbiAgICB0aGlzLm9uTG9hZGVkID0gUHJvbWlzZS5hbGwobG9hZHMpO1xuICAgIHJldHVybiB0aGlzLm9uTG9hZGVkO1xuICB9O1xuXG4gIHJldHVybiBSZXNvdXJjZU1vZHVsZTtcbn0oKTtcblxuZXhwb3J0IHZhciBSZXNvdXJjZURlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBSZXNvdXJjZURlc2NyaXB0aW9uKGtleSwgZXhwb3J0ZWRWYWx1ZSwgcmVzb3VyY2VUeXBlTWV0YSkge1xuICAgIFxuXG4gICAgaWYgKCFyZXNvdXJjZVR5cGVNZXRhKSB7XG4gICAgICByZXNvdXJjZVR5cGVNZXRhID0gbWV0YWRhdGEuZ2V0KG1ldGFkYXRhLnJlc291cmNlLCBleHBvcnRlZFZhbHVlKTtcblxuICAgICAgaWYgKCFyZXNvdXJjZVR5cGVNZXRhKSB7XG4gICAgICAgIHJlc291cmNlVHlwZU1ldGEgPSBuZXcgSHRtbEJlaGF2aW9yUmVzb3VyY2UoKTtcbiAgICAgICAgcmVzb3VyY2VUeXBlTWV0YS5lbGVtZW50TmFtZSA9IF9oeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCByZXNvdXJjZVR5cGVNZXRhLCBleHBvcnRlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2VUeXBlTWV0YSBpbnN0YW5jZW9mIEh0bWxCZWhhdmlvclJlc291cmNlKSB7XG4gICAgICBpZiAocmVzb3VyY2VUeXBlTWV0YS5lbGVtZW50TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlVHlwZU1ldGEuZWxlbWVudE5hbWUgPSBfaHlwaGVuYXRlKGtleSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc291cmNlVHlwZU1ldGEuYXR0cmlidXRlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlVHlwZU1ldGEuYXR0cmlidXRlTmFtZSA9IF9oeXBoZW5hdGUoa2V5KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VUeXBlTWV0YS5hdHRyaWJ1dGVOYW1lID09PSBudWxsICYmIHJlc291cmNlVHlwZU1ldGEuZWxlbWVudE5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihrZXksIHJlc291cmNlVHlwZU1ldGEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXJlc291cmNlVHlwZU1ldGEubmFtZSkge1xuICAgICAgcmVzb3VyY2VUeXBlTWV0YS5uYW1lID0gX2h5cGhlbmF0ZShrZXkpO1xuICAgIH1cblxuICAgIHRoaXMubWV0YWRhdGEgPSByZXNvdXJjZVR5cGVNZXRhO1xuICAgIHRoaXMudmFsdWUgPSBleHBvcnRlZFZhbHVlO1xuICB9XG5cbiAgUmVzb3VyY2VEZXNjcmlwdGlvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIGluaXRpYWxpemUoY29udGFpbmVyKSB7XG4gICAgdGhpcy5tZXRhZGF0YS5pbml0aWFsaXplKGNvbnRhaW5lciwgdGhpcy52YWx1ZSk7XG4gIH07XG5cbiAgUmVzb3VyY2VEZXNjcmlwdGlvbi5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3RlcihyZWdpc3RyeSwgbmFtZSkge1xuICAgIHRoaXMubWV0YWRhdGEucmVnaXN0ZXIocmVnaXN0cnksIG5hbWUpO1xuICB9O1xuXG4gIFJlc291cmNlRGVzY3JpcHRpb24ucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiBsb2FkKGNvbnRhaW5lciwgbG9hZENvbnRleHQpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YS5sb2FkKGNvbnRhaW5lciwgdGhpcy52YWx1ZSwgbG9hZENvbnRleHQpO1xuICB9O1xuXG4gIHJldHVybiBSZXNvdXJjZURlc2NyaXB0aW9uO1xufSgpO1xuXG5leHBvcnQgdmFyIE1vZHVsZUFuYWx5emVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNb2R1bGVBbmFseXplcigpIHtcbiAgICBcblxuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgTW9kdWxlQW5hbHl6ZXIucHJvdG90eXBlLmdldEFuYWx5c2lzID0gZnVuY3Rpb24gZ2V0QW5hbHlzaXMobW9kdWxlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVttb2R1bGVJZF07XG4gIH07XG5cbiAgTW9kdWxlQW5hbHl6ZXIucHJvdG90eXBlLmFuYWx5emUgPSBmdW5jdGlvbiBhbmFseXplKG1vZHVsZUlkLCBtb2R1bGVJbnN0YW5jZSwgbWFpblJlc291cmNlS2V5KSB7XG4gICAgdmFyIG1haW5SZXNvdXJjZSA9IHZvaWQgMDtcbiAgICB2YXIgZmFsbGJhY2tWYWx1ZSA9IHZvaWQgMDtcbiAgICB2YXIgZmFsbGJhY2tLZXkgPSB2b2lkIDA7XG4gICAgdmFyIHJlc291cmNlVHlwZU1ldGEgPSB2b2lkIDA7XG4gICAgdmFyIGtleSA9IHZvaWQgMDtcbiAgICB2YXIgZXhwb3J0ZWRWYWx1ZSA9IHZvaWQgMDtcbiAgICB2YXIgcmVzb3VyY2VzID0gW107XG4gICAgdmFyIGNvbnZlbnRpb25hbCA9IHZvaWQgMDtcbiAgICB2YXIgdnMgPSB2b2lkIDA7XG4gICAgdmFyIHJlc291cmNlTW9kdWxlID0gdm9pZCAwO1xuXG4gICAgcmVzb3VyY2VNb2R1bGUgPSB0aGlzLmNhY2hlW21vZHVsZUlkXTtcbiAgICBpZiAocmVzb3VyY2VNb2R1bGUpIHtcbiAgICAgIHJldHVybiByZXNvdXJjZU1vZHVsZTtcbiAgICB9XG5cbiAgICByZXNvdXJjZU1vZHVsZSA9IG5ldyBSZXNvdXJjZU1vZHVsZShtb2R1bGVJZCk7XG4gICAgdGhpcy5jYWNoZVttb2R1bGVJZF0gPSByZXNvdXJjZU1vZHVsZTtcblxuICAgIGlmICh0eXBlb2YgbW9kdWxlSW5zdGFuY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1vZHVsZUluc3RhbmNlID0geyAnZGVmYXVsdCc6IG1vZHVsZUluc3RhbmNlIH07XG4gICAgfVxuXG4gICAgaWYgKG1haW5SZXNvdXJjZUtleSkge1xuICAgICAgbWFpblJlc291cmNlID0gbmV3IFJlc291cmNlRGVzY3JpcHRpb24obWFpblJlc291cmNlS2V5LCBtb2R1bGVJbnN0YW5jZVttYWluUmVzb3VyY2VLZXldKTtcbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBtb2R1bGVJbnN0YW5jZSkge1xuICAgICAgZXhwb3J0ZWRWYWx1ZSA9IG1vZHVsZUluc3RhbmNlW2tleV07XG5cbiAgICAgIGlmIChrZXkgPT09IG1haW5SZXNvdXJjZUtleSB8fCB0eXBlb2YgZXhwb3J0ZWRWYWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcmVzb3VyY2VUeXBlTWV0YSA9IG1ldGFkYXRhLmdldChtZXRhZGF0YS5yZXNvdXJjZSwgZXhwb3J0ZWRWYWx1ZSk7XG5cbiAgICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhKSB7XG4gICAgICAgIGlmIChyZXNvdXJjZVR5cGVNZXRhIGluc3RhbmNlb2YgSHRtbEJlaGF2aW9yUmVzb3VyY2UpIHtcbiAgICAgICAgICBWaWV3UmVzb3VyY2VzLmNvbnZlbnRpb24oZXhwb3J0ZWRWYWx1ZSwgcmVzb3VyY2VUeXBlTWV0YSk7XG5cbiAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlTWV0YS5hdHRyaWJ1dGVOYW1lID09PSBudWxsICYmIHJlc291cmNlVHlwZU1ldGEuZWxlbWVudE5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIEh0bWxCZWhhdmlvclJlc291cmNlLmNvbnZlbnRpb24oa2V5LCByZXNvdXJjZVR5cGVNZXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlTWV0YS5hdHRyaWJ1dGVOYW1lID09PSBudWxsICYmIHJlc291cmNlVHlwZU1ldGEuZWxlbWVudE5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc291cmNlVHlwZU1ldGEuZWxlbWVudE5hbWUgPSBfaHlwaGVuYXRlKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtYWluUmVzb3VyY2UgJiYgcmVzb3VyY2VUeXBlTWV0YSBpbnN0YW5jZW9mIEh0bWxCZWhhdmlvclJlc291cmNlICYmIHJlc291cmNlVHlwZU1ldGEuZWxlbWVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICBtYWluUmVzb3VyY2UgPSBuZXcgUmVzb3VyY2VEZXNjcmlwdGlvbihrZXksIGV4cG9ydGVkVmFsdWUsIHJlc291cmNlVHlwZU1ldGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc291cmNlcy5wdXNoKG5ldyBSZXNvdXJjZURlc2NyaXB0aW9uKGtleSwgZXhwb3J0ZWRWYWx1ZSwgcmVzb3VyY2VUeXBlTWV0YSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHZpZXdTdHJhdGVneS5kZWNvcmF0ZXMoZXhwb3J0ZWRWYWx1ZSkpIHtcbiAgICAgICAgdnMgPSBleHBvcnRlZFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChleHBvcnRlZFZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWdpc3RyeUVudHJ5KSB7XG4gICAgICAgIHZzID0gbmV3IFRlbXBsYXRlUmVnaXN0cnlWaWV3U3RyYXRlZ3kobW9kdWxlSWQsIGV4cG9ydGVkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnZlbnRpb25hbCA9IFZpZXdSZXNvdXJjZXMuY29udmVudGlvbihleHBvcnRlZFZhbHVlKSkge1xuICAgICAgICAgIGlmIChjb252ZW50aW9uYWwuZWxlbWVudE5hbWUgIT09IG51bGwgJiYgIW1haW5SZXNvdXJjZSkge1xuICAgICAgICAgICAgbWFpblJlc291cmNlID0gbmV3IFJlc291cmNlRGVzY3JpcHRpb24oa2V5LCBleHBvcnRlZFZhbHVlLCBjb252ZW50aW9uYWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvdXJjZXMucHVzaChuZXcgUmVzb3VyY2VEZXNjcmlwdGlvbihrZXksIGV4cG9ydGVkVmFsdWUsIGNvbnZlbnRpb25hbCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtZXRhZGF0YS5kZWZpbmUobWV0YWRhdGEucmVzb3VyY2UsIGNvbnZlbnRpb25hbCwgZXhwb3J0ZWRWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udmVudGlvbmFsID0gSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbihrZXkpKSB7XG4gICAgICAgICAgaWYgKGNvbnZlbnRpb25hbC5lbGVtZW50TmFtZSAhPT0gbnVsbCAmJiAhbWFpblJlc291cmNlKSB7XG4gICAgICAgICAgICBtYWluUmVzb3VyY2UgPSBuZXcgUmVzb3VyY2VEZXNjcmlwdGlvbihrZXksIGV4cG9ydGVkVmFsdWUsIGNvbnZlbnRpb25hbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlcy5wdXNoKG5ldyBSZXNvdXJjZURlc2NyaXB0aW9uKGtleSwgZXhwb3J0ZWRWYWx1ZSwgY29udmVudGlvbmFsKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBjb252ZW50aW9uYWwsIGV4cG9ydGVkVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnZlbnRpb25hbCA9IFZhbHVlQ29udmVydGVyUmVzb3VyY2UuY29udmVudGlvbihrZXkpIHx8IEJpbmRpbmdCZWhhdmlvclJlc291cmNlLmNvbnZlbnRpb24oa2V5KSB8fCBWaWV3RW5naW5lSG9va3NSZXNvdXJjZS5jb252ZW50aW9uKGtleSkpIHtcbiAgICAgICAgICByZXNvdXJjZXMucHVzaChuZXcgUmVzb3VyY2VEZXNjcmlwdGlvbihrZXksIGV4cG9ydGVkVmFsdWUsIGNvbnZlbnRpb25hbCkpO1xuICAgICAgICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5yZXNvdXJjZSwgY29udmVudGlvbmFsLCBleHBvcnRlZFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghZmFsbGJhY2tWYWx1ZSkge1xuICAgICAgICAgIGZhbGxiYWNrVmFsdWUgPSBleHBvcnRlZFZhbHVlO1xuICAgICAgICAgIGZhbGxiYWNrS2V5ID0ga2V5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtYWluUmVzb3VyY2UgJiYgZmFsbGJhY2tWYWx1ZSkge1xuICAgICAgbWFpblJlc291cmNlID0gbmV3IFJlc291cmNlRGVzY3JpcHRpb24oZmFsbGJhY2tLZXksIGZhbGxiYWNrVmFsdWUpO1xuICAgIH1cblxuICAgIHJlc291cmNlTW9kdWxlLm1vZHVsZUluc3RhbmNlID0gbW9kdWxlSW5zdGFuY2U7XG4gICAgcmVzb3VyY2VNb2R1bGUubWFpblJlc291cmNlID0gbWFpblJlc291cmNlO1xuICAgIHJlc291cmNlTW9kdWxlLnJlc291cmNlcyA9IHJlc291cmNlcztcbiAgICByZXNvdXJjZU1vZHVsZS52aWV3U3RyYXRlZ3kgPSB2cztcblxuICAgIHJldHVybiByZXNvdXJjZU1vZHVsZTtcbiAgfTtcblxuICByZXR1cm4gTW9kdWxlQW5hbHl6ZXI7XG59KCk7XG5cbnZhciBsb2dnZXIgPSBMb2dNYW5hZ2VyLmdldExvZ2dlcigndGVtcGxhdGluZycpO1xuXG5mdW5jdGlvbiBlbnN1cmVSZWdpc3RyeUVudHJ5KGxvYWRlciwgdXJsT3JSZWdpc3RyeUVudHJ5KSB7XG4gIGlmICh1cmxPclJlZ2lzdHJ5RW50cnkgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZ2lzdHJ5RW50cnkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVybE9yUmVnaXN0cnlFbnRyeSk7XG4gIH1cblxuICByZXR1cm4gbG9hZGVyLmxvYWRUZW1wbGF0ZSh1cmxPclJlZ2lzdHJ5RW50cnkpO1xufVxuXG52YXIgUHJveHlWaWV3RmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUHJveHlWaWV3RmFjdG9yeShwcm9taXNlKSB7XG4gICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICBcblxuICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIF90aGlzOC52aWV3RmFjdG9yeSA9IHg7XG4gICAgfSk7XG4gIH1cblxuICBQcm94eVZpZXdGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoY29udGFpbmVyLCBiaW5kaW5nQ29udGV4dCwgY3JlYXRlSW5zdHJ1Y3Rpb24sIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3RmFjdG9yeS5jcmVhdGUoY29udGFpbmVyLCBiaW5kaW5nQ29udGV4dCwgY3JlYXRlSW5zdHJ1Y3Rpb24sIGVsZW1lbnQpO1xuICB9O1xuXG4gIFByb3h5Vmlld0ZhY3RvcnkucHJvdG90eXBlLnNldENhY2hlU2l6ZSA9IGZ1bmN0aW9uIHNldENhY2hlU2l6ZShzaXplLCBkb05vdE92ZXJyaWRlSWZBbHJlYWR5U2V0KSB7XG4gICAgdGhpcy52aWV3RmFjdG9yeS5zZXRDYWNoZVNpemUoc2l6ZSwgZG9Ob3RPdmVycmlkZUlmQWxyZWFkeVNldCk7XG4gIH07XG5cbiAgUHJveHlWaWV3RmFjdG9yeS5wcm90b3R5cGUuZ2V0Q2FjaGVkVmlldyA9IGZ1bmN0aW9uIGdldENhY2hlZFZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld0ZhY3RvcnkuZ2V0Q2FjaGVkVmlldygpO1xuICB9O1xuXG4gIFByb3h5Vmlld0ZhY3RvcnkucHJvdG90eXBlLnJldHVyblZpZXdUb0NhY2hlID0gZnVuY3Rpb24gcmV0dXJuVmlld1RvQ2FjaGUodmlldykge1xuICAgIHRoaXMudmlld0ZhY3RvcnkucmV0dXJuVmlld1RvQ2FjaGUodmlldyk7XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKFByb3h5Vmlld0ZhY3RvcnksIFt7XG4gICAga2V5OiAnaXNDYWNoaW5nJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZpZXdGYWN0b3J5LmlzQ2FjaGluZztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUHJveHlWaWV3RmFjdG9yeTtcbn0oKTtcblxudmFyIGF1U2xvdEJlaGF2aW9yID0gbnVsbDtcblxuZXhwb3J0IHZhciBWaWV3RW5naW5lID0gKF90ZW1wNSA9IF9jbGFzczE0ID0gZnVuY3Rpb24gKCkge1xuICBWaWV3RW5naW5lLmluamVjdCA9IGZ1bmN0aW9uIGluamVjdCgpIHtcbiAgICByZXR1cm4gW0xvYWRlciwgQ29udGFpbmVyLCBWaWV3Q29tcGlsZXIsIE1vZHVsZUFuYWx5emVyLCBWaWV3UmVzb3VyY2VzXTtcbiAgfTtcblxuICBmdW5jdGlvbiBWaWV3RW5naW5lKGxvYWRlciwgY29udGFpbmVyLCB2aWV3Q29tcGlsZXIsIG1vZHVsZUFuYWx5emVyLCBhcHBSZXNvdXJjZXMpIHtcbiAgICBcblxuICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMudmlld0NvbXBpbGVyID0gdmlld0NvbXBpbGVyO1xuICAgIHRoaXMubW9kdWxlQW5hbHl6ZXIgPSBtb2R1bGVBbmFseXplcjtcbiAgICB0aGlzLmFwcFJlc291cmNlcyA9IGFwcFJlc291cmNlcztcbiAgICB0aGlzLl9wbHVnaW5NYXAgPSB7fTtcblxuICAgIGlmIChhdVNsb3RCZWhhdmlvciA9PT0gbnVsbCkge1xuICAgICAgYXVTbG90QmVoYXZpb3IgPSBuZXcgSHRtbEJlaGF2aW9yUmVzb3VyY2UoKTtcbiAgICAgIGF1U2xvdEJlaGF2aW9yLmF0dHJpYnV0ZU5hbWUgPSAnYXUtc2xvdCc7XG4gICAgICBtZXRhZGF0YS5kZWZpbmUobWV0YWRhdGEucmVzb3VyY2UsIGF1U2xvdEJlaGF2aW9yLCBTbG90Q3VzdG9tQXR0cmlidXRlKTtcbiAgICB9XG5cbiAgICBhdVNsb3RCZWhhdmlvci5pbml0aWFsaXplKGNvbnRhaW5lciwgU2xvdEN1c3RvbUF0dHJpYnV0ZSk7XG4gICAgYXVTbG90QmVoYXZpb3IucmVnaXN0ZXIoYXBwUmVzb3VyY2VzKTtcbiAgfVxuXG4gIFZpZXdFbmdpbmUucHJvdG90eXBlLmFkZFJlc291cmNlUGx1Z2luID0gZnVuY3Rpb24gYWRkUmVzb3VyY2VQbHVnaW4oZXh0ZW5zaW9uLCBpbXBsZW1lbnRhdGlvbikge1xuICAgIHZhciBuYW1lID0gZXh0ZW5zaW9uLnJlcGxhY2UoJy4nLCAnJykgKyAnLXJlc291cmNlLXBsdWdpbic7XG4gICAgdGhpcy5fcGx1Z2luTWFwW2V4dGVuc2lvbl0gPSBuYW1lO1xuICAgIHRoaXMubG9hZGVyLmFkZFBsdWdpbihuYW1lLCBpbXBsZW1lbnRhdGlvbik7XG4gIH07XG5cbiAgVmlld0VuZ2luZS5wcm90b3R5cGUubG9hZFZpZXdGYWN0b3J5ID0gZnVuY3Rpb24gbG9hZFZpZXdGYWN0b3J5KHVybE9yUmVnaXN0cnlFbnRyeSwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KSB7XG4gICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICBsb2FkQ29udGV4dCA9IGxvYWRDb250ZXh0IHx8IG5ldyBSZXNvdXJjZUxvYWRDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gZW5zdXJlUmVnaXN0cnlFbnRyeSh0aGlzLmxvYWRlciwgdXJsT3JSZWdpc3RyeUVudHJ5KS50aGVuKGZ1bmN0aW9uIChyZWdpc3RyeUVudHJ5KSB7XG4gICAgICB2YXIgdXJsID0gcmVnaXN0cnlFbnRyeS5hZGRyZXNzO1xuXG4gICAgICBpZiAocmVnaXN0cnlFbnRyeS5vblJlYWR5KSB7XG4gICAgICAgIGlmICghbG9hZENvbnRleHQuaGFzRGVwZW5kZW5jeSh1cmwpKSB7XG4gICAgICAgICAgbG9hZENvbnRleHQuYWRkRGVwZW5kZW5jeSh1cmwpO1xuICAgICAgICAgIHJldHVybiByZWdpc3RyeUVudHJ5Lm9uUmVhZHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVnaXN0cnlFbnRyeS50ZW1wbGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZWdpc3RyeUVudHJ5Lm9uUmVhZHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBQcm94eVZpZXdGYWN0b3J5KHJlZ2lzdHJ5RW50cnkub25SZWFkeSkpO1xuICAgICAgfVxuXG4gICAgICBsb2FkQ29udGV4dC5hZGREZXBlbmRlbmN5KHVybCk7XG5cbiAgICAgIHJlZ2lzdHJ5RW50cnkub25SZWFkeSA9IF90aGlzOS5sb2FkVGVtcGxhdGVSZXNvdXJjZXMocmVnaXN0cnlFbnRyeSwgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCwgdGFyZ2V0KS50aGVuKGZ1bmN0aW9uIChyZXNvdXJjZXMpIHtcbiAgICAgICAgcmVnaXN0cnlFbnRyeS5yZXNvdXJjZXMgPSByZXNvdXJjZXM7XG5cbiAgICAgICAgaWYgKHJlZ2lzdHJ5RW50cnkudGVtcGxhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVnaXN0cnlFbnRyeS5mYWN0b3J5ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2aWV3RmFjdG9yeSA9IF90aGlzOS52aWV3Q29tcGlsZXIuY29tcGlsZShyZWdpc3RyeUVudHJ5LnRlbXBsYXRlLCByZXNvdXJjZXMsIGNvbXBpbGVJbnN0cnVjdGlvbik7XG4gICAgICAgIHJldHVybiByZWdpc3RyeUVudHJ5LmZhY3RvcnkgPSB2aWV3RmFjdG9yeTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVnaXN0cnlFbnRyeS5vblJlYWR5O1xuICAgIH0pO1xuICB9O1xuXG4gIFZpZXdFbmdpbmUucHJvdG90eXBlLmxvYWRUZW1wbGF0ZVJlc291cmNlcyA9IGZ1bmN0aW9uIGxvYWRUZW1wbGF0ZVJlc291cmNlcyhyZWdpc3RyeUVudHJ5LCBjb21waWxlSW5zdHJ1Y3Rpb24sIGxvYWRDb250ZXh0LCB0YXJnZXQpIHtcbiAgICB2YXIgcmVzb3VyY2VzID0gbmV3IFZpZXdSZXNvdXJjZXModGhpcy5hcHBSZXNvdXJjZXMsIHJlZ2lzdHJ5RW50cnkuYWRkcmVzcyk7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IHJlZ2lzdHJ5RW50cnkuZGVwZW5kZW5jaWVzO1xuICAgIHZhciBpbXBvcnRJZHMgPSB2b2lkIDA7XG4gICAgdmFyIG5hbWVzID0gdm9pZCAwO1xuXG4gICAgY29tcGlsZUluc3RydWN0aW9uID0gY29tcGlsZUluc3RydWN0aW9uIHx8IFZpZXdDb21waWxlSW5zdHJ1Y3Rpb24ubm9ybWFsO1xuXG4gICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPT09IDAgJiYgIWNvbXBpbGVJbnN0cnVjdGlvbi5hc3NvY2lhdGVkTW9kdWxlSWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBpbXBvcnRJZHMgPSBkZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zcmM7XG4gICAgfSk7XG4gICAgbmFtZXMgPSBkZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5uYW1lO1xuICAgIH0pO1xuICAgIGxvZ2dlci5kZWJ1ZygnaW1wb3J0aW5nIHJlc291cmNlcyBmb3IgJyArIHJlZ2lzdHJ5RW50cnkuYWRkcmVzcywgaW1wb3J0SWRzKTtcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHZhciB2aWV3TW9kZWxSZXF1aXJlcyA9IG1ldGFkYXRhLmdldChWaWV3RW5naW5lLnZpZXdNb2RlbFJlcXVpcmVNZXRhZGF0YUtleSwgdGFyZ2V0KTtcbiAgICAgIGlmICh2aWV3TW9kZWxSZXF1aXJlcykge1xuICAgICAgICB2YXIgdGVtcGxhdGVJbXBvcnRDb3VudCA9IGltcG9ydElkcy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHZpZXdNb2RlbFJlcXVpcmVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICB2YXIgcmVxID0gdmlld01vZGVsUmVxdWlyZXNbaV07XG4gICAgICAgICAgdmFyIGltcG9ydElkID0gdHlwZW9mIHJlcSA9PT0gJ2Z1bmN0aW9uJyA/IE9yaWdpbi5nZXQocmVxKS5tb2R1bGVJZCA6IHJlbGF0aXZlVG9GaWxlKHJlcS5zcmMgfHwgcmVxLCByZWdpc3RyeUVudHJ5LmFkZHJlc3MpO1xuXG4gICAgICAgICAgaWYgKGltcG9ydElkcy5pbmRleE9mKGltcG9ydElkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGltcG9ydElkcy5wdXNoKGltcG9ydElkKTtcbiAgICAgICAgICAgIG5hbWVzLnB1c2gocmVxLmFzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdpbXBvcnRpbmcgVmlld01vZGVsIHJlc291cmNlcyBmb3IgJyArIGNvbXBpbGVJbnN0cnVjdGlvbi5hc3NvY2lhdGVkTW9kdWxlSWQsIGltcG9ydElkcy5zbGljZSh0ZW1wbGF0ZUltcG9ydENvdW50KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0Vmlld1Jlc291cmNlcyhpbXBvcnRJZHMsIG5hbWVzLCByZXNvdXJjZXMsIGNvbXBpbGVJbnN0cnVjdGlvbiwgbG9hZENvbnRleHQpO1xuICB9O1xuXG4gIFZpZXdFbmdpbmUucHJvdG90eXBlLmltcG9ydFZpZXdNb2RlbFJlc291cmNlID0gZnVuY3Rpb24gaW1wb3J0Vmlld01vZGVsUmVzb3VyY2UobW9kdWxlSW1wb3J0LCBtb2R1bGVNZW1iZXIpIHtcbiAgICB2YXIgX3RoaXMxMCA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkZXIubG9hZE1vZHVsZShtb2R1bGVJbXBvcnQpLnRoZW4oZnVuY3Rpb24gKHZpZXdNb2RlbE1vZHVsZSkge1xuICAgICAgdmFyIG5vcm1hbGl6ZWRJZCA9IE9yaWdpbi5nZXQodmlld01vZGVsTW9kdWxlKS5tb2R1bGVJZDtcbiAgICAgIHZhciByZXNvdXJjZU1vZHVsZSA9IF90aGlzMTAubW9kdWxlQW5hbHl6ZXIuYW5hbHl6ZShub3JtYWxpemVkSWQsIHZpZXdNb2RlbE1vZHVsZSwgbW9kdWxlTWVtYmVyKTtcblxuICAgICAgaWYgKCFyZXNvdXJjZU1vZHVsZS5tYWluUmVzb3VyY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWV3IG1vZGVsIGZvdW5kIGluIG1vZHVsZSBcIicgKyBtb2R1bGVJbXBvcnQgKyAnXCIuJyk7XG4gICAgICB9XG5cbiAgICAgIHJlc291cmNlTW9kdWxlLmluaXRpYWxpemUoX3RoaXMxMC5jb250YWluZXIpO1xuXG4gICAgICByZXR1cm4gcmVzb3VyY2VNb2R1bGUubWFpblJlc291cmNlO1xuICAgIH0pO1xuICB9O1xuXG4gIFZpZXdFbmdpbmUucHJvdG90eXBlLmltcG9ydFZpZXdSZXNvdXJjZXMgPSBmdW5jdGlvbiBpbXBvcnRWaWV3UmVzb3VyY2VzKG1vZHVsZUlkcywgbmFtZXMsIHJlc291cmNlcywgY29tcGlsZUluc3RydWN0aW9uLCBsb2FkQ29udGV4dCkge1xuICAgIHZhciBfdGhpczExID0gdGhpcztcblxuICAgIGxvYWRDb250ZXh0ID0gbG9hZENvbnRleHQgfHwgbmV3IFJlc291cmNlTG9hZENvbnRleHQoKTtcbiAgICBjb21waWxlSW5zdHJ1Y3Rpb24gPSBjb21waWxlSW5zdHJ1Y3Rpb24gfHwgVmlld0NvbXBpbGVJbnN0cnVjdGlvbi5ub3JtYWw7XG5cbiAgICBtb2R1bGVJZHMgPSBtb2R1bGVJZHMubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gX3RoaXMxMS5fYXBwbHlMb2FkZXJQbHVnaW4oeCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkZXIubG9hZEFsbE1vZHVsZXMobW9kdWxlSWRzKS50aGVuKGZ1bmN0aW9uIChpbXBvcnRzKSB7XG4gICAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICAgIHZhciBpaSA9IHZvaWQgMDtcbiAgICAgIHZhciBhbmFseXNpcyA9IHZvaWQgMDtcbiAgICAgIHZhciBub3JtYWxpemVkSWQgPSB2b2lkIDA7XG4gICAgICB2YXIgY3VycmVudCA9IHZvaWQgMDtcbiAgICAgIHZhciBhc3NvY2lhdGVkTW9kdWxlID0gdm9pZCAwO1xuICAgICAgdmFyIGNvbnRhaW5lciA9IF90aGlzMTEuY29udGFpbmVyO1xuICAgICAgdmFyIG1vZHVsZUFuYWx5emVyID0gX3RoaXMxMS5tb2R1bGVBbmFseXplcjtcbiAgICAgIHZhciBhbGxBbmFseXNpcyA9IG5ldyBBcnJheShpbXBvcnRzLmxlbmd0aCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gaW1wb3J0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGN1cnJlbnQgPSBpbXBvcnRzW2ldO1xuICAgICAgICBub3JtYWxpemVkSWQgPSBPcmlnaW4uZ2V0KGN1cnJlbnQpLm1vZHVsZUlkO1xuXG4gICAgICAgIGFuYWx5c2lzID0gbW9kdWxlQW5hbHl6ZXIuYW5hbHl6ZShub3JtYWxpemVkSWQsIGN1cnJlbnQpO1xuICAgICAgICBhbmFseXNpcy5pbml0aWFsaXplKGNvbnRhaW5lcik7XG4gICAgICAgIGFuYWx5c2lzLnJlZ2lzdGVyKHJlc291cmNlcywgbmFtZXNbaV0pO1xuXG4gICAgICAgIGFsbEFuYWx5c2lzW2ldID0gYW5hbHlzaXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21waWxlSW5zdHJ1Y3Rpb24uYXNzb2NpYXRlZE1vZHVsZUlkKSB7XG4gICAgICAgIGFzc29jaWF0ZWRNb2R1bGUgPSBtb2R1bGVBbmFseXplci5nZXRBbmFseXNpcyhjb21waWxlSW5zdHJ1Y3Rpb24uYXNzb2NpYXRlZE1vZHVsZUlkKTtcblxuICAgICAgICBpZiAoYXNzb2NpYXRlZE1vZHVsZSkge1xuICAgICAgICAgIGFzc29jaWF0ZWRNb2R1bGUucmVnaXN0ZXIocmVzb3VyY2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IGFsbEFuYWx5c2lzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgYWxsQW5hbHlzaXNbaV0gPSBhbGxBbmFseXNpc1tpXS5sb2FkKGNvbnRhaW5lciwgbG9hZENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYWxsQW5hbHlzaXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgVmlld0VuZ2luZS5wcm90b3R5cGUuX2FwcGx5TG9hZGVyUGx1Z2luID0gZnVuY3Rpb24gX2FwcGx5TG9hZGVyUGx1Z2luKGlkKSB7XG4gICAgdmFyIGluZGV4ID0gaWQubGFzdEluZGV4T2YoJy4nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB2YXIgZXh0ID0gaWQuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgIHZhciBwbHVnaW5OYW1lID0gdGhpcy5fcGx1Z2luTWFwW2V4dF07XG5cbiAgICAgIGlmIChwbHVnaW5OYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5sb2FkZXIuYXBwbHlQbHVnaW5Ub1VybChpZCwgcGx1Z2luTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9O1xuXG4gIHJldHVybiBWaWV3RW5naW5lO1xufSgpLCBfY2xhc3MxNC52aWV3TW9kZWxSZXF1aXJlTWV0YWRhdGFLZXkgPSAnYXVyZWxpYTp2aWV3LW1vZGVsLXJlcXVpcmUnLCBfdGVtcDUpO1xuXG5leHBvcnQgdmFyIENvbnRyb2xsZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbnRyb2xsZXIoYmVoYXZpb3IsIGluc3RydWN0aW9uLCB2aWV3TW9kZWwsIGNvbnRhaW5lcikge1xuICAgIFxuXG4gICAgdGhpcy5iZWhhdmlvciA9IGJlaGF2aW9yO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbjtcbiAgICB0aGlzLnZpZXdNb2RlbCA9IHZpZXdNb2RlbDtcbiAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xuICAgIHRoaXMuc2NvcGUgPSBudWxsO1xuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuZWxlbWVudEV2ZW50cyA9IGNvbnRhaW5lci5lbGVtZW50RXZlbnRzIHx8IG51bGw7XG5cbiAgICB2YXIgb2JzZXJ2ZXJMb29rdXAgPSBiZWhhdmlvci5vYnNlcnZlckxvY2F0b3IuZ2V0T3JDcmVhdGVPYnNlcnZlcnNMb29rdXAodmlld01vZGVsKTtcbiAgICB2YXIgaGFuZGxlc0JpbmQgPSBiZWhhdmlvci5oYW5kbGVzQmluZDtcbiAgICB2YXIgYXR0cmlidXRlcyA9IGluc3RydWN0aW9uLmF0dHJpYnV0ZXM7XG4gICAgdmFyIGJvdW5kUHJvcGVydGllcyA9IHRoaXMuYm91bmRQcm9wZXJ0aWVzID0gW107XG4gICAgdmFyIHByb3BlcnRpZXMgPSBiZWhhdmlvci5wcm9wZXJ0aWVzO1xuICAgIHZhciBpID0gdm9pZCAwO1xuICAgIHZhciBpaSA9IHZvaWQgMDtcblxuICAgIGJlaGF2aW9yLl9lbnN1cmVQcm9wZXJ0aWVzRGVmaW5lZCh2aWV3TW9kZWwsIG9ic2VydmVyTG9va3VwKTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBwcm9wZXJ0aWVzW2ldLl9pbml0aWFsaXplKHZpZXdNb2RlbCwgb2JzZXJ2ZXJMb29rdXAsIGF0dHJpYnV0ZXMsIGhhbmRsZXNCaW5kLCBib3VuZFByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIENvbnRyb2xsZXIucHJvdG90eXBlLmNyZWF0ZWQgPSBmdW5jdGlvbiBjcmVhdGVkKG93bmluZ1ZpZXcpIHtcbiAgICBpZiAodGhpcy5iZWhhdmlvci5oYW5kbGVzQ3JlYXRlZCkge1xuICAgICAgdGhpcy52aWV3TW9kZWwuY3JlYXRlZChvd25pbmdWaWV3LCB0aGlzLnZpZXcpO1xuICAgIH1cbiAgfTtcblxuICBDb250cm9sbGVyLnByb3RvdHlwZS5hdXRvbWF0ZSA9IGZ1bmN0aW9uIGF1dG9tYXRlKG92ZXJyaWRlQ29udGV4dCwgb3duaW5nVmlldykge1xuICAgIHRoaXMudmlldy5iaW5kaW5nQ29udGV4dCA9IHRoaXMudmlld01vZGVsO1xuICAgIHRoaXMudmlldy5vdmVycmlkZUNvbnRleHQgPSBvdmVycmlkZUNvbnRleHQgfHwgY3JlYXRlT3ZlcnJpZGVDb250ZXh0KHRoaXMudmlld01vZGVsKTtcbiAgICB0aGlzLnZpZXcuX2lzVXNlckNvbnRyb2xsZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuYmVoYXZpb3IuaGFuZGxlc0NyZWF0ZWQpIHtcbiAgICAgIHRoaXMudmlld01vZGVsLmNyZWF0ZWQob3duaW5nVmlldyB8fCBudWxsLCB0aGlzLnZpZXcpO1xuICAgIH1cblxuICAgIHRoaXMuYmluZCh0aGlzLnZpZXcpO1xuICB9O1xuXG4gIENvbnRyb2xsZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHNjb3BlKSB7XG4gICAgdmFyIHNraXBTZWxmU3Vic2NyaWJlciA9IHRoaXMuYmVoYXZpb3IuaGFuZGxlc0JpbmQ7XG4gICAgdmFyIGJvdW5kUHJvcGVydGllcyA9IHRoaXMuYm91bmRQcm9wZXJ0aWVzO1xuICAgIHZhciBpID0gdm9pZCAwO1xuICAgIHZhciBpaSA9IHZvaWQgMDtcbiAgICB2YXIgeCA9IHZvaWQgMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSB2b2lkIDA7XG4gICAgdmFyIHNlbGZTdWJzY3JpYmVyID0gdm9pZCAwO1xuXG4gICAgaWYgKHRoaXMuaXNCb3VuZCkge1xuICAgICAgaWYgKHRoaXMuc2NvcGUgPT09IHNjb3BlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bmJpbmQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gYm91bmRQcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHggPSBib3VuZFByb3BlcnRpZXNbaV07XG4gICAgICBvYnNlcnZlciA9IHgub2JzZXJ2ZXI7XG4gICAgICBzZWxmU3Vic2NyaWJlciA9IG9ic2VydmVyLnNlbGZTdWJzY3JpYmVyO1xuICAgICAgb2JzZXJ2ZXIucHVibGlzaGluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2tpcFNlbGZTdWJzY3JpYmVyKSB7XG4gICAgICAgIG9ic2VydmVyLnNlbGZTdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgeC5iaW5kaW5nLmJpbmQoc2NvcGUpO1xuICAgICAgb2JzZXJ2ZXIuY2FsbCgpO1xuXG4gICAgICBvYnNlcnZlci5wdWJsaXNoaW5nID0gdHJ1ZTtcbiAgICAgIG9ic2VydmVyLnNlbGZTdWJzY3JpYmVyID0gc2VsZlN1YnNjcmliZXI7XG4gICAgfVxuXG4gICAgdmFyIG92ZXJyaWRlQ29udGV4dCA9IHZvaWQgMDtcbiAgICBpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XG4gICAgICBpZiAoc2tpcFNlbGZTdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMudmlldy52aWV3TW9kZWxTY29wZSA9IHNjb3BlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy52aWV3TW9kZWwgPT09IHNjb3BlLm92ZXJyaWRlQ29udGV4dC5iaW5kaW5nQ29udGV4dCkge1xuICAgICAgICBvdmVycmlkZUNvbnRleHQgPSBzY29wZS5vdmVycmlkZUNvbnRleHQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5zdHJ1Y3Rpb24uaW5oZXJpdEJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgIG92ZXJyaWRlQ29udGV4dCA9IGNyZWF0ZU92ZXJyaWRlQ29udGV4dCh0aGlzLnZpZXdNb2RlbCwgc2NvcGUub3ZlcnJpZGVDb250ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG92ZXJyaWRlQ29udGV4dCA9IGNyZWF0ZU92ZXJyaWRlQ29udGV4dCh0aGlzLnZpZXdNb2RlbCk7XG4gICAgICAgIG92ZXJyaWRlQ29udGV4dC5fX3BhcmVudE92ZXJyaWRlQ29udGV4dCA9IHNjb3BlLm92ZXJyaWRlQ29udGV4dDtcbiAgICAgIH1cblxuICAgICAgdGhpcy52aWV3LmJpbmQodGhpcy52aWV3TW9kZWwsIG92ZXJyaWRlQ29udGV4dCk7XG4gICAgfSBlbHNlIGlmIChza2lwU2VsZlN1YnNjcmliZXIpIHtcbiAgICAgIG92ZXJyaWRlQ29udGV4dCA9IHNjb3BlLm92ZXJyaWRlQ29udGV4dDtcblxuICAgICAgaWYgKHNjb3BlLm92ZXJyaWRlQ29udGV4dC5fX3BhcmVudE92ZXJyaWRlQ29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmlld01vZGVsLnZpZXdGYWN0b3J5ICYmIHRoaXMudmlld01vZGVsLnZpZXdGYWN0b3J5LmZhY3RvcnlDcmVhdGVJbnN0cnVjdGlvbi5wYXJ0UmVwbGFjZW1lbnRzKSB7XG4gICAgICAgIG92ZXJyaWRlQ29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIHNjb3BlLm92ZXJyaWRlQ29udGV4dCk7XG4gICAgICAgIG92ZXJyaWRlQ29udGV4dC5wYXJlbnRPdmVycmlkZUNvbnRleHQgPSBzY29wZS5vdmVycmlkZUNvbnRleHQuX19wYXJlbnRPdmVycmlkZUNvbnRleHQ7XG4gICAgICB9XG4gICAgICB0aGlzLnZpZXdNb2RlbC5iaW5kKHNjb3BlLmJpbmRpbmdDb250ZXh0LCBvdmVycmlkZUNvbnRleHQpO1xuICAgIH1cbiAgfTtcblxuICBDb250cm9sbGVyLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQoKSB7XG4gICAgaWYgKHRoaXMuaXNCb3VuZCkge1xuICAgICAgdmFyIF9ib3VuZFByb3BlcnRpZXMgPSB0aGlzLmJvdW5kUHJvcGVydGllcztcbiAgICAgIHZhciBfaTMgPSB2b2lkIDA7XG4gICAgICB2YXIgX2lpMiA9IHZvaWQgMDtcblxuICAgICAgdGhpcy5pc0JvdW5kID0gZmFsc2U7XG4gICAgICB0aGlzLnNjb3BlID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMudmlldyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnZpZXcudW5iaW5kKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmJlaGF2aW9yLmhhbmRsZXNVbmJpbmQpIHtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwudW5iaW5kKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVsZW1lbnRFdmVudHMgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50RXZlbnRzLmRpc3Bvc2VBbGwoKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChfaTMgPSAwLCBfaWkyID0gX2JvdW5kUHJvcGVydGllcy5sZW5ndGg7IF9pMyA8IF9paTI7ICsrX2kzKSB7XG4gICAgICAgIF9ib3VuZFByb3BlcnRpZXNbX2kzXS5iaW5kaW5nLnVuYmluZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBDb250cm9sbGVyLnByb3RvdHlwZS5hdHRhY2hlZCA9IGZ1bmN0aW9uIGF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuYmVoYXZpb3IuaGFuZGxlc0F0dGFjaGVkKSB7XG4gICAgICB0aGlzLnZpZXdNb2RlbC5hdHRhY2hlZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZXcgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudmlldy5hdHRhY2hlZCgpO1xuICAgIH1cbiAgfTtcblxuICBDb250cm9sbGVyLnByb3RvdHlwZS5kZXRhY2hlZCA9IGZ1bmN0aW9uIGRldGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmlzQXR0YWNoZWQpIHtcbiAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMudmlldy5kZXRhY2hlZCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5iZWhhdmlvci5oYW5kbGVzRGV0YWNoZWQpIHtcbiAgICAgICAgdGhpcy52aWV3TW9kZWwuZGV0YWNoZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENvbnRyb2xsZXI7XG59KCk7XG5cbmV4cG9ydCB2YXIgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyID0gKF9kZWM3ID0gc3Vic2NyaWJlckNvbGxlY3Rpb24oKSwgX2RlYzcoX2NsYXNzMTUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJlaGF2aW9yUHJvcGVydHlPYnNlcnZlcih0YXNrUXVldWUsIG9iaiwgcHJvcGVydHlOYW1lLCBzZWxmU3Vic2NyaWJlciwgaW5pdGlhbFZhbHVlKSB7XG4gICAgXG5cbiAgICB0aGlzLnRhc2tRdWV1ZSA9IHRhc2tRdWV1ZTtcbiAgICB0aGlzLm9iaiA9IG9iajtcbiAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgICB0aGlzLm5vdHF1ZXVlZCA9IHRydWU7XG4gICAgdGhpcy5wdWJsaXNoaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zZWxmU3Vic2NyaWJlciA9IHNlbGZTdWJzY3JpYmVyO1xuICAgIHRoaXMuY3VycmVudFZhbHVlID0gdGhpcy5vbGRWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgfVxuXG4gIEJlaGF2aW9yUHJvcGVydHlPYnNlcnZlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG4gIH07XG5cbiAgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAoIU9iamVjdC5pcyhuZXdWYWx1ZSwgb2xkVmFsdWUpKSB7XG4gICAgICB0aGlzLm9sZFZhbHVlID0gb2xkVmFsdWU7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICBpZiAodGhpcy5wdWJsaXNoaW5nICYmIHRoaXMubm90cXVldWVkKSB7XG4gICAgICAgIGlmICh0aGlzLnRhc2tRdWV1ZS5mbHVzaGluZykge1xuICAgICAgICAgIHRoaXMuY2FsbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubm90cXVldWVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy50YXNrUXVldWUucXVldWVNaWNyb1Rhc2sodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gY2FsbCgpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm9sZFZhbHVlO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlO1xuXG4gICAgdGhpcy5ub3RxdWV1ZWQgPSB0cnVlO1xuXG4gICAgaWYgKE9iamVjdC5pcyhuZXdWYWx1ZSwgb2xkVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZlN1YnNjcmliZXIpIHtcbiAgICAgIHRoaXMuc2VsZlN1YnNjcmliZXIobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxTdWJzY3JpYmVycyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIHRoaXMub2xkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfTtcblxuICBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShjb250ZXh0LCBjYWxsYWJsZSkge1xuICAgIHRoaXMuYWRkU3Vic2NyaWJlcihjb250ZXh0LCBjYWxsYWJsZSk7XG4gIH07XG5cbiAgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGNvbnRleHQsIGNhbGxhYmxlKSB7XG4gICAgdGhpcy5yZW1vdmVTdWJzY3JpYmVyKGNvbnRleHQsIGNhbGxhYmxlKTtcbiAgfTtcblxuICByZXR1cm4gQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyO1xufSgpKSB8fCBfY2xhc3MxNSk7XG5cbmZ1bmN0aW9uIGdldE9ic2VydmVyKGluc3RhbmNlLCBuYW1lKSB7XG4gIHZhciBsb29rdXAgPSBpbnN0YW5jZS5fX29ic2VydmVyc19fO1xuXG4gIGlmIChsb29rdXAgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGluc3RhbmNlKS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgX2JlaGF2aW9yID0gbWV0YWRhdGEuZ2V0KG1ldGFkYXRhLnJlc291cmNlLCBjdG9yKTtcbiAgICBpZiAoIV9iZWhhdmlvci5pc0luaXRpYWxpemVkKSB7XG4gICAgICBfYmVoYXZpb3IuaW5pdGlhbGl6ZShDb250YWluZXIuaW5zdGFuY2UgfHwgbmV3IENvbnRhaW5lcigpLCBpbnN0YW5jZS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgbG9va3VwID0gX2JlaGF2aW9yLm9ic2VydmVyTG9jYXRvci5nZXRPckNyZWF0ZU9ic2VydmVyc0xvb2t1cChpbnN0YW5jZSk7XG4gICAgX2JlaGF2aW9yLl9lbnN1cmVQcm9wZXJ0aWVzRGVmaW5lZChpbnN0YW5jZSwgbG9va3VwKTtcbiAgfVxuXG4gIHJldHVybiBsb29rdXBbbmFtZV07XG59XG5cbmV4cG9ydCB2YXIgQmluZGFibGVQcm9wZXJ0eSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQmluZGFibGVQcm9wZXJ0eShuYW1lT3JDb25maWcpIHtcbiAgICBcblxuICAgIGlmICh0eXBlb2YgbmFtZU9yQ29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5uYW1lID0gbmFtZU9yQ29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG5hbWVPckNvbmZpZyk7XG4gICAgfVxuXG4gICAgdGhpcy5hdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZSB8fCBfaHlwaGVuYXRlKHRoaXMubmFtZSk7XG4gICAgdmFyIGRlZmF1bHRCaW5kaW5nTW9kZSA9IHRoaXMuZGVmYXVsdEJpbmRpbmdNb2RlO1xuICAgIGlmIChkZWZhdWx0QmluZGluZ01vZGUgPT09IG51bGwgfHwgZGVmYXVsdEJpbmRpbmdNb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGVmYXVsdEJpbmRpbmdNb2RlID0gYmluZGluZ01vZGUub25lV2F5O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmF1bHRCaW5kaW5nTW9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZGVmYXVsdEJpbmRpbmdNb2RlID0gYmluZGluZ01vZGVbZGVmYXVsdEJpbmRpbmdNb2RlXSB8fCBiaW5kaW5nTW9kZS5vbmVXYXk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlSGFuZGxlciA9IHRoaXMuY2hhbmdlSGFuZGxlciB8fCBudWxsO1xuICAgIHRoaXMub3duZXIgPSBudWxsO1xuICAgIHRoaXMuZGVzY3JpcHRvciA9IG51bGw7XG4gIH1cblxuICBCaW5kYWJsZVByb3BlcnR5LnByb3RvdHlwZS5yZWdpc3RlcldpdGggPSBmdW5jdGlvbiByZWdpc3RlcldpdGgodGFyZ2V0LCBiZWhhdmlvciwgZGVzY3JpcHRvcikge1xuICAgIGJlaGF2aW9yLnByb3BlcnRpZXMucHVzaCh0aGlzKTtcbiAgICBiZWhhdmlvci5hdHRyaWJ1dGVzW3RoaXMuYXR0cmlidXRlXSA9IHRoaXM7XG4gICAgdGhpcy5vd25lciA9IGJlaGF2aW9yO1xuXG4gICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7XG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJlRGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIEJpbmRhYmxlUHJvcGVydHkucHJvdG90eXBlLl9jb25maWd1cmVEZXNjcmlwdG9yID0gZnVuY3Rpb24gX2NvbmZpZ3VyZURlc2NyaXB0b3IoZGVzY3JpcHRvcikge1xuICAgIHZhciBuYW1lID0gdGhpcy5uYW1lO1xuXG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cbiAgICBpZiAoJ2luaXRpYWxpemVyJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXI7XG4gICAgICBkZWxldGUgZGVzY3JpcHRvci5pbml0aWFsaXplcjtcbiAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yLndyaXRhYmxlO1xuICAgIH1cblxuICAgIGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgZGVsZXRlIGRlc2NyaXB0b3Iud3JpdGFibGU7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvci5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0T2JzZXJ2ZXIodGhpcywgbmFtZSkuZ2V0VmFsdWUoKTtcbiAgICB9O1xuXG4gICAgZGVzY3JpcHRvci5zZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGdldE9ic2VydmVyKHRoaXMsIG5hbWUpLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgZGVzY3JpcHRvci5nZXQuZ2V0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gZ2V0T2JzZXJ2ZXIob2JqLCBuYW1lKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gIH07XG5cbiAgQmluZGFibGVQcm9wZXJ0eS5wcm90b3R5cGUuZGVmaW5lT24gPSBmdW5jdGlvbiBkZWZpbmVPbih0YXJnZXQsIGJlaGF2aW9yKSB7XG4gICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgdmFyIGhhbmRsZXJOYW1lID0gdm9pZCAwO1xuXG4gICAgaWYgKHRoaXMuY2hhbmdlSGFuZGxlciA9PT0gbnVsbCkge1xuICAgICAgaGFuZGxlck5hbWUgPSBuYW1lICsgJ0NoYW5nZWQnO1xuICAgICAgaWYgKGhhbmRsZXJOYW1lIGluIHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VIYW5kbGVyID0gaGFuZGxlck5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRvciA9PT0gbnVsbCkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5wcm90b3R5cGUsIG5hbWUsIHRoaXMuX2NvbmZpZ3VyZURlc2NyaXB0b3IoYmVoYXZpb3IsIHt9KSk7XG4gICAgfVxuICB9O1xuXG4gIEJpbmRhYmxlUHJvcGVydHkucHJvdG90eXBlLmNyZWF0ZU9ic2VydmVyID0gZnVuY3Rpb24gY3JlYXRlT2JzZXJ2ZXIodmlld01vZGVsKSB7XG4gICAgdmFyIHNlbGZTdWJzY3JpYmVyID0gbnVsbDtcbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWU7XG4gICAgdmFyIGNoYW5nZUhhbmRsZXJOYW1lID0gdGhpcy5jaGFuZ2VIYW5kbGVyO1xuICAgIHZhciBuYW1lID0gdGhpcy5uYW1lO1xuICAgIHZhciBpbml0aWFsVmFsdWUgPSB2b2lkIDA7XG5cbiAgICBpZiAodGhpcy5oYXNPcHRpb25zKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VIYW5kbGVyTmFtZSBpbiB2aWV3TW9kZWwpIHtcbiAgICAgIGlmICgncHJvcGVydHlDaGFuZ2VkJyBpbiB2aWV3TW9kZWwpIHtcbiAgICAgICAgc2VsZlN1YnNjcmliZXIgPSBmdW5jdGlvbiBzZWxmU3Vic2NyaWJlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgICB2aWV3TW9kZWxbY2hhbmdlSGFuZGxlck5hbWVdKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgdmlld01vZGVsLnByb3BlcnR5Q2hhbmdlZChuYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZlN1YnNjcmliZXIgPSBmdW5jdGlvbiBzZWxmU3Vic2NyaWJlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmlld01vZGVsW2NoYW5nZUhhbmRsZXJOYW1lXShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoJ3Byb3BlcnR5Q2hhbmdlZCcgaW4gdmlld01vZGVsKSB7XG4gICAgICBzZWxmU3Vic2NyaWJlciA9IGZ1bmN0aW9uIHNlbGZTdWJzY3JpYmVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdmlld01vZGVsLnByb3BlcnR5Q2hhbmdlZChuYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZUhhbmRsZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5nZSBoYW5kbGVyICcgKyBjaGFuZ2VIYW5kbGVyTmFtZSArICcgd2FzIHNwZWNpZmllZCBidXQgbm90IGRlY2xhcmVkIG9uIHRoZSBjbGFzcy4nKTtcbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXRpYWxWYWx1ZSA9IHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUuY2FsbCh2aWV3TW9kZWwpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyKHRoaXMub3duZXIudGFza1F1ZXVlLCB2aWV3TW9kZWwsIHRoaXMubmFtZSwgc2VsZlN1YnNjcmliZXIsIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgQmluZGFibGVQcm9wZXJ0eS5wcm90b3R5cGUuX2luaXRpYWxpemUgPSBmdW5jdGlvbiBfaW5pdGlhbGl6ZSh2aWV3TW9kZWwsIG9ic2VydmVyTG9va3VwLCBhdHRyaWJ1dGVzLCBiZWhhdmlvckhhbmRsZXNCaW5kLCBib3VuZFByb3BlcnRpZXMpIHtcbiAgICB2YXIgc2VsZlN1YnNjcmliZXIgPSB2b2lkIDA7XG4gICAgdmFyIG9ic2VydmVyID0gdm9pZCAwO1xuICAgIHZhciBhdHRyaWJ1dGUgPSB2b2lkIDA7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKHRoaXMuaXNEeW5hbWljKSB7XG4gICAgICBmb3IgKHZhciBfa2V5NiBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUR5bmFtaWNQcm9wZXJ0eSh2aWV3TW9kZWwsIG9ic2VydmVyTG9va3VwLCBiZWhhdmlvckhhbmRsZXNCaW5kLCBfa2V5NiwgYXR0cmlidXRlc1tfa2V5Nl0sIGJvdW5kUHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdGhpcy5oYXNPcHRpb25zKSB7XG4gICAgICBvYnNlcnZlciA9IG9ic2VydmVyTG9va3VwW3RoaXMubmFtZV07XG5cbiAgICAgIGlmIChhdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgICAgIHNlbGZTdWJzY3JpYmVyID0gb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXI7XG4gICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbdGhpcy5hdHRyaWJ1dGVdO1xuXG4gICAgICAgIGlmIChiZWhhdmlvckhhbmRsZXNCaW5kKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmlld01vZGVsW3RoaXMubmFtZV0gPSBhdHRyaWJ1dGU7XG4gICAgICAgICAgb2JzZXJ2ZXIuY2FsbCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgIGJvdW5kUHJvcGVydGllcy5wdXNoKHsgb2JzZXJ2ZXI6IG9ic2VydmVyLCBiaW5kaW5nOiBhdHRyaWJ1dGUuY3JlYXRlQmluZGluZyh2aWV3TW9kZWwpIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuY2FsbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXIgPSBzZWxmU3Vic2NyaWJlcjtcbiAgICAgIH1cblxuICAgICAgb2JzZXJ2ZXIucHVibGlzaGluZyA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIEJpbmRhYmxlUHJvcGVydHkucHJvdG90eXBlLl9jcmVhdGVEeW5hbWljUHJvcGVydHkgPSBmdW5jdGlvbiBfY3JlYXRlRHluYW1pY1Byb3BlcnR5KHZpZXdNb2RlbCwgb2JzZXJ2ZXJMb29rdXAsIGJlaGF2aW9ySGFuZGxlc0JpbmQsIG5hbWUsIGF0dHJpYnV0ZSwgYm91bmRQcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGNoYW5nZUhhbmRsZXJOYW1lID0gbmFtZSArICdDaGFuZ2VkJztcbiAgICB2YXIgc2VsZlN1YnNjcmliZXIgPSBudWxsO1xuICAgIHZhciBvYnNlcnZlciA9IHZvaWQgMDtcbiAgICB2YXIgaW5mbyA9IHZvaWQgMDtcblxuICAgIGlmIChjaGFuZ2VIYW5kbGVyTmFtZSBpbiB2aWV3TW9kZWwpIHtcbiAgICAgIGlmICgncHJvcGVydHlDaGFuZ2VkJyBpbiB2aWV3TW9kZWwpIHtcbiAgICAgICAgc2VsZlN1YnNjcmliZXIgPSBmdW5jdGlvbiBzZWxmU3Vic2NyaWJlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgICB2aWV3TW9kZWxbY2hhbmdlSGFuZGxlck5hbWVdKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgdmlld01vZGVsLnByb3BlcnR5Q2hhbmdlZChuYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZlN1YnNjcmliZXIgPSBmdW5jdGlvbiBzZWxmU3Vic2NyaWJlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmlld01vZGVsW2NoYW5nZUhhbmRsZXJOYW1lXShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoJ3Byb3BlcnR5Q2hhbmdlZCcgaW4gdmlld01vZGVsKSB7XG4gICAgICBzZWxmU3Vic2NyaWJlciA9IGZ1bmN0aW9uIHNlbGZTdWJzY3JpYmVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdmlld01vZGVsLnByb3BlcnR5Q2hhbmdlZChuYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBvYnNlcnZlciA9IG9ic2VydmVyTG9va3VwW25hbWVdID0gbmV3IEJlaGF2aW9yUHJvcGVydHlPYnNlcnZlcih0aGlzLm93bmVyLnRhc2tRdWV1ZSwgdmlld01vZGVsLCBuYW1lLCBzZWxmU3Vic2NyaWJlcik7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlld01vZGVsLCBuYW1lLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBvYnNlcnZlci5nZXRWYWx1ZS5iaW5kKG9ic2VydmVyKSxcbiAgICAgIHNldDogb2JzZXJ2ZXIuc2V0VmFsdWUuYmluZChvYnNlcnZlcilcbiAgICB9KTtcblxuICAgIGlmIChiZWhhdmlvckhhbmRsZXNCaW5kKSB7XG4gICAgICBvYnNlcnZlci5zZWxmU3Vic2NyaWJlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2aWV3TW9kZWxbbmFtZV0gPSBhdHRyaWJ1dGU7XG4gICAgICBvYnNlcnZlci5jYWxsKCk7XG4gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgIGluZm8gPSB7IG9ic2VydmVyOiBvYnNlcnZlciwgYmluZGluZzogYXR0cmlidXRlLmNyZWF0ZUJpbmRpbmcodmlld01vZGVsKSB9O1xuICAgICAgYm91bmRQcm9wZXJ0aWVzLnB1c2goaW5mbyk7XG4gICAgfVxuXG4gICAgb2JzZXJ2ZXIucHVibGlzaGluZyA9IHRydWU7XG4gICAgb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXIgPSBzZWxmU3Vic2NyaWJlcjtcbiAgfTtcblxuICByZXR1cm4gQmluZGFibGVQcm9wZXJ0eTtcbn0oKTtcblxudmFyIGxhc3RQcm92aWRlcklkID0gMDtcblxuZnVuY3Rpb24gbmV4dFByb3ZpZGVySWQoKSB7XG4gIHJldHVybiArK2xhc3RQcm92aWRlcklkO1xufVxuXG5mdW5jdGlvbiBkb1Byb2Nlc3NDb250ZW50KCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGRvUHJvY2Vzc0F0dHJpYnV0ZXMoKSB7fVxuXG5leHBvcnQgdmFyIEh0bWxCZWhhdmlvclJlc291cmNlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBIdG1sQmVoYXZpb3JSZXNvdXJjZSgpIHtcbiAgICBcblxuICAgIHRoaXMuZWxlbWVudE5hbWUgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlTmFtZSA9IG51bGw7XG4gICAgdGhpcy5hdHRyaWJ1dGVEZWZhdWx0QmluZGluZ01vZGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5saWZ0c0NvbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLnRhcmdldFNoYWRvd0RPTSA9IGZhbHNlO1xuICAgIHRoaXMuc2hhZG93RE9NT3B0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzQXR0cmlidXRlcyA9IGRvUHJvY2Vzc0F0dHJpYnV0ZXM7XG4gICAgdGhpcy5wcm9jZXNzQ29udGVudCA9IGRvUHJvY2Vzc0NvbnRlbnQ7XG4gICAgdGhpcy51c2VzU2hhZG93RE9NID0gZmFsc2U7XG4gICAgdGhpcy5jaGlsZEJpbmRpbmdzID0gbnVsbDtcbiAgICB0aGlzLmhhc0R5bmFtaWNPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5jb250YWluZXJsZXNzID0gZmFsc2U7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW107XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wcmltYXJ5UHJvcGVydHkgPSBudWxsO1xuICB9XG5cbiAgSHRtbEJlaGF2aW9yUmVzb3VyY2UuY29udmVudGlvbiA9IGZ1bmN0aW9uIGNvbnZlbnRpb24obmFtZSwgZXhpc3RpbmcpIHtcbiAgICB2YXIgYmVoYXZpb3IgPSB2b2lkIDA7XG5cbiAgICBpZiAobmFtZS5lbmRzV2l0aCgnQ3VzdG9tQXR0cmlidXRlJykpIHtcbiAgICAgIGJlaGF2aW9yID0gZXhpc3RpbmcgfHwgbmV3IEh0bWxCZWhhdmlvclJlc291cmNlKCk7XG4gICAgICBiZWhhdmlvci5hdHRyaWJ1dGVOYW1lID0gX2h5cGhlbmF0ZShuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDE1KSk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoJ0N1c3RvbUVsZW1lbnQnKSkge1xuICAgICAgYmVoYXZpb3IgPSBleGlzdGluZyB8fCBuZXcgSHRtbEJlaGF2aW9yUmVzb3VyY2UoKTtcbiAgICAgIGJlaGF2aW9yLmVsZW1lbnROYW1lID0gX2h5cGhlbmF0ZShuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDEzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJlaGF2aW9yO1xuICB9O1xuXG4gIEh0bWxCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5hZGRDaGlsZEJpbmRpbmcgPSBmdW5jdGlvbiBhZGRDaGlsZEJpbmRpbmcoYmVoYXZpb3IpIHtcbiAgICBpZiAodGhpcy5jaGlsZEJpbmRpbmdzID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNoaWxkQmluZGluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkQmluZGluZ3MucHVzaChiZWhhdmlvcik7XG4gIH07XG5cbiAgSHRtbEJlaGF2aW9yUmVzb3VyY2UucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGNvbnRhaW5lciwgdGFyZ2V0KSB7XG4gICAgdmFyIHByb3RvID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcbiAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHRoaXMuYXR0cmlidXRlTmFtZTtcbiAgICB2YXIgYXR0cmlidXRlRGVmYXVsdEJpbmRpbmdNb2RlID0gdGhpcy5hdHRyaWJ1dGVEZWZhdWx0QmluZGluZ01vZGU7XG4gICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgdmFyIGlpID0gdm9pZCAwO1xuICAgIHZhciBjdXJyZW50ID0gdm9pZCAwO1xuXG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGFyZ2V0Ll9fcHJvdmlkZXJJZF9fID0gbmV4dFByb3ZpZGVySWQoKTtcblxuICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yID0gY29udGFpbmVyLmdldChPYnNlcnZlckxvY2F0b3IpO1xuICAgIHRoaXMudGFza1F1ZXVlID0gY29udGFpbmVyLmdldChUYXNrUXVldWUpO1xuXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy51c2VzU2hhZG93RE9NID0gdGhpcy50YXJnZXRTaGFkb3dET00gJiYgRkVBVFVSRS5zaGFkb3dET007XG4gICAgdGhpcy5oYW5kbGVzQ3JlYXRlZCA9ICdjcmVhdGVkJyBpbiBwcm90bztcbiAgICB0aGlzLmhhbmRsZXNCaW5kID0gJ2JpbmQnIGluIHByb3RvO1xuICAgIHRoaXMuaGFuZGxlc1VuYmluZCA9ICd1bmJpbmQnIGluIHByb3RvO1xuICAgIHRoaXMuaGFuZGxlc0F0dGFjaGVkID0gJ2F0dGFjaGVkJyBpbiBwcm90bztcbiAgICB0aGlzLmhhbmRsZXNEZXRhY2hlZCA9ICdkZXRhY2hlZCcgaW4gcHJvdG87XG4gICAgdGhpcy5odG1sTmFtZSA9IHRoaXMuZWxlbWVudE5hbWUgfHwgdGhpcy5hdHRyaWJ1dGVOYW1lO1xuXG4gICAgaWYgKGF0dHJpYnV0ZU5hbWUgIT09IG51bGwpIHtcbiAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBuZXcgQmluZGFibGVQcm9wZXJ0eSh7XG4gICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyOiAndmFsdWVDaGFuZ2VkJyBpbiBwcm90byA/ICd2YWx1ZUNoYW5nZWQnIDogbnVsbCxcbiAgICAgICAgICBhdHRyaWJ1dGU6IGF0dHJpYnV0ZU5hbWUsXG4gICAgICAgICAgZGVmYXVsdEJpbmRpbmdNb2RlOiBhdHRyaWJ1dGVEZWZhdWx0QmluZGluZ01vZGVcbiAgICAgICAgfSkucmVnaXN0ZXJXaXRoKHRhcmdldCwgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQgPSBwcm9wZXJ0aWVzWzBdO1xuXG4gICAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDEgJiYgY3VycmVudC5uYW1lID09PSAndmFsdWUnKSB7XG4gICAgICAgIGN1cnJlbnQuaXNEeW5hbWljID0gY3VycmVudC5oYXNPcHRpb25zID0gdGhpcy5oYXNEeW5hbWljT3B0aW9ucztcbiAgICAgICAgY3VycmVudC5kZWZpbmVPbih0YXJnZXQsIHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBwcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2ldLmRlZmluZU9uKHRhcmdldCwgdGhpcyk7XG4gICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0ucHJpbWFyeVByb3BlcnR5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmltYXJ5UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IG9uZSBiaW5kYWJsZSBwcm9wZXJ0eSBvbiBhIGN1c3RvbSBlbGVtZW50IGNhbiBiZSBkZWZpbmVkIGFzIHRoZSBkZWZhdWx0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByaW1hcnlQcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudCA9IG5ldyBCaW5kYWJsZVByb3BlcnR5KHtcbiAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgIGNoYW5nZUhhbmRsZXI6ICd2YWx1ZUNoYW5nZWQnIGluIHByb3RvID8gJ3ZhbHVlQ2hhbmdlZCcgOiBudWxsLFxuICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlTmFtZSxcbiAgICAgICAgICBkZWZhdWx0QmluZGluZ01vZGU6IGF0dHJpYnV0ZURlZmF1bHRCaW5kaW5nTW9kZVxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50Lmhhc09wdGlvbnMgPSB0cnVlO1xuICAgICAgICBjdXJyZW50LnJlZ2lzdGVyV2l0aCh0YXJnZXQsIHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBwcm9wZXJ0aWVzW2ldLmRlZmluZU9uKHRhcmdldCwgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvcHlJbmhlcml0ZWRQcm9wZXJ0aWVzKGNvbnRhaW5lciwgdGFyZ2V0KTtcbiAgICB9XG4gIH07XG5cbiAgSHRtbEJlaGF2aW9yUmVzb3VyY2UucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIocmVnaXN0cnksIG5hbWUpIHtcbiAgICB2YXIgX3RoaXMxMiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVOYW1lICE9PSBudWxsKSB7XG4gICAgICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZShuYW1lIHx8IHRoaXMuYXR0cmlidXRlTmFtZSwgdGhpcywgdGhpcy5hdHRyaWJ1dGVOYW1lKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5hbGlhc2VzKSkge1xuICAgICAgICB0aGlzLmFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZShhbGlhcywgX3RoaXMxMiwgX3RoaXMxMi5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWxlbWVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRWxlbWVudChuYW1lIHx8IHRoaXMuZWxlbWVudE5hbWUsIHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBIdG1sQmVoYXZpb3JSZXNvdXJjZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQoY29udGFpbmVyLCB0YXJnZXQsIGxvYWRDb250ZXh0LCB2aWV3U3RyYXRlZ3ksIHRyYW5zaWVudFZpZXcpIHtcbiAgICB2YXIgX3RoaXMxMyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHZvaWQgMDtcblxuICAgIGlmICh0aGlzLmVsZW1lbnROYW1lICE9PSBudWxsKSB7XG4gICAgICB2aWV3U3RyYXRlZ3kgPSBjb250YWluZXIuZ2V0KFZpZXdMb2NhdG9yKS5nZXRWaWV3U3RyYXRlZ3kodmlld1N0cmF0ZWd5IHx8IHRoaXMudmlld1N0cmF0ZWd5IHx8IHRhcmdldCk7XG4gICAgICBvcHRpb25zID0gbmV3IFZpZXdDb21waWxlSW5zdHJ1Y3Rpb24odGhpcy50YXJnZXRTaGFkb3dET00sIHRydWUpO1xuXG4gICAgICBpZiAoIXZpZXdTdHJhdGVneS5tb2R1bGVJZCkge1xuICAgICAgICB2aWV3U3RyYXRlZ3kubW9kdWxlSWQgPSBPcmlnaW4uZ2V0KHRhcmdldCkubW9kdWxlSWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2aWV3U3RyYXRlZ3kubG9hZFZpZXdGYWN0b3J5KGNvbnRhaW5lci5nZXQoVmlld0VuZ2luZSksIG9wdGlvbnMsIGxvYWRDb250ZXh0LCB0YXJnZXQpLnRoZW4oZnVuY3Rpb24gKHZpZXdGYWN0b3J5KSB7XG4gICAgICAgIGlmICghdHJhbnNpZW50VmlldyB8fCAhX3RoaXMxMy52aWV3RmFjdG9yeSkge1xuICAgICAgICAgIF90aGlzMTMudmlld0ZhY3RvcnkgPSB2aWV3RmFjdG9yeTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2aWV3RmFjdG9yeTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XG4gIH07XG5cbiAgSHRtbEJlaGF2aW9yUmVzb3VyY2UucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbiBjb21waWxlKGNvbXBpbGVyLCByZXNvdXJjZXMsIG5vZGUsIGluc3RydWN0aW9uLCBwYXJlbnROb2RlKSB7XG4gICAgaWYgKHRoaXMubGlmdHNDb250ZW50KSB7XG4gICAgICBpZiAoIWluc3RydWN0aW9uLnZpZXdGYWN0b3J5KSB7XG4gICAgICAgIHZhciBfdGVtcGxhdGUgPSBET00uY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICAgICAgdmFyIGZyYWdtZW50ID0gRE9NLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgdmFyIGNhY2hlU2l6ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCd2aWV3LWNhY2hlJyk7XG4gICAgICAgIHZhciBwYXJ0ID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3BhcnQnKTtcblxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShpbnN0cnVjdGlvbi5vcmlnaW5hbEF0dHJOYW1lKTtcbiAgICAgICAgRE9NLnJlcGxhY2VOb2RlKF90ZW1wbGF0ZSwgbm9kZSwgcGFyZW50Tm9kZSk7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICBpbnN0cnVjdGlvbi52aWV3RmFjdG9yeSA9IGNvbXBpbGVyLmNvbXBpbGUoZnJhZ21lbnQsIHJlc291cmNlcyk7XG5cbiAgICAgICAgaWYgKHBhcnQpIHtcbiAgICAgICAgICBpbnN0cnVjdGlvbi52aWV3RmFjdG9yeS5wYXJ0ID0gcGFydDtcbiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgncGFydCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlU2l6ZSkge1xuICAgICAgICAgIGluc3RydWN0aW9uLnZpZXdGYWN0b3J5LnNldENhY2hlU2l6ZShjYWNoZVNpemUpO1xuICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2aWV3LWNhY2hlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gX3RlbXBsYXRlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9wYXJ0UmVwbGFjZW1lbnRzMiA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5wcm9jZXNzQ29udGVudChjb21waWxlciwgcmVzb3VyY2VzLCBub2RlLCBpbnN0cnVjdGlvbikgJiYgbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgdmFyIGNvbnRlbnRFbGVtZW50ID0gdGhpcy51c2VzU2hhZG93RE9NID8gbnVsbCA6IERPTS5jcmVhdGVFbGVtZW50KCdhdS1jb250ZW50Jyk7XG4gICAgICAgIHZhciBuZXh0U2libGluZyA9IHZvaWQgMDtcbiAgICAgICAgdmFyIHRvUmVwbGFjZSA9IHZvaWQgMDtcblxuICAgICAgICB3aGlsZSAoY3VycmVudENoaWxkKSB7XG4gICAgICAgICAgbmV4dFNpYmxpbmcgPSBjdXJyZW50Q2hpbGQubmV4dFNpYmxpbmc7XG5cbiAgICAgICAgICBpZiAoY3VycmVudENoaWxkLnRhZ05hbWUgPT09ICdURU1QTEFURScgJiYgKHRvUmVwbGFjZSA9IGN1cnJlbnRDaGlsZC5nZXRBdHRyaWJ1dGUoJ3JlcGxhY2UtcGFydCcpKSkge1xuICAgICAgICAgICAgX3BhcnRSZXBsYWNlbWVudHMyW3RvUmVwbGFjZV0gPSBjb21waWxlci5jb21waWxlKGN1cnJlbnRDaGlsZCwgcmVzb3VyY2VzKTtcbiAgICAgICAgICAgIERPTS5yZW1vdmVOb2RlKGN1cnJlbnRDaGlsZCwgcGFyZW50Tm9kZSk7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbi5wYXJ0UmVwbGFjZW1lbnRzID0gX3BhcnRSZXBsYWNlbWVudHMyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q2hpbGQubm9kZVR5cGUgPT09IDMgJiYgX2lzQWxsV2hpdGVzcGFjZShjdXJyZW50Q2hpbGQpKSB7XG4gICAgICAgICAgICAgIERPTS5yZW1vdmVOb2RlKGN1cnJlbnRDaGlsZCwgcGFyZW50Tm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IG5leHRTaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRlbnRFbGVtZW50ICE9PSBudWxsICYmIGNvbnRlbnRFbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoY29udGVudEVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zdHJ1Y3Rpb24uc2tpcENvbnRlbnRQcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0cnVjdGlvbi5za2lwQ29udGVudFByb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJvY2Vzc0NvbnRlbnQoY29tcGlsZXIsIHJlc291cmNlcywgbm9kZSwgaW5zdHJ1Y3Rpb24pKSB7XG4gICAgICBpbnN0cnVjdGlvbi5za2lwQ29udGVudFByb2Nlc3NpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9O1xuXG4gIEh0bWxCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoY29udGFpbmVyLCBpbnN0cnVjdGlvbiwgZWxlbWVudCwgYmluZGluZ3MpIHtcbiAgICB2YXIgdmlld0hvc3QgPSB2b2lkIDA7XG4gICAgdmFyIGF1ID0gbnVsbDtcblxuICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24gfHwgQmVoYXZpb3JJbnN0cnVjdGlvbi5ub3JtYWw7XG4gICAgZWxlbWVudCA9IGVsZW1lbnQgfHwgbnVsbDtcbiAgICBiaW5kaW5ncyA9IGJpbmRpbmdzIHx8IG51bGw7XG5cbiAgICBpZiAodGhpcy5lbGVtZW50TmFtZSAhPT0gbnVsbCAmJiBlbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy51c2VzU2hhZG93RE9NKSB7XG4gICAgICAgIHZpZXdIb3N0ID0gZWxlbWVudC5hdHRhY2hTaGFkb3codGhpcy5zaGFkb3dET01PcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoRE9NLmJvdW5kYXJ5LCB2aWV3SG9zdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aWV3SG9zdCA9IGVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldFNoYWRvd0RPTSkge1xuICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlckluc3RhbmNlKERPTS5ib3VuZGFyeSwgdmlld0hvc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQuYXUgPSBhdSA9IGVsZW1lbnQuYXUgfHwge307XG4gICAgfVxuXG4gICAgdmFyIHZpZXdNb2RlbCA9IGluc3RydWN0aW9uLnZpZXdNb2RlbCB8fCBjb250YWluZXIuZ2V0KHRoaXMudGFyZ2V0KTtcbiAgICB2YXIgY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKHRoaXMsIGluc3RydWN0aW9uLCB2aWV3TW9kZWwsIGNvbnRhaW5lcik7XG4gICAgdmFyIGNoaWxkQmluZGluZ3MgPSB0aGlzLmNoaWxkQmluZGluZ3M7XG4gICAgdmFyIHZpZXdGYWN0b3J5ID0gdm9pZCAwO1xuXG4gICAgaWYgKHRoaXMubGlmdHNDb250ZW50KSB7XG4gICAgICBhdS5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgIHZpZXdGYWN0b3J5ID0gaW5zdHJ1Y3Rpb24udmlld0ZhY3RvcnkgfHwgdGhpcy52aWV3RmFjdG9yeTtcbiAgICAgIGNvbnRhaW5lci52aWV3TW9kZWwgPSB2aWV3TW9kZWw7XG5cbiAgICAgIGlmICh2aWV3RmFjdG9yeSkge1xuICAgICAgICBjb250cm9sbGVyLnZpZXcgPSB2aWV3RmFjdG9yeS5jcmVhdGUoY29udGFpbmVyLCBpbnN0cnVjdGlvbiwgZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGF1LmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuXG4gICAgICAgIGlmIChjb250cm9sbGVyLnZpZXcpIHtcbiAgICAgICAgICBpZiAoIXRoaXMudXNlc1NoYWRvd0RPTSAmJiAoZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSB8fCBlbGVtZW50LmNvbnRlbnRFbGVtZW50KSkge1xuICAgICAgICAgICAgdmFyIGNvbnRlbnRFbGVtZW50ID0gZWxlbWVudC5jaGlsZE5vZGVzWzBdIHx8IGVsZW1lbnQuY29udGVudEVsZW1lbnQ7XG4gICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuY29udGVudFZpZXcgPSB7IGZyYWdtZW50OiBjb250ZW50RWxlbWVudCB9O1xuICAgICAgICAgICAgY29udGVudEVsZW1lbnQucGFyZW50Tm9kZSAmJiBET00ucmVtb3ZlTm9kZShjb250ZW50RWxlbWVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGluc3RydWN0aW9uLmFuY2hvcklzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRCaW5kaW5ncyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaTQgPSAwLCBfaWkzID0gY2hpbGRCaW5kaW5ncy5sZW5ndGg7IF9pNCA8IF9paTM7ICsrX2k0KSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci52aWV3LmFkZEJpbmRpbmcoY2hpbGRCaW5kaW5nc1tfaTRdLmNyZWF0ZShlbGVtZW50LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuYXBwZW5kTm9kZXNUbyh2aWV3SG9zdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIudmlldy5pbnNlcnROb2Rlc0JlZm9yZSh2aWV3SG9zdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkQmluZGluZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaTUgPSAwLCBfaWk0ID0gY2hpbGRCaW5kaW5ncy5sZW5ndGg7IF9pNSA8IF9paTQ7ICsrX2k1KSB7XG4gICAgICAgICAgICBiaW5kaW5ncy5wdXNoKGNoaWxkQmluZGluZ3NbX2k1XS5jcmVhdGUoZWxlbWVudCwgdmlld01vZGVsLCBjb250cm9sbGVyKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIudmlldykge1xuICAgICAgICBjb250cm9sbGVyLnZpZXcuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG5cbiAgICAgICAgaWYgKGNoaWxkQmluZGluZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaTYgPSAwLCBfaWk1ID0gY2hpbGRCaW5kaW5ncy5sZW5ndGg7IF9pNiA8IF9paTU7ICsrX2k2KSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLnZpZXcuYWRkQmluZGluZyhjaGlsZEJpbmRpbmdzW19pNl0uY3JlYXRlKGluc3RydWN0aW9uLmhvc3QsIHZpZXdNb2RlbCwgY29udHJvbGxlcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaGlsZEJpbmRpbmdzICE9PSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIF9pNyA9IDAsIF9paTYgPSBjaGlsZEJpbmRpbmdzLmxlbmd0aDsgX2k3IDwgX2lpNjsgKytfaTcpIHtcbiAgICAgICAgICBiaW5kaW5ncy5wdXNoKGNoaWxkQmluZGluZ3NbX2k3XS5jcmVhdGUoaW5zdHJ1Y3Rpb24uaG9zdCwgdmlld01vZGVsLCBjb250cm9sbGVyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoaWxkQmluZGluZ3MgIT09IG51bGwpIHtcbiAgICAgIGZvciAodmFyIF9pOCA9IDAsIF9paTcgPSBjaGlsZEJpbmRpbmdzLmxlbmd0aDsgX2k4IDwgX2lpNzsgKytfaTgpIHtcbiAgICAgICAgYmluZGluZ3MucHVzaChjaGlsZEJpbmRpbmdzW19pOF0uY3JlYXRlKGVsZW1lbnQsIHZpZXdNb2RlbCwgY29udHJvbGxlcikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdSAhPT0gbnVsbCkge1xuICAgICAgYXVbdGhpcy5odG1sTmFtZV0gPSBjb250cm9sbGVyO1xuICAgIH1cblxuICAgIGlmIChpbnN0cnVjdGlvbi5pbml0aWF0ZWRCeUJlaGF2aW9yICYmIHZpZXdGYWN0b3J5KSB7XG4gICAgICBjb250cm9sbGVyLnZpZXcuY3JlYXRlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sbGVyO1xuICB9O1xuXG4gIEh0bWxCZWhhdmlvclJlc291cmNlLnByb3RvdHlwZS5fZW5zdXJlUHJvcGVydGllc0RlZmluZWQgPSBmdW5jdGlvbiBfZW5zdXJlUHJvcGVydGllc0RlZmluZWQoaW5zdGFuY2UsIGxvb2t1cCkge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdm9pZCAwO1xuICAgIHZhciBpID0gdm9pZCAwO1xuICAgIHZhciBpaSA9IHZvaWQgMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSB2b2lkIDA7XG5cbiAgICBpZiAoJ19fcHJvcGVydGllc0RlZmluZWRfXycgaW4gbG9va3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9va3VwLl9fcHJvcGVydGllc0RlZmluZWRfXyA9IHRydWU7XG4gICAgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGZvciAoaSA9IDAsIGlpID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBvYnNlcnZlciA9IHByb3BlcnRpZXNbaV0uY3JlYXRlT2JzZXJ2ZXIoaW5zdGFuY2UpO1xuXG4gICAgICBpZiAob2JzZXJ2ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb29rdXBbb2JzZXJ2ZXIucHJvcGVydHlOYW1lXSA9IG9ic2VydmVyO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBIdG1sQmVoYXZpb3JSZXNvdXJjZS5wcm90b3R5cGUuX2NvcHlJbmhlcml0ZWRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gX2NvcHlJbmhlcml0ZWRQcm9wZXJ0aWVzKGNvbnRhaW5lciwgdGFyZ2V0KSB7XG4gICAgdmFyIF90aGlzMTQgPSB0aGlzO1xuXG4gICAgdmFyIGJlaGF2aW9yID0gdm9pZCAwO1xuICAgIHZhciBkZXJpdmVkID0gdGFyZ2V0O1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQucHJvdG90eXBlKTtcbiAgICAgIHRhcmdldCA9IHByb3RvICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYmVoYXZpb3IgPSBtZXRhZGF0YS5nZXRPd24obWV0YWRhdGEucmVzb3VyY2UsIHRhcmdldCk7XG4gICAgICBpZiAoYmVoYXZpb3IpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGJlaGF2aW9yLmluaXRpYWxpemUoY29udGFpbmVyLCB0YXJnZXQpO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2k5LCBfaWk4KSB7XG4gICAgICB2YXIgcHJvcCA9IGJlaGF2aW9yLnByb3BlcnRpZXNbX2k5XTtcblxuICAgICAgaWYgKF90aGlzMTQucHJvcGVydGllcy5zb21lKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiBwLm5hbWUgPT09IHByb3AubmFtZTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHJldHVybiAnY29udGludWUnO1xuICAgICAgfVxuXG4gICAgICBuZXcgQmluZGFibGVQcm9wZXJ0eShwcm9wKS5yZWdpc3RlcldpdGgoZGVyaXZlZCwgX3RoaXMxNCk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pOSA9IDAsIF9paTggPSBiZWhhdmlvci5wcm9wZXJ0aWVzLmxlbmd0aDsgX2k5IDwgX2lpODsgKytfaTkpIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2k5LCBfaWk4KTtcblxuICAgICAgaWYgKF9yZXQgPT09ICdjb250aW51ZScpIGNvbnRpbnVlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gSHRtbEJlaGF2aW9yUmVzb3VyY2U7XG59KCk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoaWxkT2JzZXJ2ZXJEZWNvcmF0b3Ioc2VsZWN0b3JPckNvbmZpZywgYWxsKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgICB2YXIgYWN0dWFsVGFyZ2V0ID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyB0YXJnZXQuY29uc3RydWN0b3IgOiB0YXJnZXQ7XG4gICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIGFjdHVhbFRhcmdldCk7XG5cbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yT3JDb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzZWxlY3Rvck9yQ29uZmlnID0ge1xuICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3JPckNvbmZpZyxcbiAgICAgICAgbmFtZToga2V5XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZWxlY3Rvck9yQ29uZmlnLmFsbCA9IGFsbDtcbiAgICByLmFkZENoaWxkQmluZGluZyhuZXcgQ2hpbGRPYnNlcnZlcihzZWxlY3Rvck9yQ29uZmlnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZHJlbihzZWxlY3Rvck9yQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVDaGlsZE9ic2VydmVyRGVjb3JhdG9yKHNlbGVjdG9yT3JDb25maWcsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGQoc2VsZWN0b3JPckNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlQ2hpbGRPYnNlcnZlckRlY29yYXRvcihzZWxlY3Rvck9yQ29uZmlnLCBmYWxzZSk7XG59XG5cbnZhciBDaGlsZE9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDaGlsZE9ic2VydmVyKGNvbmZpZykge1xuICAgIFxuXG4gICAgdGhpcy5uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgdGhpcy5jaGFuZ2VIYW5kbGVyID0gY29uZmlnLmNoYW5nZUhhbmRsZXIgfHwgdGhpcy5uYW1lICsgJ0NoYW5nZWQnO1xuICAgIHRoaXMuc2VsZWN0b3IgPSBjb25maWcuc2VsZWN0b3I7XG4gICAgdGhpcy5hbGwgPSBjb25maWcuYWxsO1xuICB9XG5cbiAgQ2hpbGRPYnNlcnZlci5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHZpZXdIb3N0LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gbmV3IENoaWxkT2JzZXJ2ZXJCaW5kZXIodGhpcy5zZWxlY3Rvciwgdmlld0hvc3QsIHRoaXMubmFtZSwgdmlld01vZGVsLCBjb250cm9sbGVyLCB0aGlzLmNoYW5nZUhhbmRsZXIsIHRoaXMuYWxsKTtcbiAgfTtcblxuICByZXR1cm4gQ2hpbGRPYnNlcnZlcjtcbn0oKTtcblxudmFyIG5vTXV0YXRpb25zID0gW107XG5cbmZ1bmN0aW9uIHRyYWNrTXV0YXRpb24oZ3JvdXBlZE11dGF0aW9ucywgYmluZGVyLCByZWNvcmQpIHtcbiAgdmFyIG11dGF0aW9ucyA9IGdyb3VwZWRNdXRhdGlvbnMuZ2V0KGJpbmRlcik7XG5cbiAgaWYgKCFtdXRhdGlvbnMpIHtcbiAgICBtdXRhdGlvbnMgPSBbXTtcbiAgICBncm91cGVkTXV0YXRpb25zLnNldChiaW5kZXIsIG11dGF0aW9ucyk7XG4gIH1cblxuICBtdXRhdGlvbnMucHVzaChyZWNvcmQpO1xufVxuXG5mdW5jdGlvbiBvbkNoaWxkQ2hhbmdlKG11dGF0aW9ucywgb2JzZXJ2ZXIpIHtcbiAgdmFyIGJpbmRlcnMgPSBvYnNlcnZlci5iaW5kZXJzO1xuICB2YXIgYmluZGVyc0xlbmd0aCA9IGJpbmRlcnMubGVuZ3RoO1xuXG4gIHZhciBncm91cGVkTXV0YXRpb25zID0gbmV3IE1hcCgpO1xuXG4gIGZvciAodmFyIF9pMTAgPSAwLCBfaWk5ID0gbXV0YXRpb25zLmxlbmd0aDsgX2kxMCA8IF9paTk7ICsrX2kxMCkge1xuICAgIHZhciByZWNvcmQgPSBtdXRhdGlvbnNbX2kxMF07XG4gICAgdmFyIGFkZGVkID0gcmVjb3JkLmFkZGVkTm9kZXM7XG4gICAgdmFyIHJlbW92ZWQgPSByZWNvcmQucmVtb3ZlZE5vZGVzO1xuXG4gICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcmVtb3ZlZC5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgICB2YXIgX25vZGUgPSByZW1vdmVkW2pdO1xuICAgICAgaWYgKF9ub2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYmluZGVyc0xlbmd0aDsgKytrKSB7XG4gICAgICAgICAgdmFyIGJpbmRlciA9IGJpbmRlcnNba107XG5cbiAgICAgICAgICBpZiAoYmluZGVyLm9uUmVtb3ZlKF9ub2RlKSkge1xuICAgICAgICAgICAgdHJhY2tNdXRhdGlvbihncm91cGVkTXV0YXRpb25zLCBiaW5kZXIsIHJlY29yZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2ogPSAwLCBfamogPSBhZGRlZC5sZW5ndGg7IF9qIDwgX2pqOyArK19qKSB7XG4gICAgICB2YXIgX25vZGUyID0gYWRkZWRbX2pdO1xuICAgICAgaWYgKF9ub2RlMi5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgYmluZGVyc0xlbmd0aDsgKytfaykge1xuICAgICAgICAgIHZhciBfYmluZGVyID0gYmluZGVyc1tfa107XG5cbiAgICAgICAgICBpZiAoX2JpbmRlci5vbkFkZChfbm9kZTIpKSB7XG4gICAgICAgICAgICB0cmFja011dGF0aW9uKGdyb3VwZWRNdXRhdGlvbnMsIF9iaW5kZXIsIHJlY29yZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ3JvdXBlZE11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvblJlY29yZHMsIGJpbmRlcikge1xuICAgIGlmIChiaW5kZXIuaXNCb3VuZCAmJiBiaW5kZXIuY2hhbmdlSGFuZGxlciAhPT0gbnVsbCkge1xuICAgICAgYmluZGVyLnZpZXdNb2RlbFtiaW5kZXIuY2hhbmdlSGFuZGxlcl0obXV0YXRpb25SZWNvcmRzKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgQ2hpbGRPYnNlcnZlckJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2hpbGRPYnNlcnZlckJpbmRlcihzZWxlY3Rvciwgdmlld0hvc3QsIHByb3BlcnR5LCB2aWV3TW9kZWwsIGNvbnRyb2xsZXIsIGNoYW5nZUhhbmRsZXIsIGFsbCkge1xuICAgIFxuXG4gICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXG4gICAgdGhpcy52aWV3SG9zdCA9IHZpZXdIb3N0O1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLnZpZXdNb2RlbCA9IHZpZXdNb2RlbDtcbiAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIHRoaXMuY2hhbmdlSGFuZGxlciA9IGNoYW5nZUhhbmRsZXIgaW4gdmlld01vZGVsID8gY2hhbmdlSGFuZGxlciA6IG51bGw7XG4gICAgdGhpcy51c2VzU2hhZG93RE9NID0gY29udHJvbGxlci5iZWhhdmlvci51c2VzU2hhZG93RE9NO1xuICAgIHRoaXMuYWxsID0gYWxsO1xuXG4gICAgaWYgKCF0aGlzLnVzZXNTaGFkb3dET00gJiYgY29udHJvbGxlci52aWV3ICYmIGNvbnRyb2xsZXIudmlldy5jb250ZW50Vmlldykge1xuICAgICAgdGhpcy5jb250ZW50VmlldyA9IGNvbnRyb2xsZXIudmlldy5jb250ZW50VmlldztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50VmlldyA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcbiAgICB0aGlzLmlzQm91bmQgPSBmYWxzZTtcbiAgfVxuXG4gIENoaWxkT2JzZXJ2ZXJCaW5kZXIucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbiBtYXRjaGVzKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5tYXRjaGVzKHRoaXMuc2VsZWN0b3IpKSB7XG4gICAgICBpZiAodGhpcy5jb250ZW50VmlldyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRlbnRWaWV3ID0gdGhpcy5jb250ZW50VmlldztcbiAgICAgIHZhciBhc3NpZ25lZFNsb3QgPSBlbGVtZW50LmF1QXNzaWduZWRTbG90O1xuXG4gICAgICBpZiAoYXNzaWduZWRTbG90ICYmIGFzc2lnbmVkU2xvdC5wcm9qZWN0RnJvbUFuY2hvcnMpIHtcbiAgICAgICAgdmFyIGFuY2hvcnMgPSBhc3NpZ25lZFNsb3QucHJvamVjdEZyb21BbmNob3JzO1xuXG4gICAgICAgIGZvciAodmFyIF9pMTEgPSAwLCBfaWkxMCA9IGFuY2hvcnMubGVuZ3RoOyBfaTExIDwgX2lpMTA7ICsrX2kxMSkge1xuICAgICAgICAgIGlmIChhbmNob3JzW19pMTFdLmF1T3duZXJWaWV3ID09PSBjb250ZW50Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudC5hdU93bmVyVmlldyA9PT0gY29udGVudFZpZXc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIENoaWxkT2JzZXJ2ZXJCaW5kZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHNvdXJjZSkge1xuICAgIGlmICh0aGlzLmlzQm91bmQpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gc291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cbiAgICB0aGlzLmlzQm91bmQgPSB0cnVlO1xuXG4gICAgdmFyIHZpZXdIb3N0ID0gdGhpcy52aWV3SG9zdDtcbiAgICB2YXIgdmlld01vZGVsID0gdGhpcy52aWV3TW9kZWw7XG4gICAgdmFyIG9ic2VydmVyID0gdmlld0hvc3QuX19jaGlsZE9ic2VydmVyX187XG5cbiAgICBpZiAoIW9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlciA9IHZpZXdIb3N0Ll9fY2hpbGRPYnNlcnZlcl9fID0gRE9NLmNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXIob25DaGlsZENoYW5nZSk7XG5cbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6ICF0aGlzLnVzZXNTaGFkb3dET01cbiAgICAgIH07XG5cbiAgICAgIG9ic2VydmVyLm9ic2VydmUodmlld0hvc3QsIG9wdGlvbnMpO1xuICAgICAgb2JzZXJ2ZXIuYmluZGVycyA9IFtdO1xuICAgIH1cblxuICAgIG9ic2VydmVyLmJpbmRlcnMucHVzaCh0aGlzKTtcblxuICAgIGlmICh0aGlzLnVzZXNTaGFkb3dET00pIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdmlld0hvc3QuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cbiAgICAgIGlmICh0aGlzLmFsbCkge1xuICAgICAgICB2YXIgaXRlbXMgPSB2aWV3TW9kZWxbdGhpcy5wcm9wZXJ0eV07XG4gICAgICAgIGlmICghaXRlbXMpIHtcbiAgICAgICAgICBpdGVtcyA9IHZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1zLnNwbGljZSgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgaWYgKHRoaXMubWF0Y2hlcyhjdXJyZW50KSkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChjdXJyZW50LmF1ICYmIGN1cnJlbnQuYXUuY29udHJvbGxlciA/IGN1cnJlbnQuYXUuY29udHJvbGxlci52aWV3TW9kZWwgOiBjdXJyZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jaGFuZ2VIYW5kbGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy52aWV3TW9kZWxbdGhpcy5jaGFuZ2VIYW5kbGVyXShub011dGF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgaWYgKHRoaXMubWF0Y2hlcyhjdXJyZW50KSkge1xuICAgICAgICAgICAgdmFyIF92YWx1ZSA9IGN1cnJlbnQuYXUgJiYgY3VycmVudC5hdS5jb250cm9sbGVyID8gY3VycmVudC5hdS5jb250cm9sbGVyLnZpZXdNb2RlbCA6IGN1cnJlbnQ7XG4gICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSA9IF92YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY2hhbmdlSGFuZGxlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLmNoYW5nZUhhbmRsZXJdKF92YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBDaGlsZE9ic2VydmVyQmluZGVyLnByb3RvdHlwZS5vblJlbW92ZSA9IGZ1bmN0aW9uIG9uUmVtb3ZlKGVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5tYXRjaGVzKGVsZW1lbnQpKSB7XG4gICAgICB2YXIgX3ZhbHVlMiA9IGVsZW1lbnQuYXUgJiYgZWxlbWVudC5hdS5jb250cm9sbGVyID8gZWxlbWVudC5hdS5jb250cm9sbGVyLnZpZXdNb2RlbCA6IGVsZW1lbnQ7XG5cbiAgICAgIGlmICh0aGlzLmFsbCkge1xuICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLnZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSB8fCAodGhpcy52aWV3TW9kZWxbdGhpcy5wcm9wZXJ0eV0gPSBbXSk7XG4gICAgICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoX3ZhbHVlMik7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMudmlld01vZGVsW3RoaXMucHJvcGVydHldO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gX3ZhbHVlMikge1xuICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNCb3VuZCAmJiB0aGlzLmNoYW5nZUhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnZpZXdNb2RlbFt0aGlzLmNoYW5nZUhhbmRsZXJdKF92YWx1ZTIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIENoaWxkT2JzZXJ2ZXJCaW5kZXIucHJvdG90eXBlLm9uQWRkID0gZnVuY3Rpb24gb25BZGQoZWxlbWVudCkge1xuICAgIGlmICh0aGlzLm1hdGNoZXMoZWxlbWVudCkpIHtcbiAgICAgIHZhciBfdmFsdWUzID0gZWxlbWVudC5hdSAmJiBlbGVtZW50LmF1LmNvbnRyb2xsZXIgPyBlbGVtZW50LmF1LmNvbnRyb2xsZXIudmlld01vZGVsIDogZWxlbWVudDtcblxuICAgICAgaWYgKHRoaXMuYWxsKSB7XG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMudmlld01vZGVsW3RoaXMucHJvcGVydHldIHx8ICh0aGlzLnZpZXdNb2RlbFt0aGlzLnByb3BlcnR5XSA9IFtdKTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RvciA9PT0gJyonKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChfdmFsdWUzKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBwcmV2ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuXG4gICAgICAgIHdoaWxlIChwcmV2KSB7XG4gICAgICAgICAgaWYgKHRoaXMubWF0Y2hlcyhwcmV2KSkge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmV2ID0gcHJldi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4LCAwLCBfdmFsdWUzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudmlld01vZGVsW3RoaXMucHJvcGVydHldID0gX3ZhbHVlMztcblxuICAgICAgaWYgKHRoaXMuaXNCb3VuZCAmJiB0aGlzLmNoYW5nZUhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy52aWV3TW9kZWxbdGhpcy5jaGFuZ2VIYW5kbGVyXShfdmFsdWUzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgQ2hpbGRPYnNlcnZlckJpbmRlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgIGlmICghdGhpcy5pc0JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNCb3VuZCA9IGZhbHNlO1xuICAgIHRoaXMuc291cmNlID0gbnVsbDtcbiAgICB2YXIgY2hpbGRPYnNlcnZlciA9IHRoaXMudmlld0hvc3QuX19jaGlsZE9ic2VydmVyX187XG4gICAgaWYgKGNoaWxkT2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBiaW5kZXJzID0gY2hpbGRPYnNlcnZlci5iaW5kZXJzO1xuICAgICAgaWYgKGJpbmRlcnMgJiYgYmluZGVycy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGlkeCA9IGJpbmRlcnMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICBiaW5kZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiaW5kZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNoaWxkT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMudmlld0hvc3QuX19jaGlsZE9ic2VydmVyX18gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnVzZXNTaGFkb3dET00pIHtcbiAgICAgICAgdGhpcy52aWV3TW9kZWxbdGhpcy5wcm9wZXJ0eV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ2hpbGRPYnNlcnZlckJpbmRlcjtcbn0oKTtcblxuZnVuY3Rpb24gcmVtb3ZlKHZpZXdTbG90LCBwcmV2aW91cykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShwcmV2aW91cykgPyB2aWV3U2xvdC5yZW1vdmVNYW55KHByZXZpb3VzLCB0cnVlKSA6IHZpZXdTbG90LnJlbW92ZShwcmV2aW91cywgdHJ1ZSk7XG59XG5cbmV4cG9ydCB2YXIgU3dhcFN0cmF0ZWdpZXMgPSB7XG4gIGJlZm9yZTogZnVuY3Rpb24gYmVmb3JlKHZpZXdTbG90LCBwcmV2aW91cywgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcHJldmlvdXMgPT09IHVuZGVmaW5lZCA/IGNhbGxiYWNrKCkgOiBjYWxsYmFjaygpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlbW92ZSh2aWV3U2xvdCwgcHJldmlvdXMpO1xuICAgIH0pO1xuICB9LFxuICB3aXRoOiBmdW5jdGlvbiBfd2l0aCh2aWV3U2xvdCwgcHJldmlvdXMsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHByZXZpb3VzID09PSB1bmRlZmluZWQgPyBjYWxsYmFjaygpIDogUHJvbWlzZS5hbGwoW3JlbW92ZSh2aWV3U2xvdCwgcHJldmlvdXMpLCBjYWxsYmFjaygpXSk7XG4gIH0sXG4gIGFmdGVyOiBmdW5jdGlvbiBhZnRlcih2aWV3U2xvdCwgcHJldmlvdXMsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2aWV3U2xvdC5yZW1vdmVBbGwodHJ1ZSkpLnRoZW4oY2FsbGJhY2spO1xuICB9XG59O1xuXG5mdW5jdGlvbiB0cnlBY3RpdmF0ZVZpZXdNb2RlbChjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0LnNraXBBY3RpdmF0aW9uIHx8IHR5cGVvZiBjb250ZXh0LnZpZXdNb2RlbC5hY3RpdmF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0LnZpZXdNb2RlbC5hY3RpdmF0ZShjb250ZXh0Lm1vZGVsKSB8fCBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuZXhwb3J0IHZhciBDb21wb3NpdGlvbkVuZ2luZSA9IChfZGVjOCA9IGluamVjdChWaWV3RW5naW5lLCBWaWV3TG9jYXRvciksIF9kZWM4KF9jbGFzczE2ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDb21wb3NpdGlvbkVuZ2luZSh2aWV3RW5naW5lLCB2aWV3TG9jYXRvcikge1xuICAgIFxuXG4gICAgdGhpcy52aWV3RW5naW5lID0gdmlld0VuZ2luZTtcbiAgICB0aGlzLnZpZXdMb2NhdG9yID0gdmlld0xvY2F0b3I7XG4gIH1cblxuICBDb21wb3NpdGlvbkVuZ2luZS5wcm90b3R5cGUuX3N3YXAgPSBmdW5jdGlvbiBfc3dhcChjb250ZXh0LCB2aWV3KSB7XG4gICAgdmFyIHN3YXBTdHJhdGVneSA9IFN3YXBTdHJhdGVnaWVzW2NvbnRleHQuc3dhcE9yZGVyXSB8fCBTd2FwU3RyYXRlZ2llcy5hZnRlcjtcbiAgICB2YXIgcHJldmlvdXNWaWV3cyA9IGNvbnRleHQudmlld1Nsb3QuY2hpbGRyZW4uc2xpY2UoKTtcblxuICAgIHJldHVybiBzd2FwU3RyYXRlZ3koY29udGV4dC52aWV3U2xvdCwgcHJldmlvdXNWaWV3cywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb250ZXh0LnZpZXdTbG90LmFkZCh2aWV3KSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjb250ZXh0LmN1cnJlbnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgY29udGV4dC5jdXJyZW50Q29udHJvbGxlci51bmJpbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uTm90aWZpZXIpIHtcbiAgICAgICAgY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uTm90aWZpZXIuZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIENvbXBvc2l0aW9uRW5naW5lLnByb3RvdHlwZS5fY3JlYXRlQ29udHJvbGxlckFuZFN3YXAgPSBmdW5jdGlvbiBfY3JlYXRlQ29udHJvbGxlckFuZFN3YXAoY29udGV4dCkge1xuICAgIHZhciBfdGhpczE1ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbnRyb2xsZXIoY29udGV4dCkudGhlbihmdW5jdGlvbiAoY29udHJvbGxlcikge1xuICAgICAgaWYgKGNvbnRleHQuY29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbi53YWl0Rm9yQ29tcG9zaXRpb25Db21wbGV0ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnRyb2xsZXIuYXV0b21hdGUoY29udGV4dC5vdmVycmlkZUNvbnRleHQsIGNvbnRleHQub3duaW5nVmlldyk7XG5cbiAgICAgICAgICByZXR1cm4gX3RoaXMxNS5fc3dhcChjb250ZXh0LCBjb250cm9sbGVyLnZpZXcpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRyb2xsZXIuYXV0b21hdGUoY29udGV4dC5vdmVycmlkZUNvbnRleHQsIGNvbnRleHQub3duaW5nVmlldyk7XG5cbiAgICAgIHJldHVybiBfdGhpczE1Ll9zd2FwKGNvbnRleHQsIGNvbnRyb2xsZXIudmlldykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgQ29tcG9zaXRpb25FbmdpbmUucHJvdG90eXBlLmNyZWF0ZUNvbnRyb2xsZXIgPSBmdW5jdGlvbiBjcmVhdGVDb250cm9sbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXMxNiA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRDb250YWluZXIgPSB2b2lkIDA7XG4gICAgdmFyIHZpZXdNb2RlbCA9IHZvaWQgMDtcbiAgICB2YXIgdmlld01vZGVsUmVzb3VyY2UgPSB2b2lkIDA7XG5cbiAgICB2YXIgbSA9IHZvaWQgMDtcblxuICAgIHJldHVybiB0aGlzLmVuc3VyZVZpZXdNb2RlbChjb250ZXh0KS50aGVuKHRyeUFjdGl2YXRlVmlld01vZGVsKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoaWxkQ29udGFpbmVyID0gY29udGV4dC5jaGlsZENvbnRhaW5lcjtcbiAgICAgIHZpZXdNb2RlbCA9IGNvbnRleHQudmlld01vZGVsO1xuICAgICAgdmlld01vZGVsUmVzb3VyY2UgPSBjb250ZXh0LnZpZXdNb2RlbFJlc291cmNlO1xuICAgICAgbSA9IHZpZXdNb2RlbFJlc291cmNlLm1ldGFkYXRhO1xuXG4gICAgICB2YXIgdmlld1N0cmF0ZWd5ID0gX3RoaXMxNi52aWV3TG9jYXRvci5nZXRWaWV3U3RyYXRlZ3koY29udGV4dC52aWV3IHx8IHZpZXdNb2RlbCk7XG5cbiAgICAgIGlmIChjb250ZXh0LnZpZXdSZXNvdXJjZXMpIHtcbiAgICAgICAgdmlld1N0cmF0ZWd5Lm1ha2VSZWxhdGl2ZVRvKGNvbnRleHQudmlld1Jlc291cmNlcy52aWV3VXJsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG0ubG9hZChjaGlsZENvbnRhaW5lciwgdmlld01vZGVsUmVzb3VyY2UudmFsdWUsIG51bGwsIHZpZXdTdHJhdGVneSwgdHJ1ZSk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmlld0ZhY3RvcnkpIHtcbiAgICAgIHJldHVybiBtLmNyZWF0ZShjaGlsZENvbnRhaW5lciwgQmVoYXZpb3JJbnN0cnVjdGlvbi5keW5hbWljKGNvbnRleHQuaG9zdCwgdmlld01vZGVsLCB2aWV3RmFjdG9yeSkpO1xuICAgIH0pO1xuICB9O1xuXG4gIENvbXBvc2l0aW9uRW5naW5lLnByb3RvdHlwZS5lbnN1cmVWaWV3TW9kZWwgPSBmdW5jdGlvbiBlbnN1cmVWaWV3TW9kZWwoY29udGV4dCkge1xuICAgIHZhciBjaGlsZENvbnRhaW5lciA9IGNvbnRleHQuY2hpbGRDb250YWluZXIgPSBjb250ZXh0LmNoaWxkQ29udGFpbmVyIHx8IGNvbnRleHQuY29udGFpbmVyLmNyZWF0ZUNoaWxkKCk7XG5cbiAgICBpZiAodHlwZW9mIGNvbnRleHQudmlld01vZGVsID09PSAnc3RyaW5nJykge1xuICAgICAgY29udGV4dC52aWV3TW9kZWwgPSBjb250ZXh0LnZpZXdSZXNvdXJjZXMgPyBjb250ZXh0LnZpZXdSZXNvdXJjZXMucmVsYXRpdmVUb1ZpZXcoY29udGV4dC52aWV3TW9kZWwpIDogY29udGV4dC52aWV3TW9kZWw7XG5cbiAgICAgIHJldHVybiB0aGlzLnZpZXdFbmdpbmUuaW1wb3J0Vmlld01vZGVsUmVzb3VyY2UoY29udGV4dC52aWV3TW9kZWwpLnRoZW4oZnVuY3Rpb24gKHZpZXdNb2RlbFJlc291cmNlKSB7XG4gICAgICAgIGNoaWxkQ29udGFpbmVyLmF1dG9SZWdpc3Rlcih2aWV3TW9kZWxSZXNvdXJjZS52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGNvbnRleHQuaG9zdCkge1xuICAgICAgICAgIGNoaWxkQ29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoRE9NLkVsZW1lbnQsIGNvbnRleHQuaG9zdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnZpZXdNb2RlbCA9IGNoaWxkQ29udGFpbmVyLnZpZXdNb2RlbCA9IGNoaWxkQ29udGFpbmVyLmdldCh2aWV3TW9kZWxSZXNvdXJjZS52YWx1ZSk7XG4gICAgICAgIGNvbnRleHQudmlld01vZGVsUmVzb3VyY2UgPSB2aWV3TW9kZWxSZXNvdXJjZTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgY3RvciA9IGNvbnRleHQudmlld01vZGVsLmNvbnN0cnVjdG9yO1xuICAgIHZhciBpc0NsYXNzID0gdHlwZW9mIGNvbnRleHQudmlld01vZGVsID09PSAnZnVuY3Rpb24nO1xuICAgIGlmIChpc0NsYXNzKSB7XG4gICAgICBjdG9yID0gY29udGV4dC52aWV3TW9kZWw7XG4gICAgICBjaGlsZENvbnRhaW5lci5hdXRvUmVnaXN0ZXIoY3Rvcik7XG4gICAgfVxuICAgIHZhciBtID0gbWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24obWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCBjdG9yKTtcblxuICAgIG0uZWxlbWVudE5hbWUgPSBtLmVsZW1lbnROYW1lIHx8ICdkeW5hbWljLWVsZW1lbnQnO1xuXG4gICAgbS5pbml0aWFsaXplKGlzQ2xhc3MgPyBjaGlsZENvbnRhaW5lciA6IGNvbnRleHQuY29udGFpbmVyIHx8IGNoaWxkQ29udGFpbmVyLCBjdG9yKTtcblxuICAgIGNvbnRleHQudmlld01vZGVsUmVzb3VyY2UgPSB7IG1ldGFkYXRhOiBtLCB2YWx1ZTogY3RvciB9O1xuXG4gICAgaWYgKGNvbnRleHQuaG9zdCkge1xuICAgICAgY2hpbGRDb250YWluZXIucmVnaXN0ZXJJbnN0YW5jZShET00uRWxlbWVudCwgY29udGV4dC5ob3N0KTtcbiAgICB9XG4gICAgY2hpbGRDb250YWluZXIudmlld01vZGVsID0gY29udGV4dC52aWV3TW9kZWwgPSBpc0NsYXNzID8gY2hpbGRDb250YWluZXIuZ2V0KGN0b3IpIDogY29udGV4dC52aWV3TW9kZWw7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb250ZXh0KTtcbiAgfTtcblxuICBDb21wb3NpdGlvbkVuZ2luZS5wcm90b3R5cGUuY29tcG9zZSA9IGZ1bmN0aW9uIGNvbXBvc2UoY29udGV4dCkge1xuICAgIHZhciBfdGhpczE3ID0gdGhpcztcblxuICAgIGNvbnRleHQuY2hpbGRDb250YWluZXIgPSBjb250ZXh0LmNoaWxkQ29udGFpbmVyIHx8IGNvbnRleHQuY29udGFpbmVyLmNyZWF0ZUNoaWxkKCk7XG4gICAgY29udGV4dC52aWV3ID0gdGhpcy52aWV3TG9jYXRvci5nZXRWaWV3U3RyYXRlZ3koY29udGV4dC52aWV3KTtcblxuICAgIHZhciB0cmFuc2FjdGlvbiA9IGNvbnRleHQuY2hpbGRDb250YWluZXIuZ2V0KENvbXBvc2l0aW9uVHJhbnNhY3Rpb24pO1xuICAgIHZhciBjb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4gPSB0cmFuc2FjdGlvbi50cnlDYXB0dXJlKCk7XG5cbiAgICBpZiAoY29tcG9zaXRpb25UcmFuc2FjdGlvbk93bmVyc2hpcFRva2VuKSB7XG4gICAgICBjb250ZXh0LmNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbiA9IGNvbXBvc2l0aW9uVHJhbnNhY3Rpb25Pd25lcnNoaXBUb2tlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uTm90aWZpZXIgPSB0cmFuc2FjdGlvbi5lbmxpc3QoKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC52aWV3TW9kZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVDb250cm9sbGVyQW5kU3dhcChjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQudmlldykge1xuICAgICAgaWYgKGNvbnRleHQudmlld1Jlc291cmNlcykge1xuICAgICAgICBjb250ZXh0LnZpZXcubWFrZVJlbGF0aXZlVG8oY29udGV4dC52aWV3UmVzb3VyY2VzLnZpZXdVcmwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGV4dC52aWV3LmxvYWRWaWV3RmFjdG9yeSh0aGlzLnZpZXdFbmdpbmUsIG5ldyBWaWV3Q29tcGlsZUluc3RydWN0aW9uKCkpLnRoZW4oZnVuY3Rpb24gKHZpZXdGYWN0b3J5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB2aWV3RmFjdG9yeS5jcmVhdGUoY29udGV4dC5jaGlsZENvbnRhaW5lcik7XG4gICAgICAgIHJlc3VsdC5iaW5kKGNvbnRleHQuYmluZGluZ0NvbnRleHQsIGNvbnRleHQub3ZlcnJpZGVDb250ZXh0KTtcblxuICAgICAgICBpZiAoY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5jb21wb3NpdGlvblRyYW5zYWN0aW9uT3duZXJzaGlwVG9rZW4ud2FpdEZvckNvbXBvc2l0aW9uQ29tcGxldGUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczE3Ll9zd2FwKGNvbnRleHQsIHJlc3VsdCk7XG4gICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMTcuX3N3YXAoY29udGV4dCwgcmVzdWx0KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dC52aWV3U2xvdCkge1xuICAgICAgY29udGV4dC52aWV3U2xvdC5yZW1vdmVBbGwoKTtcblxuICAgICAgaWYgKGNvbnRleHQuY29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyKSB7XG4gICAgICAgIGNvbnRleHQuY29tcG9zaXRpb25UcmFuc2FjdGlvbk5vdGlmaWVyLmRvbmUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9O1xuXG4gIHJldHVybiBDb21wb3NpdGlvbkVuZ2luZTtcbn0oKSkgfHwgX2NsYXNzMTYpO1xuXG5leHBvcnQgdmFyIEVsZW1lbnRDb25maWdSZXNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRWxlbWVudENvbmZpZ1Jlc291cmNlKCkge1xuICAgIFxuICB9XG5cbiAgRWxlbWVudENvbmZpZ1Jlc291cmNlLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gaW5pdGlhbGl6ZShjb250YWluZXIsIHRhcmdldCkge307XG5cbiAgRWxlbWVudENvbmZpZ1Jlc291cmNlLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyKHJlZ2lzdHJ5LCBuYW1lKSB7fTtcblxuICBFbGVtZW50Q29uZmlnUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiBsb2FkKGNvbnRhaW5lciwgdGFyZ2V0KSB7XG4gICAgdmFyIGNvbmZpZyA9IG5ldyB0YXJnZXQoKTtcbiAgICB2YXIgZXZlbnRNYW5hZ2VyID0gY29udGFpbmVyLmdldChFdmVudE1hbmFnZXIpO1xuICAgIGV2ZW50TWFuYWdlci5yZWdpc3RlckVsZW1lbnRDb25maWcoY29uZmlnKTtcbiAgfTtcblxuICByZXR1cm4gRWxlbWVudENvbmZpZ1Jlc291cmNlO1xufSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb3VyY2UoaW5zdGFuY2VPckNvbmZpZykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHZhciBpc0NvbmZpZyA9IHR5cGVvZiBpbnN0YW5jZU9yQ29uZmlnID09PSAnc3RyaW5nJyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdGFuY2VPckNvbmZpZykgPT09IE9iamVjdC5wcm90b3R5cGU7XG4gICAgaWYgKGlzQ29uZmlnKSB7XG4gICAgICB0YXJnZXQuJHJlc291cmNlID0gaW5zdGFuY2VPckNvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgbWV0YWRhdGEuZGVmaW5lKG1ldGFkYXRhLnJlc291cmNlLCBpbnN0YW5jZU9yQ29uZmlnLCB0YXJnZXQpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJlaGF2aW9yKG92ZXJyaWRlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgaWYgKG92ZXJyaWRlIGluc3RhbmNlb2YgSHRtbEJlaGF2aW9yUmVzb3VyY2UpIHtcbiAgICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5yZXNvdXJjZSwgb3ZlcnJpZGUsIHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByID0gbWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24obWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0YXJnZXQpO1xuICAgICAgT2JqZWN0LmFzc2lnbihyLCBvdmVycmlkZSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRWxlbWVudChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHRhcmdldCk7XG4gICAgci5lbGVtZW50TmFtZSA9IHZhbGlkYXRlQmVoYXZpb3JOYW1lKG5hbWUsICdjdXN0b20gZWxlbWVudCcpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tQXR0cmlidXRlKG5hbWUsIGRlZmF1bHRCaW5kaW5nTW9kZSwgYWxpYXNlcykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHZhciByID0gbWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24obWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0YXJnZXQpO1xuICAgIHIuYXR0cmlidXRlTmFtZSA9IHZhbGlkYXRlQmVoYXZpb3JOYW1lKG5hbWUsICdjdXN0b20gYXR0cmlidXRlJyk7XG4gICAgci5hdHRyaWJ1dGVEZWZhdWx0QmluZGluZ01vZGUgPSBkZWZhdWx0QmluZGluZ01vZGU7XG4gICAgci5hbGlhc2VzID0gYWxpYXNlcztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlQ29udHJvbGxlcih0YXJnZXQpIHtcbiAgdmFyIGRlY28gPSBmdW5jdGlvbiBkZWNvKHQpIHtcbiAgICB2YXIgciA9IG1ldGFkYXRhLmdldE9yQ3JlYXRlT3duKG1ldGFkYXRhLnJlc291cmNlLCBIdG1sQmVoYXZpb3JSZXNvdXJjZSwgdCk7XG4gICAgci5saWZ0c0NvbnRlbnQgPSB0cnVlO1xuICB9O1xuXG4gIHJldHVybiB0YXJnZXQgPyBkZWNvKHRhcmdldCkgOiBkZWNvO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGFibGUobmFtZU9yQ29uZmlnT3JUYXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICB2YXIgZGVjbyA9IGZ1bmN0aW9uIGRlY28odGFyZ2V0LCBrZXkyLCBkZXNjcmlwdG9yMikge1xuICAgIHZhciBhY3R1YWxUYXJnZXQgPSBrZXkyID8gdGFyZ2V0LmNvbnN0cnVjdG9yIDogdGFyZ2V0O1xuICAgIHZhciByID0gbWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24obWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCBhY3R1YWxUYXJnZXQpO1xuICAgIHZhciBwcm9wID0gdm9pZCAwO1xuXG4gICAgaWYgKGtleTIpIHtcbiAgICAgIG5hbWVPckNvbmZpZ09yVGFyZ2V0ID0gbmFtZU9yQ29uZmlnT3JUYXJnZXQgfHwge307XG4gICAgICBuYW1lT3JDb25maWdPclRhcmdldC5uYW1lID0ga2V5MjtcbiAgICB9XG5cbiAgICBwcm9wID0gbmV3IEJpbmRhYmxlUHJvcGVydHkobmFtZU9yQ29uZmlnT3JUYXJnZXQpO1xuICAgIHJldHVybiBwcm9wLnJlZ2lzdGVyV2l0aChhY3R1YWxUYXJnZXQsIHIsIGRlc2NyaXB0b3IyKTtcbiAgfTtcblxuICBpZiAoIW5hbWVPckNvbmZpZ09yVGFyZ2V0KSB7XG4gICAgcmV0dXJuIGRlY287XG4gIH1cblxuICBpZiAoa2V5KSB7XG4gICAgdmFyIF90YXJnZXQgPSBuYW1lT3JDb25maWdPclRhcmdldDtcbiAgICBuYW1lT3JDb25maWdPclRhcmdldCA9IG51bGw7XG4gICAgcmV0dXJuIGRlY28oX3RhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxuXG4gIHJldHVybiBkZWNvO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHluYW1pY09wdGlvbnModGFyZ2V0KSB7XG4gIHZhciBkZWNvID0gZnVuY3Rpb24gZGVjbyh0KSB7XG4gICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHQpO1xuICAgIHIuaGFzRHluYW1pY09wdGlvbnMgPSB0cnVlO1xuICB9O1xuXG4gIHJldHVybiB0YXJnZXQgPyBkZWNvKHRhcmdldCkgOiBkZWNvO1xufVxuXG52YXIgZGVmYXVsdFNoYWRvd0RPTU9wdGlvbnMgPSB7IG1vZGU6ICdvcGVuJyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2hhZG93RE9NKHRhcmdldE9yT3B0aW9ucykge1xuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiB0YXJnZXRPck9wdGlvbnMgPT09ICdmdW5jdGlvbicgfHwgIXRhcmdldE9yT3B0aW9ucyA/IGRlZmF1bHRTaGFkb3dET01PcHRpb25zIDogdGFyZ2V0T3JPcHRpb25zO1xuXG4gIHZhciBkZWNvID0gZnVuY3Rpb24gZGVjbyh0KSB7XG4gICAgdmFyIHIgPSBtZXRhZGF0YS5nZXRPckNyZWF0ZU93bihtZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHQpO1xuICAgIHIudGFyZ2V0U2hhZG93RE9NID0gdHJ1ZTtcbiAgICByLnNoYWRvd0RPTU9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIHJldHVybiB0eXBlb2YgdGFyZ2V0T3JPcHRpb25zID09PSAnZnVuY3Rpb24nID8gZGVjbyh0YXJnZXRPck9wdGlvbnMpIDogZGVjbztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBdHRyaWJ1dGVzKHByb2Nlc3Nvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgciA9IG1ldGFkYXRhLmdldE9yQ3JlYXRlT3duKG1ldGFkYXRhLnJlc291cmNlLCBIdG1sQmVoYXZpb3JSZXNvdXJjZSwgdCk7XG4gICAgci5wcm9jZXNzQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChjb21waWxlciwgcmVzb3VyY2VzLCBub2RlLCBhdHRyaWJ1dGVzLCBlbGVtZW50SW5zdHJ1Y3Rpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3Nvcihjb21waWxlciwgcmVzb3VyY2VzLCBub2RlLCBhdHRyaWJ1dGVzLCBlbGVtZW50SW5zdHJ1Y3Rpb24pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgTG9nTWFuYWdlci5nZXRMb2dnZXIoJ3RlbXBsYXRpbmcnKS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZG9Ob3RQcm9jZXNzQ29udGVudCgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbnRlbnQocHJvY2Vzc29yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodCkge1xuICAgIHZhciByID0gbWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24obWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0KTtcbiAgICByLnByb2Nlc3NDb250ZW50ID0gcHJvY2Vzc29yID8gZnVuY3Rpb24gKGNvbXBpbGVyLCByZXNvdXJjZXMsIG5vZGUsIGluc3RydWN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc29yKGNvbXBpbGVyLCByZXNvdXJjZXMsIG5vZGUsIGluc3RydWN0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCd0ZW1wbGF0aW5nJykuZXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSA6IGRvTm90UHJvY2Vzc0NvbnRlbnQ7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZXJsZXNzKHRhcmdldCkge1xuICB2YXIgZGVjbyA9IGZ1bmN0aW9uIGRlY28odCkge1xuICAgIHZhciByID0gbWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24obWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0KTtcbiAgICByLmNvbnRhaW5lcmxlc3MgPSB0cnVlO1xuICB9O1xuXG4gIHJldHVybiB0YXJnZXQgPyBkZWNvKHRhcmdldCkgOiBkZWNvO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVmlld1N0cmF0ZWd5KHN0cmF0ZWd5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgbWV0YWRhdGEuZGVmaW5lKFZpZXdMb2NhdG9yLnZpZXdTdHJhdGVneU1ldGFkYXRhS2V5LCBzdHJhdGVneSwgdGFyZ2V0KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVZpZXcocGF0aCkge1xuICByZXR1cm4gdXNlVmlld1N0cmF0ZWd5KG5ldyBSZWxhdGl2ZVZpZXdTdHJhdGVneShwYXRoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmxpbmVWaWV3KG1hcmt1cCwgZGVwZW5kZW5jaWVzLCBkZXBlbmRlbmN5QmFzZVVybCkge1xuICByZXR1cm4gdXNlVmlld1N0cmF0ZWd5KG5ldyBJbmxpbmVWaWV3U3RyYXRlZ3kobWFya3VwLCBkZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3lCYXNlVXJsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub1ZpZXcodGFyZ2V0T3JEZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3lCYXNlVXJsKSB7XG4gIHZhciB0YXJnZXQgPSB2b2lkIDA7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG4gIGlmICh0eXBlb2YgdGFyZ2V0T3JEZXBlbmRlbmNpZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0YXJnZXQgPSB0YXJnZXRPckRlcGVuZGVuY2llcztcbiAgfSBlbHNlIHtcbiAgICBkZXBlbmRlbmNpZXMgPSB0YXJnZXRPckRlcGVuZGVuY2llcztcbiAgICB0YXJnZXQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgZGVjbyA9IGZ1bmN0aW9uIGRlY28odCkge1xuICAgIG1ldGFkYXRhLmRlZmluZShWaWV3TG9jYXRvci52aWV3U3RyYXRlZ3lNZXRhZGF0YUtleSwgbmV3IE5vVmlld1N0cmF0ZWd5KGRlcGVuZGVuY2llcywgZGVwZW5kZW5jeUJhc2VVcmwpLCB0KTtcbiAgfTtcblxuICByZXR1cm4gdGFyZ2V0ID8gZGVjbyh0YXJnZXQpIDogZGVjbztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZpZXcodGVtcGxhdGVPckNvbmZpZykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHRhcmdldC4kdmlldyA9IHRlbXBsYXRlT3JDb25maWc7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50Q29uZmlnKHRhcmdldCkge1xuICB2YXIgZGVjbyA9IGZ1bmN0aW9uIGRlY28odCkge1xuICAgIG1ldGFkYXRhLmRlZmluZShtZXRhZGF0YS5yZXNvdXJjZSwgbmV3IEVsZW1lbnRDb25maWdSZXNvdXJjZSgpLCB0KTtcbiAgfTtcblxuICByZXR1cm4gdGFyZ2V0ID8gZGVjbyh0YXJnZXQpIDogZGVjbztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZpZXdSZXNvdXJjZXMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXNvdXJjZXMgPSBBcnJheShfbGVuKSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW47IF9rZXk3KyspIHtcbiAgICByZXNvdXJjZXNbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgbWV0YWRhdGEuZGVmaW5lKFZpZXdFbmdpbmUudmlld01vZGVsUmVxdWlyZU1ldGFkYXRhS2V5LCByZXNvdXJjZXMsIHRhcmdldCk7XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgVGVtcGxhdGluZ0VuZ2luZSA9IChfZGVjOSA9IGluamVjdChDb250YWluZXIsIE1vZHVsZUFuYWx5emVyLCBWaWV3Q29tcGlsZXIsIENvbXBvc2l0aW9uRW5naW5lKSwgX2RlYzkoX2NsYXNzMTcgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRlbXBsYXRpbmdFbmdpbmUoY29udGFpbmVyLCBtb2R1bGVBbmFseXplciwgdmlld0NvbXBpbGVyLCBjb21wb3NpdGlvbkVuZ2luZSkge1xuICAgIFxuXG4gICAgdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIHRoaXMuX21vZHVsZUFuYWx5emVyID0gbW9kdWxlQW5hbHl6ZXI7XG4gICAgdGhpcy5fdmlld0NvbXBpbGVyID0gdmlld0NvbXBpbGVyO1xuICAgIHRoaXMuX2NvbXBvc2l0aW9uRW5naW5lID0gY29tcG9zaXRpb25FbmdpbmU7XG4gICAgY29udGFpbmVyLnJlZ2lzdGVySW5zdGFuY2UoQW5pbWF0b3IsIEFuaW1hdG9yLmluc3RhbmNlID0gbmV3IEFuaW1hdG9yKCkpO1xuICB9XG5cbiAgVGVtcGxhdGluZ0VuZ2luZS5wcm90b3R5cGUuY29uZmlndXJlQW5pbWF0b3IgPSBmdW5jdGlvbiBjb25maWd1cmVBbmltYXRvcihhbmltYXRvcikge1xuICAgIHRoaXMuX2NvbnRhaW5lci51bnJlZ2lzdGVyKEFuaW1hdG9yKTtcbiAgICB0aGlzLl9jb250YWluZXIucmVnaXN0ZXJJbnN0YW5jZShBbmltYXRvciwgQW5pbWF0b3IuaW5zdGFuY2UgPSBhbmltYXRvcik7XG4gIH07XG5cbiAgVGVtcGxhdGluZ0VuZ2luZS5wcm90b3R5cGUuY29tcG9zZSA9IGZ1bmN0aW9uIGNvbXBvc2UoY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wb3NpdGlvbkVuZ2luZS5jb21wb3NlKGNvbnRleHQpO1xuICB9O1xuXG4gIFRlbXBsYXRpbmdFbmdpbmUucHJvdG90eXBlLmVuaGFuY2UgPSBmdW5jdGlvbiBlbmhhbmNlKGluc3RydWN0aW9uKSB7XG4gICAgaWYgKGluc3RydWN0aW9uIGluc3RhbmNlb2YgRE9NLkVsZW1lbnQpIHtcbiAgICAgIGluc3RydWN0aW9uID0geyBlbGVtZW50OiBpbnN0cnVjdGlvbiB9O1xuICAgIH1cblxuICAgIHZhciBjb21waWxlckluc3RydWN0aW9ucyA9IHsgbGV0RXhwcmVzc2lvbnM6IFtdIH07XG4gICAgdmFyIHJlc291cmNlcyA9IGluc3RydWN0aW9uLnJlc291cmNlcyB8fCB0aGlzLl9jb250YWluZXIuZ2V0KFZpZXdSZXNvdXJjZXMpO1xuXG4gICAgdGhpcy5fdmlld0NvbXBpbGVyLl9jb21waWxlTm9kZShpbnN0cnVjdGlvbi5lbGVtZW50LCByZXNvdXJjZXMsIGNvbXBpbGVySW5zdHJ1Y3Rpb25zLCBpbnN0cnVjdGlvbi5lbGVtZW50LnBhcmVudE5vZGUsICdyb290JywgdHJ1ZSk7XG5cbiAgICB2YXIgZmFjdG9yeSA9IG5ldyBWaWV3RmFjdG9yeShpbnN0cnVjdGlvbi5lbGVtZW50LCBjb21waWxlckluc3RydWN0aW9ucywgcmVzb3VyY2VzKTtcbiAgICB2YXIgY29udGFpbmVyID0gaW5zdHJ1Y3Rpb24uY29udGFpbmVyIHx8IHRoaXMuX2NvbnRhaW5lci5jcmVhdGVDaGlsZCgpO1xuICAgIHZhciB2aWV3ID0gZmFjdG9yeS5jcmVhdGUoY29udGFpbmVyLCBCZWhhdmlvckluc3RydWN0aW9uLmVuaGFuY2UoKSk7XG5cbiAgICB2aWV3LmJpbmQoaW5zdHJ1Y3Rpb24uYmluZGluZ0NvbnRleHQgfHwge30sIGluc3RydWN0aW9uLm92ZXJyaWRlQ29udGV4dCk7XG5cbiAgICB2aWV3LmZpcnN0Q2hpbGQgPSB2aWV3Lmxhc3RDaGlsZCA9IHZpZXcuZnJhZ21lbnQ7XG4gICAgdmlldy5mcmFnbWVudCA9IERPTS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgdmlldy5hdHRhY2hlZCgpO1xuXG4gICAgcmV0dXJuIHZpZXc7XG4gIH07XG5cbiAgcmV0dXJuIFRlbXBsYXRpbmdFbmdpbmU7XG59KCkpIHx8IF9jbGFzczE3KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/aurelia-templating/dist/native-modules/aurelia-templating.js\n"); /***/ }), /***/ "./node_modules/aurelia-testing/dist/native-modules/component-tester.js": /*!******************************************************************************!*\ !*** ./node_modules/aurelia-testing/dist/native-modules/component-tester.js ***! \******************************************************************************/ /*! exports provided: StageComponent, ComponentTester */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(Promise) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StageComponent\", function() { return StageComponent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentTester\", function() { return ComponentTester; });\n/* harmony import */ var aurelia_templating__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-templating */ \"./node_modules/aurelia-templating/dist/native-modules/aurelia-templating.js\");\n/* harmony import */ var _wait__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./wait */ \"./node_modules/aurelia-testing/dist/native-modules/wait.js\");\n\n\nvar StageComponent = /** @class */ (function () {\n function StageComponent() {\n }\n StageComponent.withResources = function (resources) {\n if (resources === void 0) { resources = []; }\n return new ComponentTester().withResources(resources);\n };\n return StageComponent;\n}());\n\nvar ComponentTester = /** @class */ (function () {\n function ComponentTester() {\n this.resources = [];\n }\n ComponentTester.prototype.configure = function (aurelia) {\n return aurelia.use.standardConfiguration();\n };\n ComponentTester.prototype.bootstrap = function (configure) {\n this.configure = configure;\n };\n ComponentTester.prototype.withResources = function (resources) {\n this.resources = resources;\n return this;\n };\n ComponentTester.prototype.inView = function (html) {\n this.html = html;\n return this;\n };\n ComponentTester.prototype.boundTo = function (bindingContext) {\n this.bindingContext = bindingContext;\n return this;\n };\n ComponentTester.prototype.manuallyHandleLifecycle = function () {\n this._prepareLifecycle();\n return this;\n };\n ComponentTester.prototype.create = function (bootstrap) {\n var _this = this;\n return bootstrap(function (aurelia) {\n return Promise.resolve(_this.configure(aurelia)).then(function () {\n if (_this.resources) {\n aurelia.use.globalResources(_this.resources);\n }\n return aurelia.start().then(function () {\n _this.host = document.createElement('div');\n _this.host.innerHTML = _this.html;\n document.body.appendChild(_this.host);\n return aurelia.enhance(_this.bindingContext, _this.host).then(function () {\n _this.rootView = aurelia.root;\n _this.element = _this.host.firstElementChild;\n if (aurelia.root.controllers.length) {\n _this.viewModel = aurelia.root.controllers[0].viewModel;\n }\n return new Promise(function (resolve) { return setTimeout(function () { return resolve(); }, 0); });\n });\n });\n });\n });\n };\n ComponentTester.prototype.dispose = function () {\n if (this.host === undefined || this.rootView === undefined) {\n throw new Error('Cannot call ComponentTester.dispose() before ComponentTester.create()');\n }\n this.rootView.detached();\n this.rootView.unbind();\n return this.host.parentNode.removeChild(this.host);\n };\n ComponentTester.prototype._prepareLifecycle = function () {\n var _this = this;\n // bind\n var bindPrototype = aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[\"View\"].prototype.bind;\n // tslint:disable-next-line:no-empty\n aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[\"View\"].prototype.bind = function () { };\n this.bind = function (bindingContext) { return new Promise(function (resolve) {\n aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[\"View\"].prototype.bind = bindPrototype;\n if (bindingContext !== undefined) {\n _this.bindingContext = bindingContext;\n }\n _this.rootView.bind(_this.bindingContext);\n setTimeout(function () { return resolve(); }, 0);\n }); };\n // attached\n var attachedPrototype = aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[\"View\"].prototype.attached;\n // tslint:disable-next-line:no-empty\n aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[\"View\"].prototype.attached = function () { };\n this.attached = function () { return new Promise(function (resolve) {\n aurelia_templating__WEBPACK_IMPORTED_MODULE_0__[\"View\"].prototype.attached = attachedPrototype;\n _this.rootView.attached();\n setTimeout(function () { return resolve(); }, 0);\n }); };\n // detached\n this.detached = function () { return new Promise(function (resolve) {\n _this.rootView.detached();\n setTimeout(function () { return resolve(); }, 0);\n }); };\n // unbind\n this.unbind = function () { return new Promise(function (resolve) {\n _this.rootView.unbind();\n setTimeout(function () { return resolve(); }, 0);\n }); };\n };\n ComponentTester.prototype.waitForElement = function (selector, options) {\n var _this = this;\n return Object(_wait__WEBPACK_IMPORTED_MODULE_1__[\"waitFor\"])(function () { return _this.element.querySelector(selector); }, options);\n };\n ComponentTester.prototype.waitForElements = function (selector, options) {\n var _this = this;\n return Object(_wait__WEBPACK_IMPORTED_MODULE_1__[\"waitFor\"])(function () { return _this.element.querySelectorAll(selector); }, options);\n };\n return ComponentTester;\n}());\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! bluebird */ \"./node_modules/bluebird/js/browser/bluebird.js-exposed\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10ZXN0aW5nL2Rpc3QvbmF0aXZlLW1vZHVsZXMvY29tcG9uZW50LXRlc3Rlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hdXJlbGlhLXRlc3RpbmcvZGlzdC9uYXRpdmUtbW9kdWxlcy9jb21wb25lbnQtdGVzdGVyLmpzPzQ1OWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlldyB9IGZyb20gJ2F1cmVsaWEtdGVtcGxhdGluZyc7XG5pbXBvcnQgeyB3YWl0Rm9yIH0gZnJvbSAnLi93YWl0JztcbnZhciBTdGFnZUNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdGFnZUNvbXBvbmVudCgpIHtcbiAgICB9XG4gICAgU3RhZ2VDb21wb25lbnQud2l0aFJlc291cmNlcyA9IGZ1bmN0aW9uIChyZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKHJlc291cmNlcyA9PT0gdm9pZCAwKSB7IHJlc291cmNlcyA9IFtdOyB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50VGVzdGVyKCkud2l0aFJlc291cmNlcyhyZXNvdXJjZXMpO1xuICAgIH07XG4gICAgcmV0dXJuIFN0YWdlQ29tcG9uZW50O1xufSgpKTtcbmV4cG9ydCB7IFN0YWdlQ29tcG9uZW50IH07XG52YXIgQ29tcG9uZW50VGVzdGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbXBvbmVudFRlc3RlcigpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXMgPSBbXTtcbiAgICB9XG4gICAgQ29tcG9uZW50VGVzdGVyLnByb3RvdHlwZS5jb25maWd1cmUgPSBmdW5jdGlvbiAoYXVyZWxpYSkge1xuICAgICAgICByZXR1cm4gYXVyZWxpYS51c2Uuc3RhbmRhcmRDb25maWd1cmF0aW9uKCk7XG4gICAgfTtcbiAgICBDb21wb25lbnRUZXN0ZXIucHJvdG90eXBlLmJvb3RzdHJhcCA9IGZ1bmN0aW9uIChjb25maWd1cmUpIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmUgPSBjb25maWd1cmU7XG4gICAgfTtcbiAgICBDb21wb25lbnRUZXN0ZXIucHJvdG90eXBlLndpdGhSZXNvdXJjZXMgPSBmdW5jdGlvbiAocmVzb3VyY2VzKSB7XG4gICAgICAgIHRoaXMucmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIENvbXBvbmVudFRlc3Rlci5wcm90b3R5cGUuaW5WaWV3ID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBDb21wb25lbnRUZXN0ZXIucHJvdG90eXBlLmJvdW5kVG8gPSBmdW5jdGlvbiAoYmluZGluZ0NvbnRleHQpIHtcbiAgICAgICAgdGhpcy5iaW5kaW5nQ29udGV4dCA9IGJpbmRpbmdDb250ZXh0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIENvbXBvbmVudFRlc3Rlci5wcm90b3R5cGUubWFudWFsbHlIYW5kbGVMaWZlY3ljbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVMaWZlY3ljbGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBDb21wb25lbnRUZXN0ZXIucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChib290c3RyYXApIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGJvb3RzdHJhcChmdW5jdGlvbiAoYXVyZWxpYSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShfdGhpcy5jb25maWd1cmUoYXVyZWxpYSkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5yZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXVyZWxpYS51c2UuZ2xvYmFsUmVzb3VyY2VzKF90aGlzLnJlc291cmNlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhdXJlbGlhLnN0YXJ0KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuaG9zdC5pbm5lckhUTUwgPSBfdGhpcy5odG1sO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF90aGlzLmhvc3QpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXVyZWxpYS5lbmhhbmNlKF90aGlzLmJpbmRpbmdDb250ZXh0LCBfdGhpcy5ob3N0KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJvb3RWaWV3ID0gYXVyZWxpYS5yb290O1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZWxlbWVudCA9IF90aGlzLmhvc3QuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXVyZWxpYS5yb290LmNvbnRyb2xsZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnZpZXdNb2RlbCA9IGF1cmVsaWEucm9vdC5jb250cm9sbGVyc1swXS52aWV3TW9kZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSgpOyB9LCAwKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29tcG9uZW50VGVzdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5ob3N0ID09PSB1bmRlZmluZWQgfHwgdGhpcy5yb290VmlldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIENvbXBvbmVudFRlc3Rlci5kaXNwb3NlKCkgYmVmb3JlIENvbXBvbmVudFRlc3Rlci5jcmVhdGUoKScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9vdFZpZXcuZGV0YWNoZWQoKTtcbiAgICAgICAgdGhpcy5yb290Vmlldy51bmJpbmQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9zdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuaG9zdCk7XG4gICAgfTtcbiAgICBDb21wb25lbnRUZXN0ZXIucHJvdG90eXBlLl9wcmVwYXJlTGlmZWN5Y2xlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAvLyBiaW5kXG4gICAgICAgIHZhciBiaW5kUHJvdG90eXBlID0gVmlldy5wcm90b3R5cGUuYmluZDtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5XG4gICAgICAgIFZpZXcucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgIHRoaXMuYmluZCA9IGZ1bmN0aW9uIChiaW5kaW5nQ29udGV4dCkgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIFZpZXcucHJvdG90eXBlLmJpbmQgPSBiaW5kUHJvdG90eXBlO1xuICAgICAgICAgICAgaWYgKGJpbmRpbmdDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5iaW5kaW5nQ29udGV4dCA9IGJpbmRpbmdDb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMucm9vdFZpZXcuYmluZChfdGhpcy5iaW5kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUoKTsgfSwgMCk7XG4gICAgICAgIH0pOyB9O1xuICAgICAgICAvLyBhdHRhY2hlZFxuICAgICAgICB2YXIgYXR0YWNoZWRQcm90b3R5cGUgPSBWaWV3LnByb3RvdHlwZS5hdHRhY2hlZDtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5XG4gICAgICAgIFZpZXcucHJvdG90eXBlLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgICAgICB0aGlzLmF0dGFjaGVkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIFZpZXcucHJvdG90eXBlLmF0dGFjaGVkID0gYXR0YWNoZWRQcm90b3R5cGU7XG4gICAgICAgICAgICBfdGhpcy5yb290Vmlldy5hdHRhY2hlZCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKCk7IH0sIDApO1xuICAgICAgICB9KTsgfTtcbiAgICAgICAgLy8gZGV0YWNoZWRcbiAgICAgICAgdGhpcy5kZXRhY2hlZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBfdGhpcy5yb290Vmlldy5kZXRhY2hlZCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKCk7IH0sIDApO1xuICAgICAgICB9KTsgfTtcbiAgICAgICAgLy8gdW5iaW5kXG4gICAgICAgIHRoaXMudW5iaW5kID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIF90aGlzLnJvb3RWaWV3LnVuYmluZCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKCk7IH0sIDApO1xuICAgICAgICB9KTsgfTtcbiAgICB9O1xuICAgIENvbXBvbmVudFRlc3Rlci5wcm90b3R5cGUud2FpdEZvckVsZW1lbnQgPSBmdW5jdGlvbiAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHdhaXRGb3IoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBDb21wb25lbnRUZXN0ZXIucHJvdG90eXBlLndhaXRGb3JFbGVtZW50cyA9IGZ1bmN0aW9uIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gd2FpdEZvcihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9LCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBDb21wb25lbnRUZXN0ZXI7XG59KCkpO1xuZXhwb3J0IHsgQ29tcG9uZW50VGVzdGVyIH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/aurelia-testing/dist/native-modules/component-tester.js\n"); /***/ }), /***/ "./node_modules/aurelia-testing/dist/native-modules/wait.js": /*!******************************************************************!*\ !*** ./node_modules/aurelia-testing/dist/native-modules/wait.js ***! \******************************************************************/ /*! exports provided: waitFor, waitForDocumentElement, waitForDocumentElements */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(Promise) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"waitFor\", function() { return waitFor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"waitForDocumentElement\", function() { return waitForDocumentElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"waitForDocumentElements\", function() { return waitForDocumentElements; });\nvar __assign = (undefined && undefined.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\n/**\n * Generic function to wait for something to happen. Uses polling\n * @param getter: a getter function that returns anything else than `null` or an\n * empty array or an empty jQuery object when the\n * condition is met\n * @param options: lookup options, defaults to\n * `{present: true, interval: 50, timeout: 5000}`\n */\nfunction waitFor(getter, options) {\n if (options === void 0) { options = { present: true, interval: 50, timeout: 5000 }; }\n // prevents infinite recursion if the request times out\n var timedOut = false;\n options = __assign({ present: true, interval: 50, timeout: 5000 }, options);\n function wait() {\n var element = getter();\n // boolean is needed here, hence the length > 0\n var found = element !== null && (!(element instanceof NodeList) &&\n !element.jquery || element.length > 0);\n if (!options.present === !found || timedOut) {\n return Promise.resolve(element);\n }\n return new Promise(function (rs) { return setTimeout(rs, options.interval); }).then(wait);\n }\n return Promise.race([\n new Promise(function (_, rj) { return setTimeout(function () {\n timedOut = true;\n rj(new Error(options.present ? 'Element not found' : 'Element not removed'));\n }, options.timeout); }),\n wait()\n ]);\n}\nfunction waitForDocumentElement(selector, options) {\n return waitFor(function () { return document.querySelector(selector); }, options);\n}\nfunction waitForDocumentElements(selector, options) {\n return waitFor(function () { return document.querySelectorAll(selector); }, options);\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! bluebird */ \"./node_modules/bluebird/js/browser/bluebird.js-exposed\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS10ZXN0aW5nL2Rpc3QvbmF0aXZlLW1vZHVsZXMvd2FpdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hdXJlbGlhLXRlc3RpbmcvZGlzdC9uYXRpdmUtbW9kdWxlcy93YWl0LmpzPzQyMDUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG4vKipcbiAqIEdlbmVyaWMgZnVuY3Rpb24gdG8gd2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbi4gVXNlcyBwb2xsaW5nXG4gKiBAcGFyYW0gZ2V0dGVyOiBhIGdldHRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW55dGhpbmcgZWxzZSB0aGFuIGBudWxsYCBvciBhblxuICogICAgICAgICAgICAgICAgZW1wdHkgYXJyYXkgb3IgYW4gZW1wdHkgalF1ZXJ5IG9iamVjdCB3aGVuIHRoZVxuICogICAgICAgICAgICAgICAgY29uZGl0aW9uIGlzIG1ldFxuICogQHBhcmFtIG9wdGlvbnM6IGxvb2t1cCBvcHRpb25zLCBkZWZhdWx0cyB0b1xuICogICAgICAgICAgICAgICAgIGB7cHJlc2VudDogdHJ1ZSwgaW50ZXJ2YWw6IDUwLCB0aW1lb3V0OiA1MDAwfWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRGb3IoZ2V0dGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0geyBwcmVzZW50OiB0cnVlLCBpbnRlcnZhbDogNTAsIHRpbWVvdXQ6IDUwMDAgfTsgfVxuICAgIC8vIHByZXZlbnRzIGluZmluaXRlIHJlY3Vyc2lvbiBpZiB0aGUgcmVxdWVzdCB0aW1lcyBvdXRcbiAgICB2YXIgdGltZWRPdXQgPSBmYWxzZTtcbiAgICBvcHRpb25zID0gX19hc3NpZ24oeyBwcmVzZW50OiB0cnVlLCBpbnRlcnZhbDogNTAsIHRpbWVvdXQ6IDUwMDAgfSwgb3B0aW9ucyk7XG4gICAgZnVuY3Rpb24gd2FpdCgpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBnZXR0ZXIoKTtcbiAgICAgICAgLy8gYm9vbGVhbiBpcyBuZWVkZWQgaGVyZSwgaGVuY2UgdGhlIGxlbmd0aCA+IDBcbiAgICAgICAgdmFyIGZvdW5kID0gZWxlbWVudCAhPT0gbnVsbCAmJiAoIShlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpICYmXG4gICAgICAgICAgICAhZWxlbWVudC5qcXVlcnkgfHwgZWxlbWVudC5sZW5ndGggPiAwKTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnByZXNlbnQgPT09ICFmb3VuZCB8fCB0aW1lZE91dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJzKSB7IHJldHVybiBzZXRUaW1lb3V0KHJzLCBvcHRpb25zLmludGVydmFsKTsgfSkudGhlbih3YWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbXG4gICAgICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChfLCByaikgeyByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICByaihuZXcgRXJyb3Iob3B0aW9ucy5wcmVzZW50ID8gJ0VsZW1lbnQgbm90IGZvdW5kJyA6ICdFbGVtZW50IG5vdCByZW1vdmVkJykpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpOyB9KSxcbiAgICAgICAgd2FpdCgpXG4gICAgXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2FpdEZvckRvY3VtZW50RWxlbWVudChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgIHJldHVybiB3YWl0Rm9yKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LCBvcHRpb25zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3YWl0Rm9yRG9jdW1lbnRFbGVtZW50cyhzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgIHJldHVybiB3YWl0Rm9yKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9LCBvcHRpb25zKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/aurelia-testing/dist/native-modules/wait.js\n"); /***/ }), /***/ "./node_modules/aurelia-webpack-plugin/runtime/empty-entry.js": /*!********************************************************************!*\ !*** ./node_modules/aurelia-webpack-plugin/runtime/empty-entry.js ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// This file contains an empty module that does nothing.\n// It's meant to be added as an entry point to the main bundle\n// and helps reliably adding some Aurelia dependencies that are attached \n// to no module in particular, such as `includeAll` results or `aureliaApp`.\n//\n// Trying to attach those dependencies to, for example, 'aurelia-bootstrapper' \n// is unreliable if 'aurelia-bootstrapper' is in a DLL outside the bundle.\n//\n// Trying to attach to 'aurelia-loader-webpack' works well, unless a user\n// configures a customized loader instead (unlikely, but in theory supported).\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS13ZWJwYWNrLXBsdWdpbi9ydW50aW1lL2VtcHR5LWVudHJ5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F1cmVsaWEtd2VicGFjay1wbHVnaW4vcnVudGltZS9lbXB0eS1lbnRyeS5qcz8xODAzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBjb250YWlucyBhbiBlbXB0eSBtb2R1bGUgdGhhdCBkb2VzIG5vdGhpbmcuXG4vLyBJdCdzIG1lYW50IHRvIGJlIGFkZGVkIGFzIGFuIGVudHJ5IHBvaW50IHRvIHRoZSBtYWluIGJ1bmRsZVxuLy8gYW5kIGhlbHBzIHJlbGlhYmx5IGFkZGluZyBzb21lIEF1cmVsaWEgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGF0dGFjaGVkIFxuLy8gdG8gbm8gbW9kdWxlIGluIHBhcnRpY3VsYXIsIHN1Y2ggYXMgYGluY2x1ZGVBbGxgIHJlc3VsdHMgb3IgYGF1cmVsaWFBcHBgLlxuLy9cbi8vIFRyeWluZyB0byBhdHRhY2ggdGhvc2UgZGVwZW5kZW5jaWVzIHRvLCBmb3IgZXhhbXBsZSwgJ2F1cmVsaWEtYm9vdHN0cmFwcGVyJyBcbi8vIGlzIHVucmVsaWFibGUgaWYgJ2F1cmVsaWEtYm9vdHN0cmFwcGVyJyBpcyBpbiBhIERMTCBvdXRzaWRlIHRoZSBidW5kbGUuXG4vL1xuLy8gVHJ5aW5nIHRvIGF0dGFjaCB0byAnYXVyZWxpYS1sb2FkZXItd2VicGFjaycgd29ya3Mgd2VsbCwgdW5sZXNzIGEgdXNlclxuLy8gY29uZmlndXJlcyBhIGN1c3RvbWl6ZWQgbG9hZGVyIGluc3RlYWQgKHVubGlrZWx5LCBidXQgaW4gdGhlb3J5IHN1cHBvcnRlZCkuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aurelia-webpack-plugin/runtime/empty-entry.js\n"); /***/ }), /***/ "./node_modules/aurelia-webpack-plugin/runtime/pal-loader-entry.js": /*!*************************************************************************!*\ !*** ./node_modules/aurelia-webpack-plugin/runtime/pal-loader-entry.js ***! \*************************************************************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var aurelia_pal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aurelia-pal */ \"./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js\");\n// With default aurelia-loader-webpack config, this module is added as an extra entry\n// before any other code executes so that PAL.Loader is properly configured.\n// There are several tricky points worth noticing.\n// \n// We don't add aurelia-loader-webpack itself as an entry point (used to until 2.0 RC2)\n// because it (transitively) brings too much bagage with itself, most notably polyfills.\n// This made it super-hard to add other polyfills before Aurelia's and led to various bugs.\n//\n// We don't add custom code in aurelia-pal or aurelia-loader or aurelia-bootstrapper to detect\n// the Webpack environment and configure the loader because they might live in a DLL.\n// If they do, they would bring aurelia-loader-webpack along in the DLL and this is a special \n// library that *has to be in the main chunk.*\n//\n// The over-complicated design I've settled upon in the end is to use this special module\n// as an entry point that configures aurelia-loader-webpack. It has minimal static imports:\n// just aurelia-pal, which itself has no other dependencies and doesn't run much code.\n// It hacks the loader field into a getter so that it can synchronously load aurelia-loader-webpack\n// just in time when it is demanded by aurelia-bootstrapper.\n// This enables users to load polyfills before aurelia-loader-webpack is actually loaded.\n\n\n\nvar Loader;\n\nObject.defineProperty(aurelia_pal__WEBPACK_IMPORTED_MODULE_0__[\"PLATFORM\"], \"Loader\", {\n get: function() {\n return Loader || (Loader = __webpack_require__(/*! aurelia-loader-webpack */ \"./node_modules/aurelia-loader-webpack/dist/native-modules/aurelia-loader-webpack.js\").WebpackLoader);\n },\n set: function(value) {\n Loader = value;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXVyZWxpYS13ZWJwYWNrLXBsdWdpbi9ydW50aW1lL3BhbC1sb2FkZXItZW50cnkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXVyZWxpYS13ZWJwYWNrLXBsdWdpbi9ydW50aW1lL3BhbC1sb2FkZXItZW50cnkuanM/MWE2NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXaXRoIGRlZmF1bHQgYXVyZWxpYS1sb2FkZXItd2VicGFjayBjb25maWcsIHRoaXMgbW9kdWxlIGlzIGFkZGVkIGFzIGFuIGV4dHJhIGVudHJ5XG4vLyBiZWZvcmUgYW55IG90aGVyIGNvZGUgZXhlY3V0ZXMgc28gdGhhdCBQQUwuTG9hZGVyIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuXG4vLyBUaGVyZSBhcmUgc2V2ZXJhbCB0cmlja3kgcG9pbnRzIHdvcnRoIG5vdGljaW5nLlxuLy8gXG4vLyBXZSBkb24ndCBhZGQgYXVyZWxpYS1sb2FkZXItd2VicGFjayBpdHNlbGYgYXMgYW4gZW50cnkgcG9pbnQgKHVzZWQgdG8gdW50aWwgMi4wIFJDMilcbi8vIGJlY2F1c2UgaXQgKHRyYW5zaXRpdmVseSkgYnJpbmdzIHRvbyBtdWNoIGJhZ2FnZSB3aXRoIGl0c2VsZiwgbW9zdCBub3RhYmx5IHBvbHlmaWxscy5cbi8vIFRoaXMgbWFkZSBpdCBzdXBlci1oYXJkIHRvIGFkZCBvdGhlciBwb2x5ZmlsbHMgYmVmb3JlIEF1cmVsaWEncyBhbmQgbGVkIHRvIHZhcmlvdXMgYnVncy5cbi8vXG4vLyBXZSBkb24ndCBhZGQgY3VzdG9tIGNvZGUgaW4gYXVyZWxpYS1wYWwgb3IgYXVyZWxpYS1sb2FkZXIgb3IgYXVyZWxpYS1ib290c3RyYXBwZXIgdG8gZGV0ZWN0XG4vLyB0aGUgV2VicGFjayBlbnZpcm9ubWVudCBhbmQgY29uZmlndXJlIHRoZSBsb2FkZXIgYmVjYXVzZSB0aGV5IG1pZ2h0IGxpdmUgaW4gYSBETEwuXG4vLyBJZiB0aGV5IGRvLCB0aGV5IHdvdWxkIGJyaW5nIGF1cmVsaWEtbG9hZGVyLXdlYnBhY2sgYWxvbmcgaW4gdGhlIERMTCBhbmQgdGhpcyBpcyBhIHNwZWNpYWwgXG4vLyBsaWJyYXJ5IHRoYXQgKmhhcyB0byBiZSBpbiB0aGUgbWFpbiBjaHVuay4qXG4vL1xuLy8gVGhlIG92ZXItY29tcGxpY2F0ZWQgZGVzaWduIEkndmUgc2V0dGxlZCB1cG9uIGluIHRoZSBlbmQgaXMgdG8gdXNlIHRoaXMgc3BlY2lhbCBtb2R1bGVcbi8vIGFzIGFuIGVudHJ5IHBvaW50IHRoYXQgY29uZmlndXJlcyBhdXJlbGlhLWxvYWRlci13ZWJwYWNrLiBJdCBoYXMgbWluaW1hbCBzdGF0aWMgaW1wb3J0czpcbi8vIGp1c3QgYXVyZWxpYS1wYWwsIHdoaWNoIGl0c2VsZiBoYXMgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIGFuZCBkb2Vzbid0IHJ1biBtdWNoIGNvZGUuXG4vLyBJdCBoYWNrcyB0aGUgbG9hZGVyIGZpZWxkIGludG8gYSBnZXR0ZXIgc28gdGhhdCBpdCBjYW4gc3luY2hyb25vdXNseSBsb2FkIGF1cmVsaWEtbG9hZGVyLXdlYnBhY2tcbi8vIGp1c3QgaW4gdGltZSB3aGVuIGl0IGlzIGRlbWFuZGVkIGJ5IGF1cmVsaWEtYm9vdHN0cmFwcGVyLlxuLy8gVGhpcyBlbmFibGVzIHVzZXJzIHRvIGxvYWQgcG9seWZpbGxzIGJlZm9yZSBhdXJlbGlhLWxvYWRlci13ZWJwYWNrIGlzIGFjdHVhbGx5IGxvYWRlZC5cblxuaW1wb3J0IHsgUExBVEZPUk0gfSBmcm9tIFwiYXVyZWxpYS1wYWxcIjtcblxudmFyIExvYWRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBMQVRGT1JNLCBcIkxvYWRlclwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIExvYWRlciB8fCAoTG9hZGVyID0gcmVxdWlyZShcImF1cmVsaWEtbG9hZGVyLXdlYnBhY2tcIikuV2VicGFja0xvYWRlcik7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICBMb2FkZXIgPSB2YWx1ZTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aurelia-webpack-plugin/runtime/pal-loader-entry.js\n"); /***/ }), /***/ "./node_modules/bluebird/js/browser/bluebird.js": /*!******************************************************!*\ !*** ./node_modules/bluebird/js/browser/bluebird.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("/* WEBPACK VAR INJECTION */(function(process, Promise, global, setImmediate) {/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2018 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n/**\n * bluebird build version 3.7.2\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each\n*/\n!function(e){if(true)module.exports=e();else { var f; }}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o 0) {\n _drainQueueStep(queue);\n }\n}\n\nfunction _drainQueueStep(queue) {\n var fn = queue.shift();\n if (typeof fn !== \"function\") {\n fn._settlePromises();\n } else {\n var receiver = queue.shift();\n var arg = queue.shift();\n fn.call(receiver, arg);\n }\n}\n\nAsync.prototype._drainQueues = function () {\n _drainQueue(this._normalQueue);\n this._reset();\n this._haveDrainedQueues = true;\n _drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n if (!this._isTickUsed) {\n this._isTickUsed = true;\n this._schedule(this.drainQueues);\n }\n};\n\nAsync.prototype._reset = function () {\n this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n\n},{\"./queue\":26,\"./schedule\":29}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n context.promiseRejectionQueued = true;\n context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n if (((this._bitField & 50397184) === 0)) {\n this._resolveCallback(context.target);\n }\n};\n\nvar bindingRejected = function(e, context) {\n if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n if (!calledBind) {\n calledBind = true;\n Promise.prototype._propagateFrom = debug.propagateFromFunction();\n Promise.prototype._boundValue = debug.boundValueFunction();\n }\n var maybePromise = tryConvertToPromise(thisArg);\n var ret = new Promise(INTERNAL);\n ret._propagateFrom(this, 1);\n var target = this._target();\n ret._setBoundTo(maybePromise);\n if (maybePromise instanceof Promise) {\n var context = {\n promiseRejectionQueued: false,\n promise: ret,\n target: target,\n bindingPromise: maybePromise\n };\n target._then(INTERNAL, targetRejected, undefined, ret, context);\n maybePromise._then(\n bindingResolved, bindingRejected, undefined, ret, context);\n ret._setOnCancel(maybePromise);\n } else {\n ret._resolveCallback(target);\n }\n return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n if (obj !== undefined) {\n this._bitField = this._bitField | 2097152;\n this._boundTo = obj;\n } else {\n this._bitField = this._bitField & (~2097152);\n }\n};\n\nPromise.prototype._isBound = function () {\n return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n return Promise.resolve(value).bind(thisArg);\n};\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n try { if (Promise === bluebird) Promise = old; }\n catch (e) {}\n return bluebird;\n}\nvar bluebird = _dereq_(\"./promise\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n\n},{\"./promise\":22}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar cr = Object.create;\nif (cr) {\n var callerCache = cr(null);\n var getterCache = cr(null);\n callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (false) { var getCompiled, makeGetter, makeMethodCaller; }\n\nfunction ensureMethod(obj, methodName) {\n var fn;\n if (obj != null) fn = obj[methodName];\n if (typeof fn !== \"function\") {\n var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n util.toString(methodName) + \"'\";\n throw new Promise.TypeError(message);\n }\n return fn;\n}\n\nfunction caller(obj) {\n var methodName = this.pop();\n var fn = ensureMethod(obj, methodName);\n return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n var args = [].slice.call(arguments, 1);;\n if (false) { var maybeCaller; }\n args.push(methodName);\n return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n return obj[this];\n}\nfunction indexedGetter(obj) {\n var index = +this;\n if (index < 0) index = Math.max(0, index + obj.length);\n return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n var isIndex = (typeof propertyName === \"number\");\n var getter;\n if (!isIndex) {\n if (canEvaluate) {\n var maybeGetter = getGetter(propertyName);\n getter = maybeGetter !== null ? maybeGetter : namedGetter;\n } else {\n getter = namedGetter;\n }\n } else {\n getter = indexedGetter;\n }\n return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n\n},{\"./util\":36}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n var promise = this;\n var child = promise;\n while (promise._isCancellable()) {\n if (!promise._cancelBy(child)) {\n if (child._isFollowing()) {\n child._followee().cancel();\n } else {\n child._cancelBranched();\n }\n break;\n }\n\n var parent = promise._cancellationParent;\n if (parent == null || !parent._isCancellable()) {\n if (promise._isFollowing()) {\n promise._followee().cancel();\n } else {\n promise._cancelBranched();\n }\n break;\n } else {\n if (promise._isFollowing()) promise._followee().cancel();\n promise._setWillBeCancelled();\n child = promise;\n promise = parent;\n }\n }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n return this._branchesRemainingToCancel === undefined ||\n this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n if (canceller === this) {\n this._branchesRemainingToCancel = 0;\n this._invokeOnCancel();\n return true;\n } else {\n this._branchHasCancelled();\n if (this._enoughBranchesHaveCancelled()) {\n this._invokeOnCancel();\n return true;\n }\n }\n return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n if (this._enoughBranchesHaveCancelled()) {\n this._cancel();\n }\n};\n\nPromise.prototype._cancel = function() {\n if (!this._isCancellable()) return;\n this._setCancelled();\n async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n if (util.isArray(onCancelCallback)) {\n for (var i = 0; i < onCancelCallback.length; ++i) {\n this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n }\n } else if (onCancelCallback !== undefined) {\n if (typeof onCancelCallback === \"function\") {\n if (!internalOnly) {\n var e = tryCatch(onCancelCallback).call(this._boundValue());\n if (e === errorObj) {\n this._attachExtraTrace(e.e);\n async.throwLater(e.e);\n }\n }\n } else {\n onCancelCallback._resultCancelled(this);\n }\n }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n var onCancelCallback = this._onCancel();\n this._unsetOnCancel();\n async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n if (this._isCancellable()) {\n this._doInvokeOnCancel(this._onCancel(), true);\n this._unsetOnCancel();\n }\n};\n\nPromise.prototype._resultCancelled = function() {\n this.cancel();\n};\n\n};\n\n},{\"./util\":36}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar getKeys = _dereq_(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n return function(e) {\n var boundTo = promise._boundValue();\n predicateLoop: for (var i = 0; i < instances.length; ++i) {\n var item = instances[i];\n\n if (item === Error ||\n (item != null && item.prototype instanceof Error)) {\n if (e instanceof item) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (typeof item === \"function\") {\n var matchesPredicate = tryCatch(item).call(boundTo, e);\n if (matchesPredicate === errorObj) {\n return matchesPredicate;\n } else if (matchesPredicate) {\n return tryCatch(cb).call(boundTo, e);\n }\n } else if (util.isObject(e)) {\n var keys = getKeys(item);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n if (item[key] != e[key]) {\n continue predicateLoop;\n }\n }\n return tryCatch(cb).call(boundTo, e);\n }\n }\n return NEXT_FILTER;\n };\n}\n\nreturn catchFilter;\n};\n\n},{\"./es5\":13,\"./util\":36}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n if (this._trace !== undefined) {\n this._trace._promiseCreated = null;\n contextStack.push(this._trace);\n }\n};\n\nContext.prototype._popContext = function () {\n if (this._trace !== undefined) {\n var trace = contextStack.pop();\n var ret = trace._promiseCreated;\n trace._promiseCreated = null;\n return ret;\n }\n return null;\n};\n\nfunction createContext() {\n if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n var lastIndex = contextStack.length - 1;\n if (lastIndex >= 0) {\n return contextStack[lastIndex];\n }\n return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n var Promise_pushContext = Promise.prototype._pushContext;\n var Promise_popContext = Promise.prototype._popContext;\n var Promise_PeekContext = Promise._peekContext;\n var Promise_peekContext = Promise.prototype._peekContext;\n var Promise_promiseCreated = Promise.prototype._promiseCreated;\n Context.deactivateLongStackTraces = function() {\n Promise.prototype._pushContext = Promise_pushContext;\n Promise.prototype._popContext = Promise_popContext;\n Promise._peekContext = Promise_PeekContext;\n Promise.prototype._peekContext = Promise_peekContext;\n Promise.prototype._promiseCreated = Promise_promiseCreated;\n longStackTraces = false;\n };\n longStackTraces = true;\n Promise.prototype._pushContext = Context.prototype._pushContext;\n Promise.prototype._popContext = Context.prototype._popContext;\n Promise._peekContext = Promise.prototype._peekContext = peekContext;\n Promise.prototype._promiseCreated = function() {\n var ctx = this._peekContext();\n if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n };\n};\nreturn Context;\n};\n\n},{}],9:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, Context,\n enableAsyncHooks, disableAsyncHooks) {\nvar async = Promise._async;\nvar Warning = _dereq_(\"./errors\").Warning;\nvar util = _dereq_(\"./util\");\nvar es5 = _dereq_(\"./es5\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n ( true ||\n false));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nvar deferUnhandledRejectionCheck;\n(function() {\n var promises = [];\n\n function unhandledRejectionCheck() {\n for (var i = 0; i < promises.length; ++i) {\n promises[i]._notifyUnhandledRejection();\n }\n unhandledRejectionClear();\n }\n\n function unhandledRejectionClear() {\n promises.length = 0;\n }\n\n deferUnhandledRejectionCheck = function(promise) {\n promises.push(promise);\n setTimeout(unhandledRejectionCheck, 1);\n };\n\n es5.defineProperty(Promise, \"_unhandledRejectionCheck\", {\n value: unhandledRejectionCheck\n });\n es5.defineProperty(Promise, \"_unhandledRejectionClear\", {\n value: unhandledRejectionClear\n });\n})();\n\nPromise.prototype.suppressUnhandledRejections = function() {\n var target = this._target();\n target._bitField = ((target._bitField & (~1048576)) |\n 524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n if ((this._bitField & 524288) !== 0) return;\n this._setRejectionIsUnhandled();\n deferUnhandledRejectionCheck(this);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n fireRejectionEvent(\"rejectionHandled\",\n unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n if (this._isRejectionUnhandled()) {\n var reason = this._settledValue();\n this._setUnhandledRejectionIsNotified();\n fireRejectionEvent(\"unhandledRejection\",\n possiblyUnhandledRejection, reason, this);\n }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n this._bitField = this._bitField & (~1048576);\n if (this._isUnhandledRejectionNotified()) {\n this._unsetUnhandledRejectionIsNotified();\n this._notifyUnhandledRejectionIsHandled();\n }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n var context = Promise._getContext();\n possiblyUnhandledRejection = util.contextBind(context, fn);\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n var context = Promise._getContext();\n unhandledRejectionHandled = util.contextBind(context, fn);\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n if (!config.longStackTraces && longStackTracesIsSupported()) {\n var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;\n config.longStackTraces = true;\n disableLongStackTraces = function() {\n if (async.haveItemsQueued() && !config.longStackTraces) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;\n Context.deactivateLongStackTraces();\n config.longStackTraces = false;\n };\n Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;\n Context.activateLongStackTraces();\n }\n};\n\nPromise.hasLongStackTraces = function () {\n return config.longStackTraces && longStackTracesIsSupported();\n};\n\n\nvar legacyHandlers = {\n unhandledrejection: {\n before: function() {\n var ret = util.global.onunhandledrejection;\n util.global.onunhandledrejection = null;\n return ret;\n },\n after: function(fn) {\n util.global.onunhandledrejection = fn;\n }\n },\n rejectionhandled: {\n before: function() {\n var ret = util.global.onrejectionhandled;\n util.global.onrejectionhandled = null;\n return ret;\n },\n after: function(fn) {\n util.global.onrejectionhandled = fn;\n }\n }\n};\n\nvar fireDomEvent = (function() {\n var dispatch = function(legacy, e) {\n if (legacy) {\n var fn;\n try {\n fn = legacy.before();\n return !util.global.dispatchEvent(e);\n } finally {\n legacy.after(fn);\n }\n } else {\n return !util.global.dispatchEvent(e);\n }\n };\n try {\n if (typeof CustomEvent === \"function\") {\n var event = new CustomEvent(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var eventData = {\n detail: event,\n cancelable: true\n };\n var domEvent = new CustomEvent(name, eventData);\n es5.defineProperty(\n domEvent, \"promise\", {value: event.promise});\n es5.defineProperty(\n domEvent, \"reason\", {value: event.reason});\n\n return dispatch(legacyHandlers[name], domEvent);\n };\n } else if (typeof Event === \"function\") {\n var event = new Event(\"CustomEvent\");\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var domEvent = new Event(name, {\n cancelable: true\n });\n domEvent.detail = event;\n es5.defineProperty(domEvent, \"promise\", {value: event.promise});\n es5.defineProperty(domEvent, \"reason\", {value: event.reason});\n return dispatch(legacyHandlers[name], domEvent);\n };\n } else {\n var event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"testingtheevent\", false, true, {});\n util.global.dispatchEvent(event);\n return function(name, event) {\n name = name.toLowerCase();\n var domEvent = document.createEvent(\"CustomEvent\");\n domEvent.initCustomEvent(name, false, true,\n event);\n return dispatch(legacyHandlers[name], domEvent);\n };\n }\n } catch (e) {}\n return function() {\n return false;\n };\n})();\n\nvar fireGlobalEvent = (function() {\n if (util.isNode) {\n return function() {\n return process.emit.apply(process, arguments);\n };\n } else {\n if (!util.global) {\n return function() {\n return false;\n };\n }\n return function(name) {\n var methodName = \"on\" + name.toLowerCase();\n var method = util.global[methodName];\n if (!method) return false;\n method.apply(util.global, [].slice.call(arguments, 1));\n return true;\n };\n }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n promiseCreated: generatePromiseLifecycleEventObject,\n promiseFulfilled: generatePromiseLifecycleEventObject,\n promiseRejected: generatePromiseLifecycleEventObject,\n promiseResolved: generatePromiseLifecycleEventObject,\n promiseCancelled: generatePromiseLifecycleEventObject,\n promiseChained: function(name, promise, child) {\n return {promise: promise, child: child};\n },\n warning: function(name, warning) {\n return {warning: warning};\n },\n unhandledRejection: function (name, reason, promise) {\n return {reason: reason, promise: promise};\n },\n rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n var globalEventFired = false;\n try {\n globalEventFired = fireGlobalEvent.apply(null, arguments);\n } catch (e) {\n async.throwLater(e);\n globalEventFired = true;\n }\n\n var domEventFired = false;\n try {\n domEventFired = fireDomEvent(name,\n eventToObjectGenerator[name].apply(null, arguments));\n } catch (e) {\n async.throwLater(e);\n domEventFired = true;\n }\n\n return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n opts = Object(opts);\n if (\"longStackTraces\" in opts) {\n if (opts.longStackTraces) {\n Promise.longStackTraces();\n } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n disableLongStackTraces();\n }\n }\n if (\"warnings\" in opts) {\n var warningsOption = opts.warnings;\n config.warnings = !!warningsOption;\n wForgottenReturn = config.warnings;\n\n if (util.isObject(warningsOption)) {\n if (\"wForgottenReturn\" in warningsOption) {\n wForgottenReturn = !!warningsOption.wForgottenReturn;\n }\n }\n }\n if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n if (async.haveItemsQueued()) {\n throw new Error(\n \"cannot enable cancellation after promises are in use\");\n }\n Promise.prototype._clearCancellationData =\n cancellationClearCancellationData;\n Promise.prototype._propagateFrom = cancellationPropagateFrom;\n Promise.prototype._onCancel = cancellationOnCancel;\n Promise.prototype._setOnCancel = cancellationSetOnCancel;\n Promise.prototype._attachCancellationCallback =\n cancellationAttachCancellationCallback;\n Promise.prototype._execute = cancellationExecute;\n propagateFromFunction = cancellationPropagateFrom;\n config.cancellation = true;\n }\n if (\"monitoring\" in opts) {\n if (opts.monitoring && !config.monitoring) {\n config.monitoring = true;\n Promise.prototype._fireEvent = activeFireEvent;\n } else if (!opts.monitoring && config.monitoring) {\n config.monitoring = false;\n Promise.prototype._fireEvent = defaultFireEvent;\n }\n }\n if (\"asyncHooks\" in opts && util.nodeSupportsAsyncResource) {\n var prev = config.asyncHooks;\n var cur = !!opts.asyncHooks;\n if (prev !== cur) {\n config.asyncHooks = cur;\n if (cur) {\n enableAsyncHooks();\n } else {\n disableAsyncHooks();\n }\n }\n }\n return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n try {\n executor(resolve, reject);\n } catch (e) {\n return e;\n }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._dereferenceTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n ;\n ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n var promise = this;\n try {\n executor(resolve, reject, function(onCancel) {\n if (typeof onCancel !== \"function\") {\n throw new TypeError(\"onCancel must be a function, got: \" +\n util.toString(onCancel));\n }\n promise._attachCancellationCallback(onCancel);\n });\n } catch (e) {\n return e;\n }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n if (!this._isCancellable()) return this;\n\n var previousOnCancel = this._onCancel();\n if (previousOnCancel !== undefined) {\n if (util.isArray(previousOnCancel)) {\n previousOnCancel.push(onCancel);\n } else {\n this._setOnCancel([previousOnCancel, onCancel]);\n }\n } else {\n this._setOnCancel(onCancel);\n }\n}\n\nfunction cancellationOnCancel() {\n return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n this._cancellationParent = undefined;\n this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n if ((flags & 1) !== 0) {\n this._cancellationParent = parent;\n var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n if (branchesRemainingToCancel === undefined) {\n branchesRemainingToCancel = 0;\n }\n parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n }\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n if ((flags & 2) !== 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n var ret = this._boundTo;\n if (ret !== undefined) {\n if (ret instanceof Promise) {\n if (ret.isFulfilled()) {\n return ret.value();\n } else {\n return undefined;\n }\n }\n }\n return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n if (canAttachTrace(error)) {\n var trace = this._trace;\n if (trace !== undefined) {\n if (ignoreSelf) trace = trace._parent;\n }\n if (trace !== undefined) {\n trace.attachExtraTrace(error);\n } else if (!error.__stackCleaned__) {\n var parsed = parseStackAndMessage(error);\n util.notEnumerableProp(error, \"stack\",\n parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n }\n }\n}\n\nfunction longStackTracesDereferenceTrace() {\n this._trace = undefined;\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n parent) {\n if (returnValue === undefined && promiseCreated !== null &&\n wForgottenReturn) {\n if (parent !== undefined && parent._returnedNonUndefined()) return;\n if ((promise._bitField & 65535) === 0) return;\n\n if (name) name = name + \" \";\n var handlerLine = \"\";\n var creatorLine = \"\";\n if (promiseCreated._trace) {\n var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n var stack = cleanStack(traceLines);\n for (var i = stack.length - 1; i >= 0; --i) {\n var line = stack[i];\n if (!nodeFramePattern.test(line)) {\n var lineMatches = line.match(parseLinePattern);\n if (lineMatches) {\n handlerLine = \"at \" + lineMatches[1] +\n \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n }\n break;\n }\n }\n\n if (stack.length > 0) {\n var firstUserLine = stack[0];\n for (var i = 0; i < traceLines.length; ++i) {\n\n if (traceLines[i] === firstUserLine) {\n if (i > 0) {\n creatorLine = \"\\n\" + traceLines[i - 1];\n }\n break;\n }\n }\n\n }\n }\n var msg = \"a promise was created in a \" + name +\n \"handler \" + handlerLine + \"but was not returned from it, \" +\n \"see http://goo.gl/rRqMUw\" +\n creatorLine;\n promise._warn(msg, true, promiseCreated);\n }\n}\n\nfunction deprecated(name, replacement) {\n var message = name +\n \" is deprecated and will be removed in a future version.\";\n if (replacement) message += \" Use \" + replacement + \" instead.\";\n return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n if (!config.warnings) return;\n var warning = new Warning(message);\n var ctx;\n if (shouldUseOwnTrace) {\n promise._attachExtraTrace(warning);\n } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n ctx.attachExtraTrace(warning);\n } else {\n var parsed = parseStackAndMessage(warning);\n warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n }\n\n if (!activeFireEvent(\"warning\", warning)) {\n formatAndLogError(warning, \"\", true);\n }\n}\n\nfunction reconstructStack(message, stacks) {\n for (var i = 0; i < stacks.length - 1; ++i) {\n stacks[i].push(\"From previous event:\");\n stacks[i] = stacks[i].join(\"\\n\");\n }\n if (i < stacks.length) {\n stacks[i] = stacks[i].join(\"\\n\");\n }\n return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n for (var i = 0; i < stacks.length; ++i) {\n if (stacks[i].length === 0 ||\n ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n stacks.splice(i, 1);\n i--;\n }\n }\n}\n\nfunction removeCommonRoots(stacks) {\n var current = stacks[0];\n for (var i = 1; i < stacks.length; ++i) {\n var prev = stacks[i];\n var currentLastIndex = current.length - 1;\n var currentLastLine = current[currentLastIndex];\n var commonRootMeetPoint = -1;\n\n for (var j = prev.length - 1; j >= 0; --j) {\n if (prev[j] === currentLastLine) {\n commonRootMeetPoint = j;\n break;\n }\n }\n\n for (var j = commonRootMeetPoint; j >= 0; --j) {\n var line = prev[j];\n if (current[currentLastIndex] === line) {\n current.pop();\n currentLastIndex--;\n } else {\n break;\n }\n }\n current = prev;\n }\n}\n\nfunction cleanStack(stack) {\n var ret = [];\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n var isTraceLine = \" (No stack trace)\" === line ||\n stackFramePattern.test(line);\n var isInternalFrame = isTraceLine && shouldIgnore(line);\n if (isTraceLine && !isInternalFrame) {\n if (indentStackFrames && line.charAt(0) !== \" \") {\n line = \" \" + line;\n }\n ret.push(line);\n }\n }\n return ret;\n}\n\nfunction stackFramesAsArray(error) {\n var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n if (\" (No stack trace)\" === line || stackFramePattern.test(line)) {\n break;\n }\n }\n if (i > 0 && error.name != \"SyntaxError\") {\n stack = stack.slice(i);\n }\n return stack;\n}\n\nfunction parseStackAndMessage(error) {\n var stack = error.stack;\n var message = error.toString();\n stack = typeof stack === \"string\" && stack.length > 0\n ? stackFramesAsArray(error) : [\" (No stack trace)\"];\n return {\n message: message,\n stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n if (typeof console !== \"undefined\") {\n var message;\n if (util.isObject(error)) {\n var stack = error.stack;\n message = title + formatStack(stack, error);\n } else {\n message = title + String(error);\n }\n if (typeof printWarning === \"function\") {\n printWarning(message, isSoft);\n } else if (typeof console.log === \"function\" ||\n typeof console.log === \"object\") {\n console.log(message);\n }\n }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n var localEventFired = false;\n try {\n if (typeof localHandler === \"function\") {\n localEventFired = true;\n if (name === \"rejectionHandled\") {\n localHandler(promise);\n } else {\n localHandler(reason, promise);\n }\n }\n } catch (e) {\n async.throwLater(e);\n }\n\n if (name === \"unhandledRejection\") {\n if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n formatAndLogError(reason, \"Unhandled rejection \");\n }\n } else {\n activeFireEvent(name, promise);\n }\n}\n\nfunction formatNonError(obj) {\n var str;\n if (typeof obj === \"function\") {\n str = \"[function \" +\n (obj.name || \"anonymous\") +\n \"]\";\n } else {\n str = obj && typeof obj.toString === \"function\"\n ? obj.toString() : util.toString(obj);\n var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n if (ruselessToString.test(str)) {\n try {\n var newStr = JSON.stringify(obj);\n str = newStr;\n }\n catch(e) {\n\n }\n }\n if (str.length === 0) {\n str = \"(empty array)\";\n }\n }\n return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n var maxChars = 41;\n if (str.length < maxChars) {\n return str;\n }\n return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n var matches = line.match(parseLineInfoRegex);\n if (matches) {\n return {\n fileName: matches[1],\n line: parseInt(matches[2], 10)\n };\n }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n if (!longStackTracesIsSupported()) return;\n var firstStackLines = (firstLineError.stack || \"\").split(\"\\n\");\n var lastStackLines = (lastLineError.stack || \"\").split(\"\\n\");\n var firstIndex = -1;\n var lastIndex = -1;\n var firstFileName;\n var lastFileName;\n for (var i = 0; i < firstStackLines.length; ++i) {\n var result = parseLineInfo(firstStackLines[i]);\n if (result) {\n firstFileName = result.fileName;\n firstIndex = result.line;\n break;\n }\n }\n for (var i = 0; i < lastStackLines.length; ++i) {\n var result = parseLineInfo(lastStackLines[i]);\n if (result) {\n lastFileName = result.fileName;\n lastIndex = result.line;\n break;\n }\n }\n if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n firstFileName !== lastFileName || firstIndex >= lastIndex) {\n return;\n }\n\n shouldIgnore = function(line) {\n if (bluebirdFramePattern.test(line)) return true;\n var info = parseLineInfo(line);\n if (info) {\n if (info.fileName === firstFileName &&\n (firstIndex <= info.line && info.line <= lastIndex)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction CapturedTrace(parent) {\n this._parent = parent;\n this._promisesCreated = 0;\n var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n captureStackTrace(this, CapturedTrace);\n if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n var length = this._length;\n if (length < 2) return;\n var nodes = [];\n var stackToIndex = {};\n\n for (var i = 0, node = this; node !== undefined; ++i) {\n nodes.push(node);\n node = node._parent;\n }\n length = this._length = i;\n for (var i = length - 1; i >= 0; --i) {\n var stack = nodes[i].stack;\n if (stackToIndex[stack] === undefined) {\n stackToIndex[stack] = i;\n }\n }\n for (var i = 0; i < length; ++i) {\n var currentStack = nodes[i].stack;\n var index = stackToIndex[currentStack];\n if (index !== undefined && index !== i) {\n if (index > 0) {\n nodes[index - 1]._parent = undefined;\n nodes[index - 1]._length = 1;\n }\n nodes[i]._parent = undefined;\n nodes[i]._length = 1;\n var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n if (index < length - 1) {\n cycleEdgeNode._parent = nodes[index + 1];\n cycleEdgeNode._parent.uncycle();\n cycleEdgeNode._length =\n cycleEdgeNode._parent._length + 1;\n } else {\n cycleEdgeNode._parent = undefined;\n cycleEdgeNode._length = 1;\n }\n var currentChildLength = cycleEdgeNode._length + 1;\n for (var j = i - 2; j >= 0; --j) {\n nodes[j]._length = currentChildLength;\n currentChildLength++;\n }\n return;\n }\n }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n if (error.__stackCleaned__) return;\n this.uncycle();\n var parsed = parseStackAndMessage(error);\n var message = parsed.message;\n var stacks = [parsed.stack];\n\n var trace = this;\n while (trace !== undefined) {\n stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n trace = trace._parent;\n }\n removeCommonRoots(stacks);\n removeDuplicateOrEmptyJumps(stacks);\n util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n var v8stackFramePattern = /^\\s*at\\s*/;\n var v8stackFormatter = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if (error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n if (typeof Error.stackTraceLimit === \"number\" &&\n typeof Error.captureStackTrace === \"function\") {\n Error.stackTraceLimit += 6;\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n var captureStackTrace = Error.captureStackTrace;\n\n shouldIgnore = function(line) {\n return bluebirdFramePattern.test(line);\n };\n return function(receiver, ignoreUntil) {\n Error.stackTraceLimit += 6;\n captureStackTrace(receiver, ignoreUntil);\n Error.stackTraceLimit -= 6;\n };\n }\n var err = new Error();\n\n if (typeof err.stack === \"string\" &&\n err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n stackFramePattern = /@/;\n formatStack = v8stackFormatter;\n indentStackFrames = true;\n return function captureStackTrace(o) {\n o.stack = new Error().stack;\n };\n }\n\n var hasStackAfterThrow;\n try { throw new Error(); }\n catch(e) {\n hasStackAfterThrow = (\"stack\" in e);\n }\n if (!(\"stack\" in err) && hasStackAfterThrow &&\n typeof Error.stackTraceLimit === \"number\") {\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n return function captureStackTrace(o) {\n Error.stackTraceLimit += 6;\n try { throw new Error(); }\n catch(e) { o.stack = e.stack; }\n Error.stackTraceLimit -= 6;\n };\n }\n\n formatStack = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if ((typeof error === \"object\" ||\n typeof error === \"function\") &&\n error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n printWarning = function (message) {\n console.warn(message);\n };\n if (util.isNode && process.stderr.isTTY) {\n printWarning = function(message, isSoft) {\n var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n console.warn(color + message + \"\\u001b[0m\\n\");\n };\n } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n printWarning = function(message, isSoft) {\n console.warn(\"%c\" + message,\n isSoft ? \"color: darkorange\" : \"color: red\");\n };\n }\n}\n\nvar config = {\n warnings: warnings,\n longStackTraces: false,\n cancellation: false,\n monitoring: false,\n asyncHooks: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n asyncHooks: function() {\n return config.asyncHooks;\n },\n longStackTraces: function() {\n return config.longStackTraces;\n },\n warnings: function() {\n return config.warnings;\n },\n cancellation: function() {\n return config.cancellation;\n },\n monitoring: function() {\n return config.monitoring;\n },\n propagateFromFunction: function() {\n return propagateFromFunction;\n },\n boundValueFunction: function() {\n return boundValueFunction;\n },\n checkForgottenReturns: checkForgottenReturns,\n setBounds: setBounds,\n warn: warn,\n deprecated: deprecated,\n CapturedTrace: CapturedTrace,\n fireDomEvent: fireDomEvent,\n fireGlobalEvent: fireGlobalEvent\n};\n};\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n return this.value;\n}\nfunction thrower() {\n throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n return this._then(\n thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n if (arguments.length <= 1) {\n return this._then(\n undefined, thrower, undefined, {reason: reason}, undefined);\n } else {\n var _reason = arguments[1];\n var handler = function() {throw _reason;};\n return this.caught(reason, handler);\n }\n};\n\nPromise.prototype.catchReturn = function (value) {\n if (arguments.length <= 1) {\n if (value instanceof Promise) value.suppressUnhandledRejections();\n return this._then(\n undefined, returner, undefined, {value: value}, undefined);\n } else {\n var _value = arguments[1];\n if (_value instanceof Promise) _value.suppressUnhandledRejections();\n var handler = function() {return _value;};\n return this.caught(value, handler);\n }\n};\n};\n\n},{}],11:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n return PromiseReduce(promises, fn, INTERNAL, 0)\n ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n\n},{}],12:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = _dereq_(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n function SubError(message) {\n if (!(this instanceof SubError)) return new SubError(message);\n notEnumerableProp(this, \"message\",\n typeof message === \"string\" ? message : defaultMessage);\n notEnumerableProp(this, \"name\", nameProperty);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n Error.call(this);\n }\n }\n inherits(SubError, Error);\n return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n _TypeError = TypeError;\n _RangeError = RangeError;\n} catch(e) {\n _TypeError = subError(\"TypeError\", \"type error\");\n _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n if (typeof Array.prototype[methods[i]] === \"function\") {\n AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n value: 0,\n configurable: false,\n writable: true,\n enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n var indent = Array(level * 4 + 1).join(\" \");\n var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n level++;\n indent = Array(level * 4 + 1).join(\" \");\n for (var i = 0; i < this.length; ++i) {\n var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n var lines = str.split(\"\\n\");\n for (var j = 0; j < lines.length; ++j) {\n lines[j] = indent + lines[j];\n }\n str = lines.join(\"\\n\");\n ret += str + \"\\n\";\n }\n level--;\n return ret;\n};\n\nfunction OperationalError(message) {\n if (!(this instanceof OperationalError))\n return new OperationalError(message);\n notEnumerableProp(this, \"name\", \"OperationalError\");\n notEnumerableProp(this, \"message\", message);\n this.cause = message;\n this[\"isOperational\"] = true;\n\n if (message instanceof Error) {\n notEnumerableProp(this, \"message\", message.message);\n notEnumerableProp(this, \"stack\", message.stack);\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n errorTypes = Objectfreeze({\n CancellationError: CancellationError,\n TimeoutError: TimeoutError,\n OperationalError: OperationalError,\n RejectionError: OperationalError,\n AggregateError: AggregateError\n });\n es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n value: errorTypes,\n writable: false,\n enumerable: false,\n configurable: false\n });\n}\n\nmodule.exports = {\n Error: Error,\n TypeError: _TypeError,\n RangeError: _RangeError,\n CancellationError: errorTypes.CancellationError,\n OperationalError: errorTypes.OperationalError,\n TimeoutError: errorTypes.TimeoutError,\n AggregateError: errorTypes.AggregateError,\n Warning: Warning\n};\n\n},{\"./es5\":13,\"./util\":36}],13:[function(_dereq_,module,exports){\nvar isES5 = (function(){\n \"use strict\";\n return this === undefined;\n})();\n\nif (isES5) {\n module.exports = {\n freeze: Object.freeze,\n defineProperty: Object.defineProperty,\n getDescriptor: Object.getOwnPropertyDescriptor,\n keys: Object.keys,\n names: Object.getOwnPropertyNames,\n getPrototypeOf: Object.getPrototypeOf,\n isArray: Array.isArray,\n isES5: isES5,\n propertyIsWritable: function(obj, prop) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n return !!(!descriptor || descriptor.writable || descriptor.set);\n }\n };\n} else {\n var has = {}.hasOwnProperty;\n var str = {}.toString;\n var proto = {}.constructor.prototype;\n\n var ObjectKeys = function (o) {\n var ret = [];\n for (var key in o) {\n if (has.call(o, key)) {\n ret.push(key);\n }\n }\n return ret;\n };\n\n var ObjectGetDescriptor = function(o, key) {\n return {value: o[key]};\n };\n\n var ObjectDefineProperty = function (o, key, desc) {\n o[key] = desc.value;\n return o;\n };\n\n var ObjectFreeze = function (obj) {\n return obj;\n };\n\n var ObjectGetPrototypeOf = function (obj) {\n try {\n return Object(obj).constructor.prototype;\n }\n catch (e) {\n return proto;\n }\n };\n\n var ArrayIsArray = function (obj) {\n try {\n return str.call(obj) === \"[object Array]\";\n }\n catch(e) {\n return false;\n }\n };\n\n module.exports = {\n isArray: ArrayIsArray,\n keys: ObjectKeys,\n names: ObjectKeys,\n defineProperty: ObjectDefineProperty,\n getDescriptor: ObjectGetDescriptor,\n freeze: ObjectFreeze,\n getPrototypeOf: ObjectGetPrototypeOf,\n isES5: isES5,\n propertyIsWritable: function() {\n return true;\n }\n };\n}\n\n},{}],14:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n\n},{}],15:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n this.promise = promise;\n this.type = type;\n this.handler = handler;\n this.called = false;\n this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n if (ctx.cancelPromise != null) {\n if (arguments.length > 1) {\n ctx.cancelPromise._reject(reason);\n } else {\n ctx.cancelPromise._cancel();\n }\n ctx.cancelPromise = null;\n return true;\n }\n return false;\n}\n\nfunction succeed() {\n return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n if (checkCancel(this, reason)) return;\n errorObj.e = reason;\n return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n var promise = this.promise;\n var handler = this.handler;\n\n if (!this.called) {\n this.called = true;\n var ret = this.isFinallyHandler()\n ? handler.call(promise._boundValue())\n : handler.call(promise._boundValue(), reasonOrValue);\n if (ret === NEXT_FILTER) {\n return ret;\n } else if (ret !== undefined) {\n promise._setReturnedNonUndefined();\n var maybePromise = tryConvertToPromise(ret, promise);\n if (maybePromise instanceof Promise) {\n if (this.cancelPromise != null) {\n if (maybePromise._isCancelled()) {\n var reason =\n new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n errorObj.e = reason;\n return errorObj;\n } else if (maybePromise.isPending()) {\n maybePromise._attachCancellationCallback(\n new FinallyHandlerCancelReaction(this));\n }\n }\n return maybePromise._then(\n succeed, fail, undefined, this, undefined);\n }\n }\n }\n\n if (promise.isRejected()) {\n checkCancel(this);\n errorObj.e = reasonOrValue;\n return errorObj;\n } else {\n checkCancel(this);\n return reasonOrValue;\n }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n if (typeof handler !== \"function\") return this.then();\n return this._then(success,\n fail,\n undefined,\n new PassThroughHandlerContext(this, type, handler),\n undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n return this._passThrough(handler,\n 0,\n finallyHandler,\n finallyHandler);\n};\n\n\nPromise.prototype.tap = function (handler) {\n return this._passThrough(handler, 1, finallyHandler);\n};\n\nPromise.prototype.tapCatch = function (handlerOrPredicate) {\n var len = arguments.length;\n if(len === 1) {\n return this._passThrough(handlerOrPredicate,\n 1,\n undefined,\n finallyHandler);\n } else {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (util.isObject(item)) {\n catchInstances[j++] = item;\n } else {\n return Promise.reject(new TypeError(\n \"tapCatch statement predicate: \"\n + \"expecting an object but got \" + util.classString(item)\n ));\n }\n }\n catchInstances.length = j;\n var handler = arguments[i];\n return this._passThrough(catchFilter(catchInstances, handler, this),\n 1,\n undefined,\n finallyHandler);\n }\n\n};\n\nreturn PassThroughHandlerContext;\n};\n\n},{\"./catch_filter\":7,\"./util\":36}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n apiRejection,\n INTERNAL,\n tryConvertToPromise,\n Proxyable,\n debug) {\nvar errors = _dereq_(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n for (var i = 0; i < yieldHandlers.length; ++i) {\n traceParent._pushContext();\n var result = tryCatch(yieldHandlers[i])(value);\n traceParent._popContext();\n if (result === errorObj) {\n traceParent._pushContext();\n var ret = Promise.reject(errorObj.e);\n traceParent._popContext();\n return ret;\n }\n var maybePromise = tryConvertToPromise(result, traceParent);\n if (maybePromise instanceof Promise) return maybePromise;\n }\n return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n if (debug.cancellation()) {\n var internal = new Promise(INTERNAL);\n var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n this._promise = internal.lastly(function() {\n return _finallyPromise;\n });\n internal._captureStackTrace();\n internal._setOnCancel(this);\n } else {\n var promise = this._promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n }\n this._stack = stack;\n this._generatorFunction = generatorFunction;\n this._receiver = receiver;\n this._generator = undefined;\n this._yieldHandlers = typeof yieldHandler === \"function\"\n ? [yieldHandler].concat(yieldHandlers)\n : yieldHandlers;\n this._yieldedPromise = null;\n this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n this._promise = this._generator = null;\n if (debug.cancellation() && this._finallyPromise !== null) {\n this._finallyPromise._fulfill();\n this._finallyPromise = null;\n }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n if (this._isResolved()) return;\n var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n var result;\n if (!implementsReturn) {\n var reason = new Promise.CancellationError(\n \"generator .return() sentinel\");\n Promise.coroutine.returnSentinel = reason;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n reason);\n this._promise._popContext();\n } else {\n this._promise._pushContext();\n result = tryCatch(this._generator[\"return\"]).call(this._generator,\n undefined);\n this._promise._popContext();\n }\n this._cancellationPhase = true;\n this._yieldedPromise = null;\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n this._yieldedPromise = null;\n this._promise._pushContext();\n var result = tryCatch(this._generator.next).call(this._generator, value);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n this._yieldedPromise = null;\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n var result = tryCatch(this._generator[\"throw\"])\n .call(this._generator, reason);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n if (this._yieldedPromise instanceof Promise) {\n var promise = this._yieldedPromise;\n this._yieldedPromise = null;\n promise.cancel();\n }\n};\n\nPromiseSpawn.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n this._generator = this._generatorFunction.call(this._receiver);\n this._receiver =\n this._generatorFunction = undefined;\n this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n var promise = this._promise;\n if (result === errorObj) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._rejectCallback(result.e, false);\n }\n }\n\n var value = result.value;\n if (result.done === true) {\n this._cleanup();\n if (this._cancellationPhase) {\n return promise.cancel();\n } else {\n return promise._resolveCallback(value);\n }\n } else {\n var maybePromise = tryConvertToPromise(value, this._promise);\n if (!(maybePromise instanceof Promise)) {\n maybePromise =\n promiseFromYieldHandler(maybePromise,\n this._yieldHandlers,\n this._promise);\n if (maybePromise === null) {\n this._promiseRejected(\n new TypeError(\n \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", String(value)) +\n \"From coroutine:\\u000a\" +\n this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n )\n );\n return;\n }\n }\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n this._yieldedPromise = maybePromise;\n maybePromise._proxy(this, null);\n } else if (((bitField & 33554432) !== 0)) {\n Promise._async.invoke(\n this._promiseFulfilled, this, maybePromise._value()\n );\n } else if (((bitField & 16777216) !== 0)) {\n Promise._async.invoke(\n this._promiseRejected, this, maybePromise._reason()\n );\n } else {\n this._promiseCancelled();\n }\n }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n if (typeof generatorFunction !== \"function\") {\n throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var yieldHandler = Object(options).yieldHandler;\n var PromiseSpawn$ = PromiseSpawn;\n var stack = new Error().stack;\n return function () {\n var generator = generatorFunction.apply(this, arguments);\n var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n stack);\n var ret = spawn.promise();\n spawn._generator = generator;\n spawn._promiseFulfilled(undefined);\n return ret;\n };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n if (typeof generatorFunction !== \"function\") {\n return apiRejection(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var spawn = new PromiseSpawn(generatorFunction, this);\n var ret = spawn.promise();\n spawn._run(Promise.spawn);\n return ret;\n};\n};\n\n},{\"./errors\":12,\"./util\":36}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (false) { var i, promiseSetters, thenCallbacks, holderClasses, generateHolderClass, promiseSetter, thenCallback; }\n\nPromise.join = function () {\n var last = arguments.length - 1;\n var fn;\n if (last > 0 && typeof arguments[last] === \"function\") {\n fn = arguments[last];\n if (false) { var context, bitField, maybePromise, i, callbacks, holder, HolderClass, ret; }\n }\n var args = [].slice.call(arguments);;\n if (fn) args.pop();\n var ret = new PromiseArray(args).promise();\n return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n\n},{\"./util\":36}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n this.constructor$(promises);\n this._promise._captureStackTrace();\n var context = Promise._getContext();\n this._callback = util.contextBind(context, fn);\n this._preservedValues = _filter === INTERNAL\n ? new Array(this.length())\n : null;\n this._limit = limit;\n this._inFlight = 0;\n this._queue = [];\n async.invoke(this._asyncInit, this, undefined);\n if (util.isArray(promises)) {\n for (var i = 0; i < promises.length; ++i) {\n var maybePromise = promises[i];\n if (maybePromise instanceof Promise) {\n maybePromise.suppressUnhandledRejections();\n }\n }\n }\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var values = this._values;\n var length = this.length();\n var preservedValues = this._preservedValues;\n var limit = this._limit;\n\n if (index < 0) {\n index = (index * -1) - 1;\n values[index] = value;\n if (limit >= 1) {\n this._inFlight--;\n this._drainQueue();\n if (this._isResolved()) return true;\n }\n } else {\n if (limit >= 1 && this._inFlight >= limit) {\n values[index] = value;\n this._queue.push(index);\n return false;\n }\n if (preservedValues !== null) preservedValues[index] = value;\n\n var promise = this._promise;\n var callback = this._callback;\n var receiver = promise._boundValue();\n promise._pushContext();\n var ret = tryCatch(callback).call(receiver, value, index, length);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n promise\n );\n if (ret === errorObj) {\n this._reject(ret.e);\n return true;\n }\n\n var maybePromise = tryConvertToPromise(ret, this._promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n var bitField = maybePromise._bitField;\n ;\n if (((bitField & 50397184) === 0)) {\n if (limit >= 1) this._inFlight++;\n values[index] = maybePromise;\n maybePromise._proxy(this, (index + 1) * -1);\n return false;\n } else if (((bitField & 33554432) !== 0)) {\n ret = maybePromise._value();\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(maybePromise._reason());\n return true;\n } else {\n this._cancel();\n return true;\n }\n }\n values[index] = ret;\n }\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= length) {\n if (preservedValues !== null) {\n this._filter(values, preservedValues);\n } else {\n this._resolve(values);\n }\n return true;\n }\n return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n var queue = this._queue;\n var limit = this._limit;\n var values = this._values;\n while (queue.length > 0 && this._inFlight < limit) {\n if (this._isResolved()) return;\n var index = queue.pop();\n this._promiseFulfilled(values[index], index);\n }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n var len = values.length;\n var ret = new Array(len);\n var j = 0;\n for (var i = 0; i < len; ++i) {\n if (booleans[i]) ret[j++] = values[i];\n }\n ret.length = j;\n this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n\n var limit = 0;\n if (options !== undefined) {\n if (typeof options === \"object\" && options !== null) {\n if (typeof options.concurrency !== \"number\") {\n return Promise.reject(\n new TypeError(\"'concurrency' must be a number but it is \" +\n util.classString(options.concurrency)));\n }\n limit = options.concurrency;\n } else {\n return Promise.reject(new TypeError(\n \"options argument must be an object but it is \" +\n util.classString(options)));\n }\n }\n limit = typeof limit === \"number\" &&\n isFinite(limit) && limit >= 1 ? limit : 0;\n return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n return map(promises, fn, options, _filter);\n};\n\n\n};\n\n},{\"./util\":36}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n if (typeof fn !== \"function\") {\n throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return function () {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value = tryCatch(fn).apply(this, arguments);\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.method\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value;\n if (arguments.length > 1) {\n debug.deprecated(\"calling Promise.try with more than 1 argument\");\n var arg = arguments[1];\n var ctx = arguments[2];\n value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n : tryCatch(fn).call(ctx, arg);\n } else {\n value = tryCatch(fn)();\n }\n var promiseCreated = ret._popContext();\n debug.checkForgottenReturns(\n value, promiseCreated, \"Promise.try\", ret);\n ret._resolveFromSyncValue(value);\n return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n if (value === util.errorObj) {\n this._rejectCallback(value.e, false);\n } else {\n this._resolveCallback(value, true);\n }\n};\n};\n\n},{\"./util\":36}],20:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = _dereq_(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = _dereq_(\"./es5\");\n\nfunction isUntypedError(obj) {\n return obj instanceof Error &&\n es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n var ret;\n if (isUntypedError(obj)) {\n ret = new OperationalError(obj);\n ret.name = obj.name;\n ret.message = obj.message;\n ret.stack = obj.stack;\n var keys = es5.keys(obj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!rErrorKey.test(key)) {\n ret[key] = obj[key];\n }\n }\n return ret;\n }\n util.markAsOriginatingFromRejection(obj);\n return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n return function(err, value) {\n if (promise === null) return;\n if (err) {\n var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n promise._attachExtraTrace(wrapped);\n promise._reject(wrapped);\n } else if (!multiArgs) {\n promise._fulfill(value);\n } else {\n var args = [].slice.call(arguments, 1);;\n promise._fulfill(args);\n }\n promise = null;\n };\n}\n\nmodule.exports = nodebackForPromise;\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],21:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n var promise = this;\n if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n var ret =\n tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nfunction successAdapter(val, nodeback) {\n var promise = this;\n var receiver = promise._boundValue();\n var ret = val === undefined\n ? tryCatch(nodeback).call(receiver, null)\n : tryCatch(nodeback).call(receiver, null, val);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\nfunction errorAdapter(reason, nodeback) {\n var promise = this;\n if (!reason) {\n var newReason = new Error(reason + \"\");\n newReason.cause = reason;\n reason = newReason;\n }\n var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n options) {\n if (typeof nodeback == \"function\") {\n var adapter = successAdapter;\n if (options !== undefined && Object(options).spread) {\n adapter = spreadAdapter;\n }\n this._then(\n adapter,\n errorAdapter,\n undefined,\n this,\n nodeback\n );\n }\n return this;\n};\n};\n\n},{\"./util\":36}],22:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n return new TypeError(\"circular promise resolution chain\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = _dereq_(\"./util\");\nutil.setReflectHandler(reflectHandler);\n\nvar getDomain = function() {\n var domain = process.domain;\n if (domain === undefined) {\n return null;\n }\n return domain;\n};\nvar getContextDefault = function() {\n return null;\n};\nvar getContextDomain = function() {\n return {\n domain: getDomain(),\n async: null\n };\n};\nvar AsyncResource = util.isNode && util.nodeSupportsAsyncResource ?\n _dereq_(\"async_hooks\").AsyncResource : null;\nvar getContextAsyncHooks = function() {\n return {\n domain: getDomain(),\n async: new AsyncResource(\"Bluebird::Promise\")\n };\n};\nvar getContext = util.isNode ? getContextDomain : getContextDefault;\nutil.notEnumerableProp(Promise, \"_getContext\", getContext);\nvar enableAsyncHooks = function() {\n getContext = getContextAsyncHooks;\n util.notEnumerableProp(Promise, \"_getContext\", getContextAsyncHooks);\n};\nvar disableAsyncHooks = function() {\n getContext = getContextDomain;\n util.notEnumerableProp(Promise, \"_getContext\", getContextDomain);\n};\n\nvar es5 = _dereq_(\"./es5\");\nvar Async = _dereq_(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = _dereq_(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = _dereq_(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n _dereq_(\"./promise_array\")(Promise, INTERNAL,\n tryConvertToPromise, apiRejection, Proxyable);\nvar Context = _dereq_(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\n\nvar debug = _dereq_(\"./debuggability\")(Promise, Context,\n enableAsyncHooks, disableAsyncHooks);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n _dereq_(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n if (self == null || self.constructor !== Promise) {\n throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n if (typeof executor !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n }\n\n}\n\nfunction Promise(executor) {\n if (executor !== INTERNAL) {\n check(this, executor);\n }\n this._bitField = 0;\n this._fulfillmentHandler0 = undefined;\n this._rejectionHandler0 = undefined;\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._resolveFromExecutor(executor);\n this._promiseCreated();\n this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n var len = arguments.length;\n if (len > 1) {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (util.isObject(item)) {\n catchInstances[j++] = item;\n } else {\n return apiRejection(\"Catch statement predicate: \" +\n \"expecting an object but got \" + util.classString(item));\n }\n }\n catchInstances.length = j;\n fn = arguments[i];\n\n if (typeof fn !== \"function\") {\n throw new TypeError(\"The last argument to .catch() \" +\n \"must be a function, got \" + util.toString(fn));\n }\n return this.then(undefined, catchFilter(catchInstances, fn, this));\n }\n return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n return this._then(reflectHandler,\n reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n if (debug.warnings() && arguments.length > 0 &&\n typeof didFulfill !== \"function\" &&\n typeof didReject !== \"function\") {\n var msg = \".then() only accepts functions but was passed: \" +\n util.classString(didFulfill);\n if (arguments.length > 1) {\n msg += \", \" + util.classString(didReject);\n }\n this._warn(msg);\n }\n return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n var promise =\n this._then(didFulfill, didReject, undefined, undefined, undefined);\n promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n var ret = {\n isFulfilled: false,\n isRejected: false,\n fulfillmentValue: undefined,\n rejectionReason: undefined\n };\n if (this.isFulfilled()) {\n ret.fulfillmentValue = this.value();\n ret.isFulfilled = true;\n } else if (this.isRejected()) {\n ret.rejectionReason = this.reason();\n ret.isRejected = true;\n }\n return ret;\n};\n\nPromise.prototype.all = function () {\n if (arguments.length > 0) {\n this._warn(\".all() was passed arguments but it does not take any\");\n }\n return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n : false;\n var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n if (result === errorObj) {\n ret._rejectCallback(result.e, true);\n }\n if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.all = function (promises) {\n return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n var ret = tryConvertToPromise(obj);\n if (!(ret instanceof Promise)) {\n ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._setFulfilled();\n ret._rejectionHandler0 = obj;\n }\n return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._rejectCallback(reason, true);\n return ret;\n};\n\nPromise.setScheduler = function(fn) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n didFulfill,\n didReject,\n _, receiver,\n internalData\n) {\n var haveInternalData = internalData !== undefined;\n var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n var target = this._target();\n var bitField = target._bitField;\n\n if (!haveInternalData) {\n promise._propagateFrom(this, 3);\n promise._captureStackTrace();\n if (receiver === undefined &&\n ((this._bitField & 2097152) !== 0)) {\n if (!((bitField & 50397184) === 0)) {\n receiver = this._boundValue();\n } else {\n receiver = target === this ? undefined : this._boundTo;\n }\n }\n this._fireEvent(\"promiseChained\", this, promise);\n }\n\n var context = getContext();\n if (!((bitField & 50397184) === 0)) {\n var handler, value, settler = target._settlePromiseCtx;\n if (((bitField & 33554432) !== 0)) {\n value = target._rejectionHandler0;\n handler = didFulfill;\n } else if (((bitField & 16777216) !== 0)) {\n value = target._fulfillmentHandler0;\n handler = didReject;\n target._unsetRejectionIsUnhandled();\n } else {\n settler = target._settlePromiseLateCancellationObserver;\n value = new CancellationError(\"late cancellation observer\");\n target._attachExtraTrace(value);\n handler = didReject;\n }\n\n async.invoke(settler, target, {\n handler: util.contextBind(context, handler),\n promise: promise,\n receiver: receiver,\n value: value\n });\n } else {\n target._addCallbacks(didFulfill, didReject, promise,\n receiver, context);\n }\n\n return promise;\n};\n\nPromise.prototype._length = function () {\n return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n this._bitField = (this._bitField & -65536) |\n (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n this._bitField = this._bitField | 33554432;\n this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n this._bitField = this._bitField | 16777216;\n this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n this._bitField = this._bitField | 67108864;\n this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n this._bitField = this._bitField | 65536;\n this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n if (async.hasCustomScheduler()) return;\n var bitField = this._bitField;\n this._bitField = bitField |\n (((bitField & 536870912) >> 2) ^\n 134217728);\n};\n\nPromise.prototype._setNoAsyncGuarantee = function() {\n this._bitField = (this._bitField | 536870912) &\n (~134217728);\n};\n\nPromise.prototype._receiverAt = function (index) {\n var ret = index === 0 ? this._receiver0 : this[\n index * 4 - 4 + 3];\n if (ret === UNDEFINED_BINDING) {\n return undefined;\n } else if (ret === undefined && this._isBound()) {\n return this._boundValue();\n }\n return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n return this[\n index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n return this[\n index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n var bitField = follower._bitField;\n var fulfill = follower._fulfillmentHandler0;\n var reject = follower._rejectionHandler0;\n var promise = follower._promise0;\n var receiver = follower._receiverAt(0);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n var fulfill = follower._fulfillmentHandlerAt(index);\n var reject = follower._rejectionHandlerAt(index);\n var promise = follower._promiseAt(index);\n var receiver = follower._receiverAt(index);\n if (receiver === undefined) receiver = UNDEFINED_BINDING;\n this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n fulfill,\n reject,\n promise,\n receiver,\n context\n) {\n var index = this._length();\n\n if (index >= 65535 - 4) {\n index = 0;\n this._setLength(0);\n }\n\n if (index === 0) {\n this._promise0 = promise;\n this._receiver0 = receiver;\n if (typeof fulfill === \"function\") {\n this._fulfillmentHandler0 = util.contextBind(context, fulfill);\n }\n if (typeof reject === \"function\") {\n this._rejectionHandler0 = util.contextBind(context, reject);\n }\n } else {\n var base = index * 4 - 4;\n this[base + 2] = promise;\n this[base + 3] = receiver;\n if (typeof fulfill === \"function\") {\n this[base + 0] =\n util.contextBind(context, fulfill);\n }\n if (typeof reject === \"function\") {\n this[base + 1] =\n util.contextBind(context, reject);\n }\n }\n this._setLength(index + 1);\n return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n if (((this._bitField & 117506048) !== 0)) return;\n if (value === this)\n return this._rejectCallback(makeSelfResolutionError(), false);\n var maybePromise = tryConvertToPromise(value, this);\n if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n\n var promise = maybePromise._target();\n\n if (promise === this) {\n this._reject(makeSelfResolutionError());\n return;\n }\n\n var bitField = promise._bitField;\n if (((bitField & 50397184) === 0)) {\n var len = this._length();\n if (len > 0) promise._migrateCallback0(this);\n for (var i = 1; i < len; ++i) {\n promise._migrateCallbackAt(this, i);\n }\n this._setFollowing();\n this._setLength(0);\n this._setFollowee(maybePromise);\n } else if (((bitField & 33554432) !== 0)) {\n this._fulfill(promise._value());\n } else if (((bitField & 16777216) !== 0)) {\n this._reject(promise._reason());\n } else {\n var reason = new CancellationError(\"late cancellation observer\");\n promise._attachExtraTrace(reason);\n this._reject(reason);\n }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n var trace = util.ensureErrorObject(reason);\n var hasStack = trace === reason;\n if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n var message = \"a promise was rejected with a non-error: \" +\n util.classString(reason);\n this._warn(message, true);\n }\n this._attachExtraTrace(trace, synchronous ? hasStack : false);\n this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n if (executor === INTERNAL) return;\n var promise = this;\n this._captureStackTrace();\n this._pushContext();\n var synchronous = true;\n var r = this._execute(executor, function(value) {\n promise._resolveCallback(value);\n }, function (reason) {\n promise._rejectCallback(reason, synchronous);\n });\n synchronous = false;\n this._popContext();\n\n if (r !== undefined) {\n promise._rejectCallback(r, true);\n }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n handler, receiver, value, promise\n) {\n var bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n promise._pushContext();\n var x;\n if (receiver === APPLY) {\n if (!value || typeof value.length !== \"number\") {\n x = errorObj;\n x.e = new TypeError(\"cannot .spread() a non-array: \" +\n util.classString(value));\n } else {\n x = tryCatch(handler).apply(this._boundValue(), value);\n }\n } else {\n x = tryCatch(handler).call(receiver, value);\n }\n var promiseCreated = promise._popContext();\n bitField = promise._bitField;\n if (((bitField & 65536) !== 0)) return;\n\n if (x === NEXT_FILTER) {\n promise._reject(value);\n } else if (x === errorObj) {\n promise._rejectCallback(x.e, false);\n } else {\n debug.checkForgottenReturns(x, promiseCreated, \"\", promise, this);\n promise._resolveCallback(x);\n }\n};\n\nPromise.prototype._target = function() {\n var ret = this;\n while (ret._isFollowing()) ret = ret._followee();\n return ret;\n};\n\nPromise.prototype._followee = function() {\n return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n var isPromise = promise instanceof Promise;\n var bitField = this._bitField;\n var asyncGuaranteed = ((bitField & 134217728) !== 0);\n if (((bitField & 65536) !== 0)) {\n if (isPromise) promise._invokeInternalOnCancel();\n\n if (receiver instanceof PassThroughHandlerContext &&\n receiver.isFinallyHandler()) {\n receiver.cancelPromise = promise;\n if (tryCatch(handler).call(receiver, value) === errorObj) {\n promise._reject(errorObj.e);\n }\n } else if (handler === reflectHandler) {\n promise._fulfill(reflectHandler.call(receiver));\n } else if (receiver instanceof Proxyable) {\n receiver._promiseCancelled(promise);\n } else if (isPromise || promise instanceof PromiseArray) {\n promise._cancel();\n } else {\n receiver.cancel();\n }\n } else if (typeof handler === \"function\") {\n if (!isPromise) {\n handler.call(receiver, value, promise);\n } else {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (receiver instanceof Proxyable) {\n if (!receiver._isResolved()) {\n if (((bitField & 33554432) !== 0)) {\n receiver._promiseFulfilled(value, promise);\n } else {\n receiver._promiseRejected(value, promise);\n }\n }\n } else if (isPromise) {\n if (asyncGuaranteed) promise._setAsyncGuaranteed();\n if (((bitField & 33554432) !== 0)) {\n promise._fulfill(value);\n } else {\n promise._reject(value);\n }\n }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n var handler = ctx.handler;\n var promise = ctx.promise;\n var receiver = ctx.receiver;\n var value = ctx.value;\n if (typeof handler === \"function\") {\n if (!(promise instanceof Promise)) {\n handler.call(receiver, value, promise);\n } else {\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (promise instanceof Promise) {\n promise._reject(value);\n }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n var promise = this._promise0;\n var receiver = this._receiverAt(0);\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n var base = index * 4 - 4;\n this[base + 2] =\n this[base + 3] =\n this[base + 0] =\n this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n if (value === this) {\n var err = makeSelfResolutionError();\n this._attachExtraTrace(err);\n return this._reject(err);\n }\n this._setFulfilled();\n this._rejectionHandler0 = value;\n\n if ((bitField & 65535) > 0) {\n if (((bitField & 134217728) !== 0)) {\n this._settlePromises();\n } else {\n async.settlePromises(this);\n }\n this._dereferenceTrace();\n }\n};\n\nPromise.prototype._reject = function (reason) {\n var bitField = this._bitField;\n if (((bitField & 117506048) >>> 16)) return;\n this._setRejected();\n this._fulfillmentHandler0 = reason;\n\n if (this._isFinal()) {\n return async.fatalError(reason, util.isNode);\n }\n\n if ((bitField & 65535) > 0) {\n async.settlePromises(this);\n } else {\n this._ensurePossibleRejectionHandled();\n }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n for (var i = 1; i < len; i++) {\n var handler = this._fulfillmentHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, value);\n }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n for (var i = 1; i < len; i++) {\n var handler = this._rejectionHandlerAt(i);\n var promise = this._promiseAt(i);\n var receiver = this._receiverAt(i);\n this._clearCallbackDataAtIndex(i);\n this._settlePromise(promise, handler, receiver, reason);\n }\n};\n\nPromise.prototype._settlePromises = function () {\n var bitField = this._bitField;\n var len = (bitField & 65535);\n\n if (len > 0) {\n if (((bitField & 16842752) !== 0)) {\n var reason = this._fulfillmentHandler0;\n this._settlePromise0(this._rejectionHandler0, reason, bitField);\n this._rejectPromises(len, reason);\n } else {\n var value = this._rejectionHandler0;\n this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n this._fulfillPromises(len, value);\n }\n this._setLength(0);\n }\n this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n var bitField = this._bitField;\n if (((bitField & 33554432) !== 0)) {\n return this._rejectionHandler0;\n } else if (((bitField & 16777216) !== 0)) {\n return this._fulfillmentHandler0;\n }\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.toStringTag) {\n es5.defineProperty(Promise.prototype, Symbol.toStringTag, {\n get: function () {\n return \"Object\";\n }\n });\n}\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n debug.deprecated(\"Promise.defer\", \"new Promise\");\n var promise = new Promise(INTERNAL);\n return {\n promise: promise,\n resolve: deferResolve,\n reject: deferReject\n };\n};\n\nutil.notEnumerableProp(Promise,\n \"_makeSelfResolutionError\",\n makeSelfResolutionError);\n\n_dereq_(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n debug);\n_dereq_(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\n_dereq_(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\n_dereq_(\"./direct_resolve\")(Promise);\n_dereq_(\"./synchronous_inspection\")(Promise);\n_dereq_(\"./join\")(\n Promise, PromiseArray, tryConvertToPromise, INTERNAL, async);\nPromise.Promise = Promise;\nPromise.version = \"3.7.2\";\n_dereq_('./call_get.js')(Promise);\n_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\n_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./nodeify.js')(Promise);\n_dereq_('./promisify.js')(Promise, INTERNAL);\n_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./settle.js')(Promise, PromiseArray, debug);\n_dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n_dereq_('./timers.js')(Promise, INTERNAL, debug);\n_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\n_dereq_('./any.js')(Promise);\n_dereq_('./each.js')(Promise, INTERNAL);\n_dereq_('./filter.js')(Promise, INTERNAL);\n \n util.toFastProperties(Promise); \n util.toFastProperties(Promise.prototype); \n function fillTypes(value) { \n var p = new Promise(INTERNAL); \n p._fulfillmentHandler0 = value; \n p._rejectionHandler0 = value; \n p._promise0 = value; \n p._receiver0 = value; \n } \n // Complete slack tracking, opt out of field-type tracking and \n // stabilize map \n fillTypes({a: 1}); \n fillTypes({b: 2}); \n fillTypes({c: 3}); \n fillTypes(1); \n fillTypes(function(){}); \n fillTypes(undefined); \n fillTypes(false); \n fillTypes(new Promise(INTERNAL)); \n debug.setBounds(Async.firstLineError, util.lastLineError); \n return Promise; \n\n};\n\n},{\"./any.js\":1,\"./async\":2,\"./bind\":3,\"./call_get.js\":5,\"./cancel\":6,\"./catch_filter\":7,\"./context\":8,\"./debuggability\":9,\"./direct_resolve\":10,\"./each.js\":11,\"./errors\":12,\"./es5\":13,\"./filter.js\":14,\"./finally\":15,\"./generators.js\":16,\"./join\":17,\"./map.js\":18,\"./method\":19,\"./nodeback\":20,\"./nodeify.js\":21,\"./promise_array\":23,\"./promisify.js\":24,\"./props.js\":25,\"./race.js\":27,\"./reduce.js\":28,\"./settle.js\":30,\"./some.js\":31,\"./synchronous_inspection\":32,\"./thenables\":33,\"./timers.js\":34,\"./using.js\":35,\"./util\":36,\"async_hooks\":undefined}],23:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n apiRejection, Proxyable) {\nvar util = _dereq_(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n switch(val) {\n case -2: return [];\n case -3: return {};\n case -6: return new Map();\n }\n}\n\nfunction PromiseArray(values) {\n var promise = this._promise = new Promise(INTERNAL);\n if (values instanceof Promise) {\n promise._propagateFrom(values, 3);\n values.suppressUnhandledRejections();\n }\n promise._setOnCancel(this);\n this._values = values;\n this._length = 0;\n this._totalResolved = 0;\n this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n var values = tryConvertToPromise(this._values, this._promise);\n if (values instanceof Promise) {\n values = values._target();\n var bitField = values._bitField;\n ;\n this._values = values;\n\n if (((bitField & 50397184) === 0)) {\n this._promise._setAsyncGuaranteed();\n return values._then(\n init,\n this._reject,\n undefined,\n this,\n resolveValueIfEmpty\n );\n } else if (((bitField & 33554432) !== 0)) {\n values = values._value();\n } else if (((bitField & 16777216) !== 0)) {\n return this._reject(values._reason());\n } else {\n return this._cancel();\n }\n }\n values = util.asArray(values);\n if (values === null) {\n var err = apiRejection(\n \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n this._promise._rejectCallback(err, false);\n return;\n }\n\n if (values.length === 0) {\n if (resolveValueIfEmpty === -5) {\n this._resolveEmptyArray();\n }\n else {\n this._resolve(toResolutionValue(resolveValueIfEmpty));\n }\n return;\n }\n this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n var len = this.getActualLength(values.length);\n this._length = len;\n this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n var result = this._promise;\n var isResolved = false;\n var bitField = null;\n for (var i = 0; i < len; ++i) {\n var maybePromise = tryConvertToPromise(values[i], result);\n\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n bitField = maybePromise._bitField;\n } else {\n bitField = null;\n }\n\n if (isResolved) {\n if (bitField !== null) {\n maybePromise.suppressUnhandledRejections();\n }\n } else if (bitField !== null) {\n if (((bitField & 50397184) === 0)) {\n maybePromise._proxy(this, i);\n this._values[i] = maybePromise;\n } else if (((bitField & 33554432) !== 0)) {\n isResolved = this._promiseFulfilled(maybePromise._value(), i);\n } else if (((bitField & 16777216) !== 0)) {\n isResolved = this._promiseRejected(maybePromise._reason(), i);\n } else {\n isResolved = this._promiseCancelled(i);\n }\n } else {\n isResolved = this._promiseFulfilled(maybePromise, i);\n }\n }\n if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n this._values = null;\n this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n if (this._isResolved() || !this._promise._isCancellable()) return;\n this._values = null;\n this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n this._values = null;\n this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n this._cancel();\n return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n this._totalResolved++;\n this._reject(reason);\n return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n if (this._isResolved()) return;\n var values = this._values;\n this._cancel();\n if (values instanceof Promise) {\n values.cancel();\n } else {\n for (var i = 0; i < values.length; ++i) {\n if (values[i] instanceof Promise) {\n values[i].cancel();\n }\n }\n }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n return len;\n};\n\nreturn PromiseArray;\n};\n\n},{\"./util\":36}],24:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = _dereq_(\"./util\");\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = _dereq_(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n \"arity\", \"length\",\n \"name\",\n \"arguments\",\n \"caller\",\n \"callee\",\n \"prototype\",\n \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n return util.isIdentifier(name) &&\n name.charAt(0) !== \"_\" &&\n name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n try {\n return fn.__isPromisified__ === true;\n }\n catch (e) {\n return false;\n }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n var val = util.getDataPropertyOrDefault(obj, key + suffix,\n defaultPromisified);\n return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n for (var i = 0; i < ret.length; i += 2) {\n var key = ret[i];\n if (suffixRegexp.test(key)) {\n var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n for (var j = 0; j < ret.length; j += 2) {\n if (ret[j] === keyWithoutAsyncSuffix) {\n throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\"\n .replace(\"%s\", suffix));\n }\n }\n }\n }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n var keys = util.inheritedDataKeys(obj);\n var ret = [];\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var value = obj[key];\n var passesDefaultFilter = filter === defaultFilter\n ? true : defaultFilter(key, value, obj);\n if (typeof value === \"function\" &&\n !isPromisified(value) &&\n !hasPromisified(obj, key, suffix) &&\n filter(key, value, obj, passesDefaultFilter)) {\n ret.push(key, value);\n }\n }\n checkValid(ret, suffix, suffixRegexp);\n return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (false) { var parameterCount, parameterDeclaration, argumentSequence, switchCaseArgumentOrder; }\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n var defaultThis = (function() {return this;})();\n var method = callback;\n if (typeof method === \"string\") {\n callback = fn;\n }\n function promisified() {\n var _receiver = receiver;\n if (receiver === THIS) _receiver = this;\n var promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n var cb = typeof method === \"string\" && this !== defaultThis\n ? this[method] : callback;\n var fn = nodebackForPromise(promise, multiArgs);\n try {\n cb.apply(_receiver, withAppended(arguments, fn));\n } catch(e) {\n promise._rejectCallback(maybeWrapAsError(e), true, true);\n }\n if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n return promise;\n }\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n ? makeNodePromisifiedEval\n : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n var methods =\n promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n for (var i = 0, len = methods.length; i < len; i+= 2) {\n var key = methods[i];\n var fn = methods[i+1];\n var promisifiedKey = key + suffix;\n if (promisifier === makeNodePromisified) {\n obj[promisifiedKey] =\n makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n } else {\n var promisified = promisifier(fn, function() {\n return makeNodePromisified(key, THIS, key,\n fn, suffix, multiArgs);\n });\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n obj[promisifiedKey] = promisified;\n }\n }\n util.toFastProperties(obj);\n return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n return makeNodePromisified(callback, receiver, undefined,\n callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n }\n if (isPromisified(fn)) {\n return fn;\n }\n options = Object(options);\n var receiver = options.context === undefined ? THIS : options.context;\n var multiArgs = !!options.multiArgs;\n var ret = promisify(fn, receiver, multiArgs);\n util.copyDescriptors(fn, ret, propsFilter);\n return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n if (typeof target !== \"function\" && typeof target !== \"object\") {\n throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n options = Object(options);\n var multiArgs = !!options.multiArgs;\n var suffix = options.suffix;\n if (typeof suffix !== \"string\") suffix = defaultSuffix;\n var filter = options.filter;\n if (typeof filter !== \"function\") filter = defaultFilter;\n var promisifier = options.promisifier;\n if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n if (!util.isIdentifier(suffix)) {\n throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n\n var keys = util.inheritedDataKeys(target);\n for (var i = 0; i < keys.length; ++i) {\n var value = target[keys[i]];\n if (keys[i] !== \"constructor\" &&\n util.isClass(value)) {\n promisifyAll(value.prototype, suffix, filter, promisifier,\n multiArgs);\n promisifyAll(value, suffix, filter, promisifier, multiArgs);\n }\n }\n\n return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n\n},{\"./errors\":12,\"./nodeback\":20,\"./util\":36}],25:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar isObject = util.isObject;\nvar es5 = _dereq_(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n var index = 0;\n var size = 0;\n\n function extractEntry(value, key) {\n this[index] = value;\n this[index + size] = key;\n index++;\n }\n\n return function mapToEntries(map) {\n size = map.size;\n index = 0;\n var ret = new Array(map.size * 2);\n map.forEach(extractEntry, ret);\n return ret;\n };\n})();\n\nvar entriesToMap = function(entries) {\n var ret = new Es6Map();\n var length = entries.length / 2 | 0;\n for (var i = 0; i < length; ++i) {\n var key = entries[length + i];\n var value = entries[i];\n ret.set(key, value);\n }\n return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n var isMap = false;\n var entries;\n if (Es6Map !== undefined && obj instanceof Es6Map) {\n entries = mapToEntries(obj);\n isMap = true;\n } else {\n var keys = es5.keys(obj);\n var len = keys.length;\n entries = new Array(len * 2);\n for (var i = 0; i < len; ++i) {\n var key = keys[i];\n entries[i] = obj[key];\n entries[i + len] = key;\n }\n }\n this.constructor$(entries);\n this._isMap = isMap;\n this._init$(undefined, isMap ? -6 : -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n var val;\n if (this._isMap) {\n val = entriesToMap(this._values);\n } else {\n val = {};\n var keyOffset = this.length();\n for (var i = 0, len = this.length(); i < len; ++i) {\n val[this._values[i + keyOffset]] = this._values[i];\n }\n }\n this._resolve(val);\n return true;\n }\n return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n return len >> 1;\n};\n\nfunction props(promises) {\n var ret;\n var castValue = tryConvertToPromise(promises);\n\n if (!isObject(castValue)) {\n return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n } else if (castValue instanceof Promise) {\n ret = castValue._then(\n Promise.props, undefined, undefined, undefined, undefined);\n } else {\n ret = new PropertiesPromiseArray(castValue).promise();\n }\n\n if (castValue instanceof Promise) {\n ret._propagateFrom(castValue, 2);\n }\n return ret;\n}\n\nPromise.prototype.props = function () {\n return props(this);\n};\n\nPromise.props = function (promises) {\n return props(promises);\n};\n};\n\n},{\"./es5\":13,\"./util\":36}],26:[function(_dereq_,module,exports){\n\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n for (var j = 0; j < len; ++j) {\n dst[j + dstIndex] = src[j + srcIndex];\n src[j + srcIndex] = void 0;\n }\n}\n\nfunction Queue(capacity) {\n this._capacity = capacity;\n this._length = 0;\n this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n var length = this.length();\n this._checkCapacity(length + 1);\n var i = (this._front + length) & (this._capacity - 1);\n this[i] = arg;\n this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n var length = this.length() + 3;\n if (this._willBeOverCapacity(length)) {\n this._pushOne(fn);\n this._pushOne(receiver);\n this._pushOne(arg);\n return;\n }\n var j = this._front + length - 3;\n this._checkCapacity(length);\n var wrapMask = this._capacity - 1;\n this[(j + 0) & wrapMask] = fn;\n this[(j + 1) & wrapMask] = receiver;\n this[(j + 2) & wrapMask] = arg;\n this._length = length;\n};\n\nQueue.prototype.shift = function () {\n var front = this._front,\n ret = this[front];\n\n this[front] = undefined;\n this._front = (front + 1) & (this._capacity - 1);\n this._length--;\n return ret;\n};\n\nQueue.prototype.length = function () {\n return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n if (this._capacity < size) {\n this._resizeTo(this._capacity << 1);\n }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n var oldCapacity = this._capacity;\n this._capacity = capacity;\n var front = this._front;\n var length = this._length;\n var moveItemsCount = (front + length) & (oldCapacity - 1);\n arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n\n},{}],27:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\n\nvar raceLater = function (promise) {\n return promise.then(function(array) {\n return race(array, promise);\n });\n};\n\nfunction race(promises, parent) {\n var maybePromise = tryConvertToPromise(promises);\n\n if (maybePromise instanceof Promise) {\n return raceLater(maybePromise);\n } else {\n promises = util.asArray(promises);\n if (promises === null)\n return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n }\n\n var ret = new Promise(INTERNAL);\n if (parent !== undefined) {\n ret._propagateFrom(parent, 3);\n }\n var fulfill = ret._fulfill;\n var reject = ret._reject;\n for (var i = 0, len = promises.length; i < len; ++i) {\n var val = promises[i];\n\n if (val === undefined && !(i in promises)) {\n continue;\n }\n\n Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n }\n return ret;\n}\n\nPromise.race = function (promises) {\n return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n return race(this, undefined);\n};\n\n};\n\n},{\"./util\":36}],28:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL,\n debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n this.constructor$(promises);\n var context = Promise._getContext();\n this._fn = util.contextBind(context, fn);\n if (initialValue !== undefined) {\n initialValue = Promise.resolve(initialValue);\n initialValue._attachCancellationCallback(this);\n }\n this._initialValue = initialValue;\n this._currentCancellable = null;\n if(_each === INTERNAL) {\n this._eachValues = Array(this._length);\n } else if (_each === 0) {\n this._eachValues = null;\n } else {\n this._eachValues = undefined;\n }\n this._promise._captureStackTrace();\n this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n if (this._eachValues !== undefined &&\n this._eachValues !== null &&\n accum !== INTERNAL) {\n this._eachValues.push(accum);\n }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n if (this._eachValues !== null) {\n this._eachValues.push(value);\n }\n return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n this._resolve(this._eachValues !== undefined ? this._eachValues\n : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n this._promise._resolveCallback(value);\n this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n if (sender === this._initialValue) return this._cancel();\n if (this._isResolved()) return;\n this._resultCancelled$();\n if (this._currentCancellable instanceof Promise) {\n this._currentCancellable.cancel();\n }\n if (this._initialValue instanceof Promise) {\n this._initialValue.cancel();\n }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n this._values = values;\n var value;\n var i;\n var length = values.length;\n if (this._initialValue !== undefined) {\n value = this._initialValue;\n i = 0;\n } else {\n value = Promise.resolve(values[0]);\n i = 1;\n }\n\n this._currentCancellable = value;\n\n for (var j = i; j < length; ++j) {\n var maybePromise = values[j];\n if (maybePromise instanceof Promise) {\n maybePromise.suppressUnhandledRejections();\n }\n }\n\n if (!value.isRejected()) {\n for (; i < length; ++i) {\n var ctx = {\n accum: null,\n value: values[i],\n index: i,\n length: length,\n array: this\n };\n\n value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n\n if ((i & 127) === 0) {\n value._setNoAsyncGuarantee();\n }\n }\n }\n\n if (this._eachValues !== undefined) {\n value = value\n ._then(this._eachComplete, undefined, undefined, this, undefined);\n }\n value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n if (this.isFulfilled()) {\n array._resolve(valueOrReason);\n } else {\n array._reject(valueOrReason);\n }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n return array.promise();\n}\n\nfunction gotAccum(accum) {\n this.accum = accum;\n this.array._gotAccum(accum);\n var value = tryConvertToPromise(this.value, this.array._promise);\n if (value instanceof Promise) {\n this.array._currentCancellable = value;\n return value._then(gotValue, undefined, undefined, this, undefined);\n } else {\n return gotValue.call(this, value);\n }\n}\n\nfunction gotValue(value) {\n var array = this.array;\n var promise = array._promise;\n var fn = tryCatch(array._fn);\n promise._pushContext();\n var ret;\n if (array._eachValues !== undefined) {\n ret = fn.call(promise._boundValue(), value, this.index, this.length);\n } else {\n ret = fn.call(promise._boundValue(),\n this.accum, value, this.index, this.length);\n }\n if (ret instanceof Promise) {\n array._currentCancellable = ret;\n }\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret,\n promiseCreated,\n array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n promise\n );\n return ret;\n}\n};\n\n},{\"./util\":36}],29:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n var GlobalSetImmediate = global.setImmediate;\n var ProcessNextTick = process.nextTick;\n schedule = util.isRecentNode\n ? function(fn) { GlobalSetImmediate.call(global, fn); }\n : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n typeof NativePromise.resolve === \"function\") {\n var nativePromise = NativePromise.resolve();\n schedule = function(fn) {\n nativePromise.then(fn);\n };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n !(typeof window !== \"undefined\" &&\n window.navigator &&\n (window.navigator.standalone || window.cordova)) &&\n (\"classList\" in document.documentElement)) {\n schedule = (function() {\n var div = document.createElement(\"div\");\n var opts = {attributes: true};\n var toggleScheduled = false;\n var div2 = document.createElement(\"div\");\n var o2 = new MutationObserver(function() {\n div.classList.toggle(\"foo\");\n toggleScheduled = false;\n });\n o2.observe(div2, opts);\n\n var scheduleToggle = function() {\n if (toggleScheduled) return;\n toggleScheduled = true;\n div2.classList.toggle(\"foo\");\n };\n\n return function schedule(fn) {\n var o = new MutationObserver(function() {\n o.disconnect();\n fn();\n });\n o.observe(div, opts);\n scheduleToggle();\n };\n })();\n} else if (typeof setImmediate !== \"undefined\") {\n schedule = function (fn) {\n setImmediate(fn);\n };\n} else if (typeof setTimeout !== \"undefined\") {\n schedule = function (fn) {\n setTimeout(fn, 0);\n };\n} else {\n schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n\n},{\"./util\":36}],30:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\n function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = _dereq_(\"./util\");\n\nfunction SettledPromiseArray(values) {\n this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n this._values[index] = inspection;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n return true;\n }\n return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var ret = new PromiseInspection();\n ret._bitField = 33554432;\n ret._settledValueField = value;\n return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n var ret = new PromiseInspection();\n ret._bitField = 16777216;\n ret._settledValueField = reason;\n return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n debug.deprecated(\".settle()\", \".reflect()\");\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.allSettled = function (promises) {\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n return Promise.settle(this);\n};\n};\n\n},{\"./util\":36}],31:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar RangeError = _dereq_(\"./errors\").RangeError;\nvar AggregateError = _dereq_(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n this.constructor$(values);\n this._howMany = 0;\n this._unwrap = false;\n this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n if (!this._initialized) {\n return;\n }\n if (this._howMany === 0) {\n this._resolve([]);\n return;\n }\n this._init$(undefined, -5);\n var isArrayResolved = isArray(this._values);\n if (!this._isResolved() &&\n isArrayResolved &&\n this._howMany > this._canPossiblyFulfill()) {\n this._reject(this._getRangeError(this.length()));\n }\n};\n\nSomePromiseArray.prototype.init = function () {\n this._initialized = true;\n this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n this._addFulfilled(value);\n if (this._fulfilled() === this.howMany()) {\n this._values.length = this.howMany();\n if (this.howMany() === 1 && this._unwrap) {\n this._resolve(this._values[0]);\n } else {\n this._resolve(this._values);\n }\n return true;\n }\n return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n this._addRejected(reason);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n if (this._values instanceof Promise || this._values == null) {\n return this._cancel();\n }\n this._addRejected(CANCELLATION);\n return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n if (this.howMany() > this._canPossiblyFulfill()) {\n var e = new AggregateError();\n for (var i = this.length(); i < this._values.length; ++i) {\n if (this._values[i] !== CANCELLATION) {\n e.push(this._values[i]);\n }\n }\n if (e.length > 0) {\n this._reject(e);\n } else {\n this._cancel();\n }\n return true;\n }\n return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n var message = \"Input array must contain at least \" +\n this._howMany + \" items but contains only \" + count + \" items\";\n return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n if ((howMany | 0) !== howMany || howMany < 0) {\n return apiRejection(\"expecting a positive integer\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(howMany);\n ret.init();\n return promise;\n}\n\nPromise.some = function (promises, howMany) {\n return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n\n},{\"./errors\":12,\"./util\":36}],32:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n if (promise !== undefined) {\n promise = promise._target();\n this._bitField = promise._bitField;\n this._settledValueField = promise._isFateSealed()\n ? promise._settledValue() : undefined;\n }\n else {\n this._bitField = 0;\n this._settledValueField = undefined;\n }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n if (!this.isFulfilled()) {\n throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n if (!this.isRejected()) {\n throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a See http://goo.gl/MqrFmX\\u000a\");\n }\n return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n var target = this._target();\n target._unsetRejectionIsUnhandled();\n return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n this._unsetRejectionIsUnhandled();\n return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n\n},{}],33:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n if (isObject(obj)) {\n if (obj instanceof Promise) return obj;\n var then = getThen(obj);\n if (then === errorObj) {\n if (context) context._pushContext();\n var ret = Promise.reject(then.e);\n if (context) context._popContext();\n return ret;\n } else if (typeof then === \"function\") {\n if (isAnyBluebirdPromise(obj)) {\n var ret = new Promise(INTERNAL);\n obj._then(\n ret._fulfill,\n ret._reject,\n undefined,\n ret,\n null\n );\n return ret;\n }\n return doThenable(obj, then, context);\n }\n }\n return obj;\n}\n\nfunction doGetThen(obj) {\n return obj.then;\n}\n\nfunction getThen(obj) {\n try {\n return doGetThen(obj);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n try {\n return hasProp.call(obj, \"_promise0\");\n } catch (e) {\n return false;\n }\n}\n\nfunction doThenable(x, then, context) {\n var promise = new Promise(INTERNAL);\n var ret = promise;\n if (context) context._pushContext();\n promise._captureStackTrace();\n if (context) context._popContext();\n var synchronous = true;\n var result = util.tryCatch(then).call(x, resolve, reject);\n synchronous = false;\n\n if (promise && result === errorObj) {\n promise._rejectCallback(result.e, true, true);\n promise = null;\n }\n\n function resolve(value) {\n if (!promise) return;\n promise._resolveCallback(value);\n promise = null;\n }\n\n function reject(reason) {\n if (!promise) return;\n promise._rejectCallback(reason, synchronous, true);\n promise = null;\n }\n return ret;\n}\n\nreturn tryConvertToPromise;\n};\n\n},{\"./util\":36}],34:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = _dereq_(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle) {\n this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n var ret;\n var handle;\n if (value !== undefined) {\n ret = Promise.resolve(value)\n ._then(afterValue, null, null, ms, undefined);\n if (debug.cancellation() && value instanceof Promise) {\n ret._setOnCancel(value);\n }\n } else {\n ret = new Promise(INTERNAL);\n handle = setTimeout(function() { ret._fulfill(); }, +ms);\n if (debug.cancellation()) {\n ret._setOnCancel(new HandleWrapper(handle));\n }\n ret._captureStackTrace();\n }\n ret._setAsyncGuaranteed();\n return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n var err;\n if (typeof message !== \"string\") {\n if (message instanceof Error) {\n err = message;\n } else {\n err = new TimeoutError(\"operation timed out\");\n }\n } else {\n err = new TimeoutError(message);\n }\n util.markAsOriginatingFromRejection(err);\n promise._attachExtraTrace(err);\n promise._reject(err);\n\n if (parent != null) {\n parent.cancel();\n }\n};\n\nfunction successClear(value) {\n clearTimeout(this.handle);\n return value;\n}\n\nfunction failureClear(reason) {\n clearTimeout(this.handle);\n throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n ms = +ms;\n var ret, parent;\n\n var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n if (ret.isPending()) {\n afterTimeout(ret, message, parent);\n }\n }, ms));\n\n if (debug.cancellation()) {\n parent = this.then();\n ret = parent._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n ret._setOnCancel(handleWrapper);\n } else {\n ret = this._then(successClear, failureClear,\n undefined, handleWrapper, undefined);\n }\n\n return ret;\n};\n\n};\n\n},{\"./util\":36}],35:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n createContext, INTERNAL, debug) {\n var util = _dereq_(\"./util\");\n var TypeError = _dereq_(\"./errors\").TypeError;\n var inherits = _dereq_(\"./util\").inherits;\n var errorObj = util.errorObj;\n var tryCatch = util.tryCatch;\n var NULL = {};\n\n function thrower(e) {\n setTimeout(function(){throw e;}, 0);\n }\n\n function castPreservingDisposable(thenable) {\n var maybePromise = tryConvertToPromise(thenable);\n if (maybePromise !== thenable &&\n typeof thenable._isDisposable === \"function\" &&\n typeof thenable._getDisposer === \"function\" &&\n thenable._isDisposable()) {\n maybePromise._setDisposable(thenable._getDisposer());\n }\n return maybePromise;\n }\n function dispose(resources, inspection) {\n var i = 0;\n var len = resources.length;\n var ret = new Promise(INTERNAL);\n function iterator() {\n if (i >= len) return ret._fulfill();\n var maybePromise = castPreservingDisposable(resources[i++]);\n if (maybePromise instanceof Promise &&\n maybePromise._isDisposable()) {\n try {\n maybePromise = tryConvertToPromise(\n maybePromise._getDisposer().tryDispose(inspection),\n resources.promise);\n } catch (e) {\n return thrower(e);\n }\n if (maybePromise instanceof Promise) {\n return maybePromise._then(iterator, thrower,\n null, null, null);\n }\n }\n iterator();\n }\n iterator();\n return ret;\n }\n\n function Disposer(data, promise, context) {\n this._data = data;\n this._promise = promise;\n this._context = context;\n }\n\n Disposer.prototype.data = function () {\n return this._data;\n };\n\n Disposer.prototype.promise = function () {\n return this._promise;\n };\n\n Disposer.prototype.resource = function () {\n if (this.promise().isFulfilled()) {\n return this.promise().value();\n }\n return NULL;\n };\n\n Disposer.prototype.tryDispose = function(inspection) {\n var resource = this.resource();\n var context = this._context;\n if (context !== undefined) context._pushContext();\n var ret = resource !== NULL\n ? this.doDispose(resource, inspection) : null;\n if (context !== undefined) context._popContext();\n this._promise._unsetDisposable();\n this._data = null;\n return ret;\n };\n\n Disposer.isDisposer = function (d) {\n return (d != null &&\n typeof d.resource === \"function\" &&\n typeof d.tryDispose === \"function\");\n };\n\n function FunctionDisposer(fn, promise, context) {\n this.constructor$(fn, promise, context);\n }\n inherits(FunctionDisposer, Disposer);\n\n FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n var fn = this.data();\n return fn.call(resource, resource, inspection);\n };\n\n function maybeUnwrapDisposer(value) {\n if (Disposer.isDisposer(value)) {\n this.resources[this.index]._setDisposable(value);\n return value.promise();\n }\n return value;\n }\n\n function ResourceList(length) {\n this.length = length;\n this.promise = null;\n this[length-1] = null;\n }\n\n ResourceList.prototype._resultCancelled = function() {\n var len = this.length;\n for (var i = 0; i < len; ++i) {\n var item = this[i];\n if (item instanceof Promise) {\n item.cancel();\n }\n }\n };\n\n Promise.using = function () {\n var len = arguments.length;\n if (len < 2) return apiRejection(\n \"you must pass at least 2 arguments to Promise.using\");\n var fn = arguments[len - 1];\n if (typeof fn !== \"function\") {\n return apiRejection(\"expecting a function but got \" + util.classString(fn));\n }\n var input;\n var spreadArgs = true;\n if (len === 2 && Array.isArray(arguments[0])) {\n input = arguments[0];\n len = input.length;\n spreadArgs = false;\n } else {\n input = arguments;\n len--;\n }\n var resources = new ResourceList(len);\n for (var i = 0; i < len; ++i) {\n var resource = input[i];\n if (Disposer.isDisposer(resource)) {\n var disposer = resource;\n resource = resource.promise();\n resource._setDisposable(disposer);\n } else {\n var maybePromise = tryConvertToPromise(resource);\n if (maybePromise instanceof Promise) {\n resource =\n maybePromise._then(maybeUnwrapDisposer, null, null, {\n resources: resources,\n index: i\n }, undefined);\n }\n }\n resources[i] = resource;\n }\n\n var reflectedResources = new Array(resources.length);\n for (var i = 0; i < reflectedResources.length; ++i) {\n reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n }\n\n var resultPromise = Promise.all(reflectedResources)\n .then(function(inspections) {\n for (var i = 0; i < inspections.length; ++i) {\n var inspection = inspections[i];\n if (inspection.isRejected()) {\n errorObj.e = inspection.error();\n return errorObj;\n } else if (!inspection.isFulfilled()) {\n resultPromise.cancel();\n return;\n }\n inspections[i] = inspection.value();\n }\n promise._pushContext();\n\n fn = tryCatch(fn);\n var ret = spreadArgs\n ? fn.apply(undefined, inspections) : fn(inspections);\n var promiseCreated = promise._popContext();\n debug.checkForgottenReturns(\n ret, promiseCreated, \"Promise.using\", promise);\n return ret;\n });\n\n var promise = resultPromise.lastly(function() {\n var inspection = new Promise.PromiseInspection(resultPromise);\n return dispose(resources, inspection);\n });\n resources.promise = promise;\n promise._setOnCancel(resources);\n return promise;\n };\n\n Promise.prototype._setDisposable = function (disposer) {\n this._bitField = this._bitField | 131072;\n this._disposer = disposer;\n };\n\n Promise.prototype._isDisposable = function () {\n return (this._bitField & 131072) > 0;\n };\n\n Promise.prototype._getDisposer = function () {\n return this._disposer;\n };\n\n Promise.prototype._unsetDisposable = function () {\n this._bitField = this._bitField & (~131072);\n this._disposer = undefined;\n };\n\n Promise.prototype.disposer = function (fn) {\n if (typeof fn === \"function\") {\n return new FunctionDisposer(fn, this, createContext());\n }\n throw new TypeError();\n };\n\n};\n\n},{\"./errors\":12,\"./util\":36}],36:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n typeof global !== \"undefined\" ? global :\n this !== undefined ? this : null;\n\nfunction tryCatcher() {\n try {\n var target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n var hasProp = {}.hasOwnProperty;\n\n function T() {\n this.constructor = Child;\n this.constructor$ = Parent;\n for (var propertyName in Parent.prototype) {\n if (hasProp.call(Parent.prototype, propertyName) &&\n propertyName.charAt(propertyName.length-1) !== \"$\"\n ) {\n this[propertyName + \"$\"] = Parent.prototype[propertyName];\n }\n }\n }\n T.prototype = Parent.prototype;\n Child.prototype = new T();\n return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n return val == null || val === true || val === false ||\n typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n return typeof value === \"function\" ||\n typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n if (!isPrimitive(maybeError)) return maybeError;\n\n return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n var len = target.length;\n var ret = new Array(len + 1);\n var i;\n for (i = 0; i < len; ++i) {\n ret[i] = target[i];\n }\n ret[i] = appendee;\n return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n if (es5.isES5) {\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n if (desc != null) {\n return desc.get == null && desc.set == null\n ? desc.value\n : defaultValue;\n }\n } else {\n return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n if (isPrimitive(obj)) return obj;\n var descriptor = {\n value: value,\n configurable: true,\n enumerable: false,\n writable: true\n };\n es5.defineProperty(obj, name, descriptor);\n return obj;\n}\n\nfunction thrower(r) {\n throw r;\n}\n\nvar inheritedDataKeys = (function() {\n var excludedPrototypes = [\n Array.prototype,\n Object.prototype,\n Function.prototype\n ];\n\n var isExcludedProto = function(val) {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (excludedPrototypes[i] === val) {\n return true;\n }\n }\n return false;\n };\n\n if (es5.isES5) {\n var getKeys = Object.getOwnPropertyNames;\n return function(obj) {\n var ret = [];\n var visitedKeys = Object.create(null);\n while (obj != null && !isExcludedProto(obj)) {\n var keys;\n try {\n keys = getKeys(obj);\n } catch (e) {\n return ret;\n }\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (visitedKeys[key]) continue;\n visitedKeys[key] = true;\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n if (desc != null && desc.get == null && desc.set == null) {\n ret.push(key);\n }\n }\n obj = es5.getPrototypeOf(obj);\n }\n return ret;\n };\n } else {\n var hasProp = {}.hasOwnProperty;\n return function(obj) {\n if (isExcludedProto(obj)) return [];\n var ret = [];\n\n /*jshint forin:false */\n enumeration: for (var key in obj) {\n if (hasProp.call(obj, key)) {\n ret.push(key);\n } else {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (hasProp.call(excludedPrototypes[i], key)) {\n continue enumeration;\n }\n }\n ret.push(key);\n }\n }\n return ret;\n };\n }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n try {\n if (typeof fn === \"function\") {\n var keys = es5.names(fn.prototype);\n\n var hasMethods = es5.isES5 && keys.length > 1;\n var hasMethodsOtherThanConstructor = keys.length > 0 &&\n !(keys.length === 1 && keys[0] === \"constructor\");\n var hasThisAssignmentAndStaticMethods =\n thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n if (hasMethods || hasMethodsOtherThanConstructor ||\n hasThisAssignmentAndStaticMethods) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return false;\n }\n}\n\nfunction toFastProperties(obj) {\n /*jshint -W027,-W055,-W031*/\n function FakeConstructor() {}\n FakeConstructor.prototype = obj;\n var receiver = new FakeConstructor();\n function ic() {\n return typeof receiver.foo;\n }\n ic();\n ic();\n return obj;\n eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n var ret = new Array(count);\n for(var i = 0; i < count; ++i) {\n ret[i] = prefix + i + suffix;\n }\n return ret;\n}\n\nfunction safeToString(obj) {\n try {\n return obj + \"\";\n } catch (e) {\n return \"[no string representation]\";\n }\n}\n\nfunction isError(obj) {\n return obj instanceof Error ||\n (obj !== null &&\n typeof obj === \"object\" &&\n typeof obj.message === \"string\" &&\n typeof obj.name === \"string\");\n}\n\nfunction markAsOriginatingFromRejection(e) {\n try {\n notEnumerableProp(e, \"isOperational\", true);\n }\n catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n if (e == null) return false;\n return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n if (!(\"stack\" in new Error())) {\n return function(value) {\n if (canAttachTrace(value)) return value;\n try {throw new Error(safeToString(value));}\n catch(err) {return err;}\n };\n } else {\n return function(value) {\n if (canAttachTrace(value)) return value;\n return new Error(safeToString(value));\n };\n }\n})();\n\nfunction classString(obj) {\n return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n var keys = es5.names(from);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (filter(key)) {\n try {\n es5.defineProperty(to, key, es5.getDescriptor(from, key));\n } catch (ignore) {}\n }\n }\n}\n\nvar asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n }\n return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n return Array.from(v);\n } : function(v) {\n var ret = [];\n var it = v[Symbol.iterator]();\n var itResult;\n while (!((itResult = it.next()).done)) {\n ret.push(itResult.value);\n }\n return ret;\n };\n\n asArray = function(v) {\n if (es5.isArray(v)) {\n return v;\n } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n return ArrayFrom(v);\n }\n return null;\n };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\";\n\nfunction env(key) {\n return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n if (typeof Promise === \"function\") {\n try {\n var promise = new Promise(function(){});\n if (classString(promise) === \"[object Promise]\") {\n return Promise;\n }\n } catch (e) {}\n }\n}\n\nvar reflectHandler;\nfunction contextBind(ctx, cb) {\n if (ctx === null ||\n typeof cb !== \"function\" ||\n cb === reflectHandler) {\n return cb;\n }\n\n if (ctx.domain !== null) {\n cb = ctx.domain.bind(cb);\n }\n\n var async = ctx.async;\n if (async !== null) {\n var old = cb;\n cb = function() {\n var args = (new Array(2)).concat([].slice.call(arguments));;\n args[0] = old;\n args[1] = this;\n return async.runInAsyncScope.apply(async, args);\n };\n }\n return cb;\n}\n\nvar ret = {\n setReflectHandler: function(fn) {\n reflectHandler = fn;\n },\n isClass: isClass,\n isIdentifier: isIdentifier,\n inheritedDataKeys: inheritedDataKeys,\n getDataPropertyOrDefault: getDataPropertyOrDefault,\n thrower: thrower,\n isArray: es5.isArray,\n asArray: asArray,\n notEnumerableProp: notEnumerableProp,\n isPrimitive: isPrimitive,\n isObject: isObject,\n isError: isError,\n canEvaluate: canEvaluate,\n errorObj: errorObj,\n tryCatch: tryCatch,\n inherits: inherits,\n withAppended: withAppended,\n maybeWrapAsError: maybeWrapAsError,\n toFastProperties: toFastProperties,\n filledRange: filledRange,\n toString: safeToString,\n canAttachTrace: canAttachTrace,\n ensureErrorObject: ensureErrorObject,\n originatesFromRejection: originatesFromRejection,\n markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n classString: classString,\n copyDescriptors: copyDescriptors,\n isNode: isNode,\n hasEnvVariables: hasEnvVariables,\n env: env,\n global: globalObject,\n getNativePromise: getNativePromise,\n contextBind: contextBind\n};\nret.isRecentNode = ret.isNode && (function() {\n var version;\n if (process.versions && process.versions.node) {\n version = process.versions.node.split(\".\").map(Number);\n } else if (process.version) {\n version = process.version.split(\".\").map(Number);\n }\n return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\nret.nodeSupportsAsyncResource = ret.isNode && (function() {\n var supportsAsync = false;\n try {\n var res = _dereq_(\"async_hooks\").AsyncResource;\n supportsAsync = typeof res.prototype.runInAsyncScope === \"function\";\n } catch (e) {\n supportsAsync = false;\n }\n return supportsAsync;\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n\n},{\"./es5\":13,\"async_hooks\":undefined}]},{},[4])(4)\n}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; }\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../process/browser.js */ \"./node_modules/process/browser.js\"), __webpack_require__(/*! bluebird */ \"./node_modules/bluebird/js/browser/bluebird.js-exposed\"), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../../timers-browserify/main.js */ \"./node_modules/timers-browserify/main.js\").setImmediate))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmx1ZWJpcmQvanMvYnJvd3Nlci9ibHVlYmlyZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ibHVlYmlyZC9qcy9icm93c2VyL2JsdWViaXJkLmpzP2Y2ODQiXSwic291cmNlc0NvbnRlbnQiOlsiLyogQHByZXNlcnZlXG4gKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTggUGV0a2EgQW50b25vdlxuICogXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKiBcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqIFxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICogXG4gKi9cbi8qKlxuICogYmx1ZWJpcmQgYnVpbGQgdmVyc2lvbiAzLjcuMlxuICogRmVhdHVyZXMgZW5hYmxlZDogY29yZSwgcmFjZSwgY2FsbF9nZXQsIGdlbmVyYXRvcnMsIG1hcCwgbm9kZWlmeSwgcHJvbWlzaWZ5LCBwcm9wcywgcmVkdWNlLCBzZXR0bGUsIHNvbWUsIHVzaW5nLCB0aW1lcnMsIGZpbHRlciwgYW55LCBlYWNoXG4qL1xuIWZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPWUoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZSk7ZWxzZXt2YXIgZjtcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P2Y9d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Zj1nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJihmPXNlbGYpLGYuUHJvbWlzZT1lKCl9fShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgX2RlcmVxXz09XCJmdW5jdGlvblwiJiZfZGVyZXFfO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiBfZGVyZXFfPT1cImZ1bmN0aW9uXCImJl9kZXJlcV87Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlKSB7XG52YXIgU29tZVByb21pc2VBcnJheSA9IFByb21pc2UuX1NvbWVQcm9taXNlQXJyYXk7XG5mdW5jdGlvbiBhbnkocHJvbWlzZXMpIHtcbiAgICB2YXIgcmV0ID0gbmV3IFNvbWVQcm9taXNlQXJyYXkocHJvbWlzZXMpO1xuICAgIHZhciBwcm9taXNlID0gcmV0LnByb21pc2UoKTtcbiAgICByZXQuc2V0SG93TWFueSgxKTtcbiAgICByZXQuc2V0VW53cmFwKCk7XG4gICAgcmV0LmluaXQoKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuUHJvbWlzZS5hbnkgPSBmdW5jdGlvbiAocHJvbWlzZXMpIHtcbiAgICByZXR1cm4gYW55KHByb21pc2VzKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmFueSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYW55KHRoaXMpO1xufTtcblxufTtcblxufSx7fV0sMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbnZhciBmaXJzdExpbmVFcnJvcjtcbnRyeSB7dGhyb3cgbmV3IEVycm9yKCk7IH0gY2F0Y2ggKGUpIHtmaXJzdExpbmVFcnJvciA9IGU7fVxudmFyIHNjaGVkdWxlID0gX2RlcmVxXyhcIi4vc2NoZWR1bGVcIik7XG52YXIgUXVldWUgPSBfZGVyZXFfKFwiLi9xdWV1ZVwiKTtcblxuZnVuY3Rpb24gQXN5bmMoKSB7XG4gICAgdGhpcy5fY3VzdG9tU2NoZWR1bGVyID0gZmFsc2U7XG4gICAgdGhpcy5faXNUaWNrVXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2xhdGVRdWV1ZSA9IG5ldyBRdWV1ZSgxNik7XG4gICAgdGhpcy5fbm9ybWFsUXVldWUgPSBuZXcgUXVldWUoMTYpO1xuICAgIHRoaXMuX2hhdmVEcmFpbmVkUXVldWVzID0gZmFsc2U7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuZHJhaW5RdWV1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuX2RyYWluUXVldWVzKCk7XG4gICAgfTtcbiAgICB0aGlzLl9zY2hlZHVsZSA9IHNjaGVkdWxlO1xufVxuXG5Bc3luYy5wcm90b3R5cGUuc2V0U2NoZWR1bGVyID0gZnVuY3Rpb24oZm4pIHtcbiAgICB2YXIgcHJldiA9IHRoaXMuX3NjaGVkdWxlO1xuICAgIHRoaXMuX3NjaGVkdWxlID0gZm47XG4gICAgdGhpcy5fY3VzdG9tU2NoZWR1bGVyID0gdHJ1ZTtcbiAgICByZXR1cm4gcHJldjtcbn07XG5cbkFzeW5jLnByb3RvdHlwZS5oYXNDdXN0b21TY2hlZHVsZXIgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tU2NoZWR1bGVyO1xufTtcblxuQXN5bmMucHJvdG90eXBlLmhhdmVJdGVtc1F1ZXVlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNUaWNrVXNlZCB8fCB0aGlzLl9oYXZlRHJhaW5lZFF1ZXVlcztcbn07XG5cblxuQXN5bmMucHJvdG90eXBlLmZhdGFsRXJyb3IgPSBmdW5jdGlvbihlLCBpc05vZGUpIHtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKFwiRmF0YWwgXCIgKyAoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5zdGFjayA6IGUpICtcbiAgICAgICAgICAgIFwiXFxuXCIpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aHJvd0xhdGVyKGUpO1xuICAgIH1cbn07XG5cbkFzeW5jLnByb3RvdHlwZS50aHJvd0xhdGVyID0gZnVuY3Rpb24oZm4sIGFyZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGFyZyA9IGZuO1xuICAgICAgICBmbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgYXJnOyB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZuKGFyZyk7XG4gICAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB0cnkge1xuICAgICAgICB0aGlzLl9zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZuKGFyZyk7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXN5bmMgc2NoZWR1bGVyIGF2YWlsYWJsZVxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gQXN5bmNJbnZva2VMYXRlcihmbiwgcmVjZWl2ZXIsIGFyZykge1xuICAgIHRoaXMuX2xhdGVRdWV1ZS5wdXNoKGZuLCByZWNlaXZlciwgYXJnKTtcbiAgICB0aGlzLl9xdWV1ZVRpY2soKTtcbn1cblxuZnVuY3Rpb24gQXN5bmNJbnZva2UoZm4sIHJlY2VpdmVyLCBhcmcpIHtcbiAgICB0aGlzLl9ub3JtYWxRdWV1ZS5wdXNoKGZuLCByZWNlaXZlciwgYXJnKTtcbiAgICB0aGlzLl9xdWV1ZVRpY2soKTtcbn1cblxuZnVuY3Rpb24gQXN5bmNTZXR0bGVQcm9taXNlcyhwcm9taXNlKSB7XG4gICAgdGhpcy5fbm9ybWFsUXVldWUuX3B1c2hPbmUocHJvbWlzZSk7XG4gICAgdGhpcy5fcXVldWVUaWNrKCk7XG59XG5cbkFzeW5jLnByb3RvdHlwZS5pbnZva2VMYXRlciA9IEFzeW5jSW52b2tlTGF0ZXI7XG5Bc3luYy5wcm90b3R5cGUuaW52b2tlID0gQXN5bmNJbnZva2U7XG5Bc3luYy5wcm90b3R5cGUuc2V0dGxlUHJvbWlzZXMgPSBBc3luY1NldHRsZVByb21pc2VzO1xuXG5cbmZ1bmN0aW9uIF9kcmFpblF1ZXVlKHF1ZXVlKSB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCgpID4gMCkge1xuICAgICAgICBfZHJhaW5RdWV1ZVN0ZXAocXVldWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2RyYWluUXVldWVTdGVwKHF1ZXVlKSB7XG4gICAgdmFyIGZuID0gcXVldWUuc2hpZnQoKTtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZm4uX3NldHRsZVByb21pc2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlY2VpdmVyID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgdmFyIGFyZyA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGZuLmNhbGwocmVjZWl2ZXIsIGFyZyk7XG4gICAgfVxufVxuXG5Bc3luYy5wcm90b3R5cGUuX2RyYWluUXVldWVzID0gZnVuY3Rpb24gKCkge1xuICAgIF9kcmFpblF1ZXVlKHRoaXMuX25vcm1hbFF1ZXVlKTtcbiAgICB0aGlzLl9yZXNldCgpO1xuICAgIHRoaXMuX2hhdmVEcmFpbmVkUXVldWVzID0gdHJ1ZTtcbiAgICBfZHJhaW5RdWV1ZSh0aGlzLl9sYXRlUXVldWUpO1xufTtcblxuQXN5bmMucHJvdG90eXBlLl9xdWV1ZVRpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1RpY2tVc2VkKSB7XG4gICAgICAgIHRoaXMuX2lzVGlja1VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZSh0aGlzLmRyYWluUXVldWVzKTtcbiAgICB9XG59O1xuXG5Bc3luYy5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2lzVGlja1VzZWQgPSBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXN5bmM7XG5tb2R1bGUuZXhwb3J0cy5maXJzdExpbmVFcnJvciA9IGZpcnN0TGluZUVycm9yO1xuXG59LHtcIi4vcXVldWVcIjoyNixcIi4vc2NoZWR1bGVcIjoyOX1dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBkZWJ1Zykge1xudmFyIGNhbGxlZEJpbmQgPSBmYWxzZTtcbnZhciByZWplY3RUaGlzID0gZnVuY3Rpb24oXywgZSkge1xuICAgIHRoaXMuX3JlamVjdChlKTtcbn07XG5cbnZhciB0YXJnZXRSZWplY3RlZCA9IGZ1bmN0aW9uKGUsIGNvbnRleHQpIHtcbiAgICBjb250ZXh0LnByb21pc2VSZWplY3Rpb25RdWV1ZWQgPSB0cnVlO1xuICAgIGNvbnRleHQuYmluZGluZ1Byb21pc2UuX3RoZW4ocmVqZWN0VGhpcywgcmVqZWN0VGhpcywgbnVsbCwgdGhpcywgZSk7XG59O1xuXG52YXIgYmluZGluZ1Jlc29sdmVkID0gZnVuY3Rpb24odGhpc0FyZywgY29udGV4dCkge1xuICAgIGlmICgoKHRoaXMuX2JpdEZpZWxkICYgNTAzOTcxODQpID09PSAwKSkge1xuICAgICAgICB0aGlzLl9yZXNvbHZlQ2FsbGJhY2soY29udGV4dC50YXJnZXQpO1xuICAgIH1cbn07XG5cbnZhciBiaW5kaW5nUmVqZWN0ZWQgPSBmdW5jdGlvbihlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFjb250ZXh0LnByb21pc2VSZWplY3Rpb25RdWV1ZWQpIHRoaXMuX3JlamVjdChlKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAodGhpc0FyZykge1xuICAgIGlmICghY2FsbGVkQmluZCkge1xuICAgICAgICBjYWxsZWRCaW5kID0gdHJ1ZTtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX3Byb3BhZ2F0ZUZyb20gPSBkZWJ1Zy5wcm9wYWdhdGVGcm9tRnVuY3Rpb24oKTtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2JvdW5kVmFsdWUgPSBkZWJ1Zy5ib3VuZFZhbHVlRnVuY3Rpb24oKTtcbiAgICB9XG4gICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UodGhpc0FyZyk7XG4gICAgdmFyIHJldCA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICByZXQuX3Byb3BhZ2F0ZUZyb20odGhpcywgMSk7XG4gICAgdmFyIHRhcmdldCA9IHRoaXMuX3RhcmdldCgpO1xuICAgIHJldC5fc2V0Qm91bmRUbyhtYXliZVByb21pc2UpO1xuICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgICAgICAgcHJvbWlzZVJlamVjdGlvblF1ZXVlZDogZmFsc2UsXG4gICAgICAgICAgICBwcm9taXNlOiByZXQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGJpbmRpbmdQcm9taXNlOiBtYXliZVByb21pc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGFyZ2V0Ll90aGVuKElOVEVSTkFMLCB0YXJnZXRSZWplY3RlZCwgdW5kZWZpbmVkLCByZXQsIGNvbnRleHQpO1xuICAgICAgICBtYXliZVByb21pc2UuX3RoZW4oXG4gICAgICAgICAgICBiaW5kaW5nUmVzb2x2ZWQsIGJpbmRpbmdSZWplY3RlZCwgdW5kZWZpbmVkLCByZXQsIGNvbnRleHQpO1xuICAgICAgICByZXQuX3NldE9uQ2FuY2VsKG1heWJlUHJvbWlzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0Ll9yZXNvbHZlQ2FsbGJhY2sodGFyZ2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9zZXRCb3VuZFRvID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkIHwgMjA5NzE1MjtcbiAgICAgICAgdGhpcy5fYm91bmRUbyA9IG9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkICYgKH4yMDk3MTUyKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5faXNCb3VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2JpdEZpZWxkICYgMjA5NzE1MikgPT09IDIwOTcxNTI7XG59O1xuXG5Qcm9taXNlLmJpbmQgPSBmdW5jdGlvbiAodGhpc0FyZywgdmFsdWUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS5iaW5kKHRoaXNBcmcpO1xufTtcbn07XG5cbn0se31dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgb2xkO1xuaWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSBvbGQgPSBQcm9taXNlO1xuZnVuY3Rpb24gbm9Db25mbGljdCgpIHtcbiAgICB0cnkgeyBpZiAoUHJvbWlzZSA9PT0gYmx1ZWJpcmQpIFByb21pc2UgPSBvbGQ7IH1cbiAgICBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gYmx1ZWJpcmQ7XG59XG52YXIgYmx1ZWJpcmQgPSBfZGVyZXFfKFwiLi9wcm9taXNlXCIpKCk7XG5ibHVlYmlyZC5ub0NvbmZsaWN0ID0gbm9Db25mbGljdDtcbm1vZHVsZS5leHBvcnRzID0gYmx1ZWJpcmQ7XG5cbn0se1wiLi9wcm9taXNlXCI6MjJ9XSw1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xudmFyIGNyID0gT2JqZWN0LmNyZWF0ZTtcbmlmIChjcikge1xuICAgIHZhciBjYWxsZXJDYWNoZSA9IGNyKG51bGwpO1xuICAgIHZhciBnZXR0ZXJDYWNoZSA9IGNyKG51bGwpO1xuICAgIGNhbGxlckNhY2hlW1wiIHNpemVcIl0gPSBnZXR0ZXJDYWNoZVtcIiBzaXplXCJdID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlKSB7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgY2FuRXZhbHVhdGUgPSB1dGlsLmNhbkV2YWx1YXRlO1xudmFyIGlzSWRlbnRpZmllciA9IHV0aWwuaXNJZGVudGlmaWVyO1xuXG52YXIgZ2V0TWV0aG9kQ2FsbGVyO1xudmFyIGdldEdldHRlcjtcbmlmICghdHJ1ZSkge1xudmFyIG1ha2VNZXRob2RDYWxsZXIgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXCJlbnN1cmVNZXRob2RcIiwgXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgJ3VzZSBzdHJpY3QnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgZW5zdXJlTWV0aG9kKG9iaiwgJ21ldGhvZE5hbWUnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgc3dpdGNoKGxlbikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG9iai5tZXRob2ROYW1lKHRoaXNbMF0pOyAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG9iai5tZXRob2ROYW1lKHRoaXNbMF0sIHRoaXNbMV0pOyAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG9iai5tZXRob2ROYW1lKHRoaXNbMF0sIHRoaXNbMV0sIHRoaXNbMl0pOyAgICBcXG5cXFxuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG9iai5tZXRob2ROYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLm1ldGhvZE5hbWUuYXBwbHkob2JqLCB0aGlzKTsgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICBcIi5yZXBsYWNlKC9tZXRob2ROYW1lL2csIG1ldGhvZE5hbWUpKShlbnN1cmVNZXRob2QpO1xufTtcblxudmFyIG1ha2VHZXR0ZXIgPSBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcIm9ialwiLCBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICd1c2Ugc3RyaWN0JzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgIHJldHVybiBvYmoucHJvcGVydHlOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgIFwiLnJlcGxhY2UoXCJwcm9wZXJ0eU5hbWVcIiwgcHJvcGVydHlOYW1lKSk7XG59O1xuXG52YXIgZ2V0Q29tcGlsZWQgPSBmdW5jdGlvbihuYW1lLCBjb21waWxlciwgY2FjaGUpIHtcbiAgICB2YXIgcmV0ID0gY2FjaGVbbmFtZV07XG4gICAgaWYgKHR5cGVvZiByZXQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAoIWlzSWRlbnRpZmllcihuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0ID0gY29tcGlsZXIobmFtZSk7XG4gICAgICAgIGNhY2hlW25hbWVdID0gcmV0O1xuICAgICAgICBjYWNoZVtcIiBzaXplXCJdKys7XG4gICAgICAgIGlmIChjYWNoZVtcIiBzaXplXCJdID4gNTEyKSB7XG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNhY2hlKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIGRlbGV0ZSBjYWNoZVtrZXlzW2ldXTtcbiAgICAgICAgICAgIGNhY2hlW1wiIHNpemVcIl0gPSBrZXlzLmxlbmd0aCAtIDI1NjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcblxuZ2V0TWV0aG9kQ2FsbGVyID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiBnZXRDb21waWxlZChuYW1lLCBtYWtlTWV0aG9kQ2FsbGVyLCBjYWxsZXJDYWNoZSk7XG59O1xuXG5nZXRHZXR0ZXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIGdldENvbXBpbGVkKG5hbWUsIG1ha2VHZXR0ZXIsIGdldHRlckNhY2hlKTtcbn07XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU1ldGhvZChvYmosIG1ldGhvZE5hbWUpIHtcbiAgICB2YXIgZm47XG4gICAgaWYgKG9iaiAhPSBudWxsKSBmbiA9IG9ialttZXRob2ROYW1lXTtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIk9iamVjdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcob2JqKSArIFwiIGhhcyBubyBtZXRob2QgJ1wiICtcbiAgICAgICAgICAgIHV0aWwudG9TdHJpbmcobWV0aG9kTmFtZSkgKyBcIidcIjtcbiAgICAgICAgdGhyb3cgbmV3IFByb21pc2UuVHlwZUVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gZm47XG59XG5cbmZ1bmN0aW9uIGNhbGxlcihvYmopIHtcbiAgICB2YXIgbWV0aG9kTmFtZSA9IHRoaXMucG9wKCk7XG4gICAgdmFyIGZuID0gZW5zdXJlTWV0aG9kKG9iaiwgbWV0aG9kTmFtZSk7XG4gICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgdGhpcyk7XG59XG5Qcm9taXNlLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTs7XG4gICAgaWYgKCF0cnVlKSB7XG4gICAgICAgIGlmIChjYW5FdmFsdWF0ZSkge1xuICAgICAgICAgICAgdmFyIG1heWJlQ2FsbGVyID0gZ2V0TWV0aG9kQ2FsbGVyKG1ldGhvZE5hbWUpO1xuICAgICAgICAgICAgaWYgKG1heWJlQ2FsbGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW4oXG4gICAgICAgICAgICAgICAgICAgIG1heWJlQ2FsbGVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJncywgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhcmdzLnB1c2gobWV0aG9kTmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuX3RoZW4oY2FsbGVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJncywgdW5kZWZpbmVkKTtcbn07XG5cbmZ1bmN0aW9uIG5hbWVkR2V0dGVyKG9iaikge1xuICAgIHJldHVybiBvYmpbdGhpc107XG59XG5mdW5jdGlvbiBpbmRleGVkR2V0dGVyKG9iaikge1xuICAgIHZhciBpbmRleCA9ICt0aGlzO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gTWF0aC5tYXgoMCwgaW5kZXggKyBvYmoubGVuZ3RoKTtcbiAgICByZXR1cm4gb2JqW2luZGV4XTtcbn1cblByb21pc2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHtcbiAgICB2YXIgaXNJbmRleCA9ICh0eXBlb2YgcHJvcGVydHlOYW1lID09PSBcIm51bWJlclwiKTtcbiAgICB2YXIgZ2V0dGVyO1xuICAgIGlmICghaXNJbmRleCkge1xuICAgICAgICBpZiAoY2FuRXZhbHVhdGUpIHtcbiAgICAgICAgICAgIHZhciBtYXliZUdldHRlciA9IGdldEdldHRlcihwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgZ2V0dGVyID0gbWF5YmVHZXR0ZXIgIT09IG51bGwgPyBtYXliZUdldHRlciA6IG5hbWVkR2V0dGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0dGVyID0gbmFtZWRHZXR0ZXI7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBnZXR0ZXIgPSBpbmRleGVkR2V0dGVyO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdGhlbihnZXR0ZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwcm9wZXJ0eU5hbWUsIHVuZGVmaW5lZCk7XG59O1xufTtcblxufSx7XCIuL3V0aWxcIjozNn1dLDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsIFByb21pc2VBcnJheSwgYXBpUmVqZWN0aW9uLCBkZWJ1Zykge1xudmFyIHV0aWwgPSBfZGVyZXFfKFwiLi91dGlsXCIpO1xudmFyIHRyeUNhdGNoID0gdXRpbC50cnlDYXRjaDtcbnZhciBlcnJvck9iaiA9IHV0aWwuZXJyb3JPYmo7XG52YXIgYXN5bmMgPSBQcm9taXNlLl9hc3luYztcblxuUHJvbWlzZS5wcm90b3R5cGVbXCJicmVha1wiXSA9IFByb21pc2UucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghZGVidWcuY2FuY2VsbGF0aW9uKCkpIHJldHVybiB0aGlzLl93YXJuKFwiY2FuY2VsbGF0aW9uIGlzIGRpc2FibGVkXCIpO1xuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgIHZhciBjaGlsZCA9IHByb21pc2U7XG4gICAgd2hpbGUgKHByb21pc2UuX2lzQ2FuY2VsbGFibGUoKSkge1xuICAgICAgICBpZiAoIXByb21pc2UuX2NhbmNlbEJ5KGNoaWxkKSkge1xuICAgICAgICAgICAgaWYgKGNoaWxkLl9pc0ZvbGxvd2luZygpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQuX2ZvbGxvd2VlKCkuY2FuY2VsKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaWxkLl9jYW5jZWxCcmFuY2hlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50ID0gcHJvbWlzZS5fY2FuY2VsbGF0aW9uUGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ID09IG51bGwgfHwgIXBhcmVudC5faXNDYW5jZWxsYWJsZSgpKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faXNGb2xsb3dpbmcoKSkge1xuICAgICAgICAgICAgICAgIHByb21pc2UuX2ZvbGxvd2VlKCkuY2FuY2VsKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb21pc2UuX2NhbmNlbEJyYW5jaGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9pc0ZvbGxvd2luZygpKSBwcm9taXNlLl9mb2xsb3dlZSgpLmNhbmNlbCgpO1xuICAgICAgICAgICAgcHJvbWlzZS5fc2V0V2lsbEJlQ2FuY2VsbGVkKCk7XG4gICAgICAgICAgICBjaGlsZCA9IHByb21pc2U7XG4gICAgICAgICAgICBwcm9taXNlID0gcGFyZW50O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2JyYW5jaEhhc0NhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2JyYW5jaGVzUmVtYWluaW5nVG9DYW5jZWwtLTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9lbm91Z2hCcmFuY2hlc0hhdmVDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYnJhbmNoZXNSZW1haW5pbmdUb0NhbmNlbCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgIHRoaXMuX2JyYW5jaGVzUmVtYWluaW5nVG9DYW5jZWwgPD0gMDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9jYW5jZWxCeSA9IGZ1bmN0aW9uKGNhbmNlbGxlcikge1xuICAgIGlmIChjYW5jZWxsZXIgPT09IHRoaXMpIHtcbiAgICAgICAgdGhpcy5fYnJhbmNoZXNSZW1haW5pbmdUb0NhbmNlbCA9IDA7XG4gICAgICAgIHRoaXMuX2ludm9rZU9uQ2FuY2VsKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2JyYW5jaEhhc0NhbmNlbGxlZCgpO1xuICAgICAgICBpZiAodGhpcy5fZW5vdWdoQnJhbmNoZXNIYXZlQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludm9rZU9uQ2FuY2VsKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fY2FuY2VsQnJhbmNoZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fZW5vdWdoQnJhbmNoZXNIYXZlQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsKCk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2NhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5faXNDYW5jZWxsYWJsZSgpKSByZXR1cm47XG4gICAgdGhpcy5fc2V0Q2FuY2VsbGVkKCk7XG4gICAgYXN5bmMuaW52b2tlKHRoaXMuX2NhbmNlbFByb21pc2VzLCB0aGlzLCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2NhbmNlbFByb21pc2VzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xlbmd0aCgpID4gMCkgdGhpcy5fc2V0dGxlUHJvbWlzZXMoKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl91bnNldE9uQ2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fb25DYW5jZWxGaWVsZCA9IHVuZGVmaW5lZDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9pc0NhbmNlbGxhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNQZW5kaW5nKCkgJiYgIXRoaXMuX2lzQ2FuY2VsbGVkKCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5pc0NhbmNlbGxhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNQZW5kaW5nKCkgJiYgIXRoaXMuaXNDYW5jZWxsZWQoKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9kb0ludm9rZU9uQ2FuY2VsID0gZnVuY3Rpb24ob25DYW5jZWxDYWxsYmFjaywgaW50ZXJuYWxPbmx5KSB7XG4gICAgaWYgKHV0aWwuaXNBcnJheShvbkNhbmNlbENhbGxiYWNrKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9uQ2FuY2VsQ2FsbGJhY2subGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvSW52b2tlT25DYW5jZWwob25DYW5jZWxDYWxsYmFja1tpXSwgaW50ZXJuYWxPbmx5KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAob25DYW5jZWxDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWxDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAoIWludGVybmFsT25seSkge1xuICAgICAgICAgICAgICAgIHZhciBlID0gdHJ5Q2F0Y2gob25DYW5jZWxDYWxsYmFjaykuY2FsbCh0aGlzLl9ib3VuZFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIGlmIChlID09PSBlcnJvck9iaikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2hFeHRyYVRyYWNlKGUuZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnRocm93TGF0ZXIoZS5lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvbkNhbmNlbENhbGxiYWNrLl9yZXN1bHRDYW5jZWxsZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5faW52b2tlT25DYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb25DYW5jZWxDYWxsYmFjayA9IHRoaXMuX29uQ2FuY2VsKCk7XG4gICAgdGhpcy5fdW5zZXRPbkNhbmNlbCgpO1xuICAgIGFzeW5jLmludm9rZSh0aGlzLl9kb0ludm9rZU9uQ2FuY2VsLCB0aGlzLCBvbkNhbmNlbENhbGxiYWNrKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9pbnZva2VJbnRlcm5hbE9uQ2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2lzQ2FuY2VsbGFibGUoKSkge1xuICAgICAgICB0aGlzLl9kb0ludm9rZU9uQ2FuY2VsKHRoaXMuX29uQ2FuY2VsKCksIHRydWUpO1xuICAgICAgICB0aGlzLl91bnNldE9uQ2FuY2VsKCk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2FuY2VsKCk7XG59O1xuXG59O1xuXG59LHtcIi4vdXRpbFwiOjM2fV0sNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkVYVF9GSUxURVIpIHtcbnZhciB1dGlsID0gX2RlcmVxXyhcIi4vdXRpbFwiKTtcbnZhciBnZXRLZXlzID0gX2RlcmVxXyhcIi4vZXM1XCIpLmtleXM7XG52YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xudmFyIGVycm9yT2JqID0gdXRpbC5lcnJvck9iajtcblxuZnVuY3Rpb24gY2F0Y2hGaWx0ZXIoaW5zdGFuY2VzLCBjYiwgcHJvbWlzZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBib3VuZFRvID0gcHJvbWlzZS5fYm91bmRWYWx1ZSgpO1xuICAgICAgICBwcmVkaWNhdGVMb29wOiBmb3IgKHZhciBpID0gMDsgaSA8IGluc3RhbmNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpbnN0YW5jZXNbaV07XG5cbiAgICAgICAgICAgIGlmIChpdGVtID09PSBFcnJvciB8fFxuICAgICAgICAgICAgICAgIChpdGVtICE9IG51bGwgJiYgaXRlbS5wcm90b3R5cGUgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeUNhdGNoKGNiKS5jYWxsKGJvdW5kVG8sIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzUHJlZGljYXRlID0gdHJ5Q2F0Y2goaXRlbSkuY2FsbChib3VuZFRvLCBlKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc1ByZWRpY2F0ZSA9PT0gZXJyb3JPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNQcmVkaWNhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVzUHJlZGljYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlDYXRjaChjYikuY2FsbChib3VuZFRvLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHV0aWwuaXNPYmplY3QoZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldEtleXMoaXRlbSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVtrZXldICE9IGVba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcHJlZGljYXRlTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ5Q2F0Y2goY2IpLmNhbGwoYm91bmRUbywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5FWFRfRklMVEVSO1xuICAgIH07XG59XG5cbnJldHVybiBjYXRjaEZpbHRlcjtcbn07XG5cbn0se1wiLi9lczVcIjoxMyxcIi4vdXRpbFwiOjM2fV0sODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSkge1xudmFyIGxvbmdTdGFja1RyYWNlcyA9IGZhbHNlO1xudmFyIGNvbnRleHRTdGFjayA9IFtdO1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcHJvbWlzZUNyZWF0ZWQgPSBmdW5jdGlvbigpIHt9O1xuUHJvbWlzZS5wcm90b3R5cGUuX3B1c2hDb250ZXh0ID0gZnVuY3Rpb24oKSB7fTtcblByb21pc2UucHJvdG90eXBlLl9wb3BDb250ZXh0ID0gZnVuY3Rpb24oKSB7cmV0dXJuIG51bGw7fTtcblByb21pc2UuX3BlZWtDb250ZXh0ID0gUHJvbWlzZS5wcm90b3R5cGUuX3BlZWtDb250ZXh0ID0gZnVuY3Rpb24oKSB7fTtcblxuZnVuY3Rpb24gQ29udGV4dCgpIHtcbiAgICB0aGlzLl90cmFjZSA9IG5ldyBDb250ZXh0LkNhcHR1cmVkVHJhY2UocGVla0NvbnRleHQoKSk7XG59XG5Db250ZXh0LnByb3RvdHlwZS5fcHVzaENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3RyYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdHJhY2UuX3Byb21pc2VDcmVhdGVkID0gbnVsbDtcbiAgICAgICAgY29udGV4dFN0YWNrLnB1c2godGhpcy5fdHJhY2UpO1xuICAgIH1cbn07XG5cbkNvbnRleHQucHJvdG90eXBlLl9wb3BDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl90cmFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciB0cmFjZSA9IGNvbnRleHRTdGFjay5wb3AoKTtcbiAgICAgICAgdmFyIHJldCA9IHRyYWNlLl9wcm9taXNlQ3JlYXRlZDtcbiAgICAgICAgdHJhY2UuX3Byb21pc2VDcmVhdGVkID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KCkge1xuICAgIGlmIChsb25nU3RhY2tUcmFjZXMpIHJldHVybiBuZXcgQ29udGV4dCgpO1xufVxuXG5mdW5jdGlvbiBwZWVrQ29udGV4dCgpIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gY29udGV4dFN0YWNrLmxlbmd0aCAtIDE7XG4gICAgaWYgKGxhc3RJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0U3RhY2tbbGFzdEluZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbkNvbnRleHQuQ2FwdHVyZWRUcmFjZSA9IG51bGw7XG5Db250ZXh0LmNyZWF0ZSA9IGNyZWF0ZUNvbnRleHQ7XG5Db250ZXh0LmRlYWN0aXZhdGVMb25nU3RhY2tUcmFjZXMgPSBmdW5jdGlvbigpIHt9O1xuQ29udGV4dC5hY3RpdmF0ZUxvbmdTdGFja1RyYWNlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBQcm9taXNlX3B1c2hDb250ZXh0ID0gUHJvbWlzZS5wcm90b3R5cGUuX3B1c2hDb250ZXh0O1xuICAgIHZhciBQcm9taXNlX3BvcENvbnRleHQgPSBQcm9taXNlLnByb3RvdHlwZS5fcG9wQ29udGV4dDtcbiAgICB2YXIgUHJvbWlzZV9QZWVrQ29udGV4dCA9IFByb21pc2UuX3BlZWtDb250ZXh0O1xuICAgIHZhciBQcm9taXNlX3BlZWtDb250ZXh0ID0gUHJvbWlzZS5wcm90b3R5cGUuX3BlZWtDb250ZXh0O1xuICAgIHZhciBQcm9taXNlX3Byb21pc2VDcmVhdGVkID0gUHJvbWlzZS5wcm90b3R5cGUuX3Byb21pc2VDcmVhdGVkO1xuICAgIENvbnRleHQuZGVhY3RpdmF0ZUxvbmdTdGFja1RyYWNlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fcHVzaENvbnRleHQgPSBQcm9taXNlX3B1c2hDb250ZXh0O1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fcG9wQ29udGV4dCA9IFByb21pc2VfcG9wQ29udGV4dDtcbiAgICAgICAgUHJvbWlzZS5fcGVla0NvbnRleHQgPSBQcm9taXNlX1BlZWtDb250ZXh0O1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fcGVla0NvbnRleHQgPSBQcm9taXNlX3BlZWtDb250ZXh0O1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fcHJvbWlzZUNyZWF0ZWQgPSBQcm9taXNlX3Byb21pc2VDcmVhdGVkO1xuICAgICAgICBsb25nU3RhY2tUcmFjZXMgPSBmYWxzZTtcbiAgICB9O1xuICAgIGxvbmdTdGFja1RyYWNlcyA9IHRydWU7XG4gICAgUHJvbWlzZS5wcm90b3R5cGUuX3B1c2hDb250ZXh0ID0gQ29udGV4dC5wcm90b3R5cGUuX3B1c2hDb250ZXh0O1xuICAgIFByb21pc2UucHJvdG90eXBlLl9wb3BDb250ZXh0ID0gQ29udGV4dC5wcm90b3R5cGUuX3BvcENvbnRleHQ7XG4gICAgUHJvbWlzZS5fcGVla0NvbnRleHQgPSBQcm9taXNlLnByb3RvdHlwZS5fcGVla0NvbnRleHQgPSBwZWVrQ29udGV4dDtcbiAgICBQcm9taXNlLnByb3RvdHlwZS5fcHJvbWlzZUNyZWF0ZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuX3BlZWtDb250ZXh0KCk7XG4gICAgICAgIGlmIChjdHggJiYgY3R4Ll9wcm9taXNlQ3JlYXRlZCA9PSBudWxsKSBjdHguX3Byb21pc2VDcmVhdGVkID0gdGhpcztcbiAgICB9O1xufTtcbnJldHVybiBDb250ZXh0O1xufTtcblxufSx7fV0sOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgQ29udGV4dCxcbiAgICBlbmFibGVBc3luY0hvb2tzLCBkaXNhYmxlQXN5bmNIb29rcykge1xudmFyIGFzeW5jID0gUHJvbWlzZS5fYXN5bmM7XG52YXIgV2FybmluZyA9IF9kZXJlcV8oXCIuL2Vycm9yc1wiKS5XYXJuaW5nO1xudmFyIHV0aWwgPSBfZGVyZXFfKFwiLi91dGlsXCIpO1xudmFyIGVzNSA9IF9kZXJlcV8oXCIuL2VzNVwiKTtcbnZhciBjYW5BdHRhY2hUcmFjZSA9IHV0aWwuY2FuQXR0YWNoVHJhY2U7XG52YXIgdW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlZDtcbnZhciBwb3NzaWJseVVuaGFuZGxlZFJlamVjdGlvbjtcbnZhciBibHVlYmlyZEZyYW1lUGF0dGVybiA9XG4gICAgL1tcXFxcXFwvXWJsdWViaXJkW1xcXFxcXC9danNbXFxcXFxcL10ocmVsZWFzZXxkZWJ1Z3xpbnN0cnVtZW50ZWQpLztcbnZhciBub2RlRnJhbWVQYXR0ZXJuID0gL1xcKCg/OnRpbWVyc1xcLmpzKTpcXGQrOlxcZCtcXCkvO1xudmFyIHBhcnNlTGluZVBhdHRlcm4gPSAvW1xcLzxcXChdKC4rPyk6KFxcZCspOihcXGQrKVxcKT9cXHMqJC87XG52YXIgc3RhY2tGcmFtZVBhdHRlcm4gPSBudWxsO1xudmFyIGZvcm1hdFN0YWNrID0gbnVsbDtcbnZhciBpbmRlbnRTdGFja0ZyYW1lcyA9IGZhbHNlO1xudmFyIHByaW50V2FybmluZztcbnZhciBkZWJ1Z2dpbmcgPSAhISh1dGlsLmVudihcIkJMVUVCSVJEX0RFQlVHXCIpICE9IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh0cnVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5lbnYoXCJCTFVFQklSRF9ERUJVR1wiKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuZW52KFwiTk9ERV9FTlZcIikgPT09IFwiZGV2ZWxvcG1lbnRcIikpO1xuXG52YXIgd2FybmluZ3MgPSAhISh1dGlsLmVudihcIkJMVUVCSVJEX1dBUk5JTkdTXCIpICE9IDAgJiZcbiAgICAoZGVidWdnaW5nIHx8IHV0aWwuZW52KFwiQkxVRUJJUkRfV0FSTklOR1NcIikpKTtcblxudmFyIGxvbmdTdGFja1RyYWNlcyA9ICEhKHV0aWwuZW52KFwiQkxVRUJJUkRfTE9OR19TVEFDS19UUkFDRVNcIikgIT0gMCAmJlxuICAgIChkZWJ1Z2dpbmcgfHwgdXRpbC5lbnYoXCJCTFVFQklSRF9MT05HX1NUQUNLX1RSQUNFU1wiKSkpO1xuXG52YXIgd0ZvcmdvdHRlblJldHVybiA9IHV0aWwuZW52KFwiQkxVRUJJUkRfV19GT1JHT1RURU5fUkVUVVJOXCIpICE9IDAgJiZcbiAgICAod2FybmluZ3MgfHwgISF1dGlsLmVudihcIkJMVUVCSVJEX1dfRk9SR09UVEVOX1JFVFVSTlwiKSk7XG5cbnZhciBkZWZlclVuaGFuZGxlZFJlamVjdGlvbkNoZWNrO1xuKGZ1bmN0aW9uKCkge1xuICAgIHZhciBwcm9taXNlcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gdW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2soKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvbWlzZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHByb21pc2VzW2ldLl9ub3RpZnlVbmhhbmRsZWRSZWplY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB1bmhhbmRsZWRSZWplY3Rpb25DbGVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaGFuZGxlZFJlamVjdGlvbkNsZWFyKCkge1xuICAgICAgICBwcm9taXNlcy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGRlZmVyVW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2sgPSBmdW5jdGlvbihwcm9taXNlKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIHNldFRpbWVvdXQodW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2ssIDEpO1xuICAgIH07XG5cbiAgICBlczUuZGVmaW5lUHJvcGVydHkoUHJvbWlzZSwgXCJfdW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2tcIiwge1xuICAgICAgICB2YWx1ZTogdW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2tcbiAgICB9KTtcbiAgICBlczUuZGVmaW5lUHJvcGVydHkoUHJvbWlzZSwgXCJfdW5oYW5kbGVkUmVqZWN0aW9uQ2xlYXJcIiwge1xuICAgICAgICB2YWx1ZTogdW5oYW5kbGVkUmVqZWN0aW9uQ2xlYXJcbiAgICB9KTtcbn0pKCk7XG5cblByb21pc2UucHJvdG90eXBlLnN1cHByZXNzVW5oYW5kbGVkUmVqZWN0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXQoKTtcbiAgICB0YXJnZXQuX2JpdEZpZWxkID0gKCh0YXJnZXQuX2JpdEZpZWxkICYgKH4xMDQ4NTc2KSkgfFxuICAgICAgICAgICAgICAgICAgICAgIDUyNDI4OCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fZW5zdXJlUG9zc2libGVSZWplY3Rpb25IYW5kbGVkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICgodGhpcy5fYml0RmllbGQgJiA1MjQyODgpICE9PSAwKSByZXR1cm47XG4gICAgdGhpcy5fc2V0UmVqZWN0aW9uSXNVbmhhbmRsZWQoKTtcbiAgICBkZWZlclVuaGFuZGxlZFJlamVjdGlvbkNoZWNrKHRoaXMpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX25vdGlmeVVuaGFuZGxlZFJlamVjdGlvbklzSGFuZGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmaXJlUmVqZWN0aW9uRXZlbnQoXCJyZWplY3Rpb25IYW5kbGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlZCwgdW5kZWZpbmVkLCB0aGlzKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9zZXRSZXR1cm5lZE5vblVuZGVmaW5lZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCAyNjg0MzU0NTY7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcmV0dXJuZWROb25VbmRlZmluZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKHRoaXMuX2JpdEZpZWxkICYgMjY4NDM1NDU2KSAhPT0gMDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9ub3RpZnlVbmhhbmRsZWRSZWplY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX2lzUmVqZWN0aW9uVW5oYW5kbGVkKCkpIHtcbiAgICAgICAgdmFyIHJlYXNvbiA9IHRoaXMuX3NldHRsZWRWYWx1ZSgpO1xuICAgICAgICB0aGlzLl9zZXRVbmhhbmRsZWRSZWplY3Rpb25Jc05vdGlmaWVkKCk7XG4gICAgICAgIGZpcmVSZWplY3Rpb25FdmVudChcInVuaGFuZGxlZFJlamVjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJseVVuaGFuZGxlZFJlamVjdGlvbiwgcmVhc29uLCB0aGlzKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0VW5oYW5kbGVkUmVqZWN0aW9uSXNOb3RpZmllZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkIHwgMjYyMTQ0O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Vuc2V0VW5oYW5kbGVkUmVqZWN0aW9uSXNOb3RpZmllZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkICYgKH4yNjIxNDQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2lzVW5oYW5kbGVkUmVqZWN0aW9uTm90aWZpZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDI2MjE0NCkgPiAwO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldFJlamVjdGlvbklzVW5oYW5kbGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCAxMDQ4NTc2O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Vuc2V0UmVqZWN0aW9uSXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCAmICh+MTA0ODU3Nik7XG4gICAgaWYgKHRoaXMuX2lzVW5oYW5kbGVkUmVqZWN0aW9uTm90aWZpZWQoKSkge1xuICAgICAgICB0aGlzLl91bnNldFVuaGFuZGxlZFJlamVjdGlvbklzTm90aWZpZWQoKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uSXNIYW5kbGVkKCk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2lzUmVqZWN0aW9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiAxMDQ4NTc2KSA+IDA7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fd2FybiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHNob3VsZFVzZU93blRyYWNlLCBwcm9taXNlKSB7XG4gICAgcmV0dXJuIHdhcm4obWVzc2FnZSwgc2hvdWxkVXNlT3duVHJhY2UsIHByb21pc2UgfHwgdGhpcyk7XG59O1xuXG5Qcm9taXNlLm9uUG9zc2libHlVbmhhbmRsZWRSZWplY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgY29udGV4dCA9IFByb21pc2UuX2dldENvbnRleHQoKTtcbiAgICBwb3NzaWJseVVuaGFuZGxlZFJlamVjdGlvbiA9IHV0aWwuY29udGV4dEJpbmQoY29udGV4dCwgZm4pO1xufTtcblxuUHJvbWlzZS5vblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZWQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgY29udGV4dCA9IFByb21pc2UuX2dldENvbnRleHQoKTtcbiAgICB1bmhhbmRsZWRSZWplY3Rpb25IYW5kbGVkID0gdXRpbC5jb250ZXh0QmluZChjb250ZXh0LCBmbik7XG59O1xuXG52YXIgZGlzYWJsZUxvbmdTdGFja1RyYWNlcyA9IGZ1bmN0aW9uKCkge307XG5Qcm9taXNlLmxvbmdTdGFja1RyYWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoYXN5bmMuaGF2ZUl0ZW1zUXVldWVkKCkgJiYgIWNvbmZpZy5sb25nU3RhY2tUcmFjZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGVuYWJsZSBsb25nIHN0YWNrIHRyYWNlcyBhZnRlciBwcm9taXNlcyBoYXZlIGJlZW4gY3JlYXRlZFxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxuICAgIGlmICghY29uZmlnLmxvbmdTdGFja1RyYWNlcyAmJiBsb25nU3RhY2tUcmFjZXNJc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHZhciBQcm9taXNlX2NhcHR1cmVTdGFja1RyYWNlID0gUHJvbWlzZS5wcm90b3R5cGUuX2NhcHR1cmVTdGFja1RyYWNlO1xuICAgICAgICB2YXIgUHJvbWlzZV9hdHRhY2hFeHRyYVRyYWNlID0gUHJvbWlzZS5wcm90b3R5cGUuX2F0dGFjaEV4dHJhVHJhY2U7XG4gICAgICAgIHZhciBQcm9taXNlX2RlcmVmZXJlbmNlVHJhY2UgPSBQcm9taXNlLnByb3RvdHlwZS5fZGVyZWZlcmVuY2VUcmFjZTtcbiAgICAgICAgY29uZmlnLmxvbmdTdGFja1RyYWNlcyA9IHRydWU7XG4gICAgICAgIGRpc2FibGVMb25nU3RhY2tUcmFjZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChhc3luYy5oYXZlSXRlbXNRdWV1ZWQoKSAmJiAhY29uZmlnLmxvbmdTdGFja1RyYWNlcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbm5vdCBlbmFibGUgbG9uZyBzdGFjayB0cmFjZXMgYWZ0ZXIgcHJvbWlzZXMgaGF2ZSBiZWVuIGNyZWF0ZWRcXHUwMDBhXFx1MDAwYSAgICBTZWUgaHR0cDovL2dvby5nbC9NcXJGbVhcXHUwMDBhXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2NhcHR1cmVTdGFja1RyYWNlID0gUHJvbWlzZV9jYXB0dXJlU3RhY2tUcmFjZTtcbiAgICAgICAgICAgIFByb21pc2UucHJvdG90eXBlLl9hdHRhY2hFeHRyYVRyYWNlID0gUHJvbWlzZV9hdHRhY2hFeHRyYVRyYWNlO1xuICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2RlcmVmZXJlbmNlVHJhY2UgPSBQcm9taXNlX2RlcmVmZXJlbmNlVHJhY2U7XG4gICAgICAgICAgICBDb250ZXh0LmRlYWN0aXZhdGVMb25nU3RhY2tUcmFjZXMoKTtcbiAgICAgICAgICAgIGNvbmZpZy5sb25nU3RhY2tUcmFjZXMgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2NhcHR1cmVTdGFja1RyYWNlID0gbG9uZ1N0YWNrVHJhY2VzQ2FwdHVyZVN0YWNrVHJhY2U7XG4gICAgICAgIFByb21pc2UucHJvdG90eXBlLl9hdHRhY2hFeHRyYVRyYWNlID0gbG9uZ1N0YWNrVHJhY2VzQXR0YWNoRXh0cmFUcmFjZTtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2RlcmVmZXJlbmNlVHJhY2UgPSBsb25nU3RhY2tUcmFjZXNEZXJlZmVyZW5jZVRyYWNlO1xuICAgICAgICBDb250ZXh0LmFjdGl2YXRlTG9uZ1N0YWNrVHJhY2VzKCk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5oYXNMb25nU3RhY2tUcmFjZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5sb25nU3RhY2tUcmFjZXMgJiYgbG9uZ1N0YWNrVHJhY2VzSXNTdXBwb3J0ZWQoKTtcbn07XG5cblxudmFyIGxlZ2FjeUhhbmRsZXJzID0ge1xuICAgIHVuaGFuZGxlZHJlamVjdGlvbjoge1xuICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHJldCA9IHV0aWwuZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uO1xuICAgICAgICAgICAgdXRpbC5nbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXI6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICB1dGlsLmdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbiA9IGZuO1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZWplY3Rpb25oYW5kbGVkOiB7XG4gICAgICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgcmV0ID0gdXRpbC5nbG9iYWwub25yZWplY3Rpb25oYW5kbGVkO1xuICAgICAgICAgICAgdXRpbC5nbG9iYWwub25yZWplY3Rpb25oYW5kbGVkID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0sXG4gICAgICAgIGFmdGVyOiBmdW5jdGlvbihmbikge1xuICAgICAgICAgICAgdXRpbC5nbG9iYWwub25yZWplY3Rpb25oYW5kbGVkID0gZm47XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZmlyZURvbUV2ZW50ID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciBkaXNwYXRjaCA9IGZ1bmN0aW9uKGxlZ2FjeSwgZSkge1xuICAgICAgICBpZiAobGVnYWN5KSB7XG4gICAgICAgICAgICB2YXIgZm47XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZuID0gbGVnYWN5LmJlZm9yZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAhdXRpbC5nbG9iYWwuZGlzcGF0Y2hFdmVudChlKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgbGVnYWN5LmFmdGVyKGZuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAhdXRpbC5nbG9iYWwuZGlzcGF0Y2hFdmVudChlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoXCJDdXN0b21FdmVudFwiKTtcbiAgICAgICAgICAgIHV0aWwuZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUsIGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnREYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB2YXIgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQobmFtZSwgZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICBlczUuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIGRvbUV2ZW50LCBcInByb21pc2VcIiwge3ZhbHVlOiBldmVudC5wcm9taXNlfSk7XG4gICAgICAgICAgICAgICAgZXM1LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBkb21FdmVudCwgXCJyZWFzb25cIiwge3ZhbHVlOiBldmVudC5yZWFzb259KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaChsZWdhY3lIYW5kbGVyc1tuYW1lXSwgZG9tRXZlbnQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgRXZlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KFwiQ3VzdG9tRXZlbnRcIik7XG4gICAgICAgICAgICB1dGlsLmdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihuYW1lLCBldmVudCkge1xuICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdmFyIGRvbUV2ZW50ID0gbmV3IEV2ZW50KG5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRvbUV2ZW50LmRldGFpbCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIGVzNS5kZWZpbmVQcm9wZXJ0eShkb21FdmVudCwgXCJwcm9taXNlXCIsIHt2YWx1ZTogZXZlbnQucHJvbWlzZX0pO1xuICAgICAgICAgICAgICAgIGVzNS5kZWZpbmVQcm9wZXJ0eShkb21FdmVudCwgXCJyZWFzb25cIiwge3ZhbHVlOiBldmVudC5yZWFzb259KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2gobGVnYWN5SGFuZGxlcnNbbmFtZV0sIGRvbUV2ZW50KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkN1c3RvbUV2ZW50XCIpO1xuICAgICAgICAgICAgZXZlbnQuaW5pdEN1c3RvbUV2ZW50KFwidGVzdGluZ3RoZWV2ZW50XCIsIGZhbHNlLCB0cnVlLCB7fSk7XG4gICAgICAgICAgICB1dGlsLmdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihuYW1lLCBldmVudCkge1xuICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdmFyIGRvbUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKTtcbiAgICAgICAgICAgICAgICBkb21FdmVudC5pbml0Q3VzdG9tRXZlbnQobmFtZSwgZmFsc2UsIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2gobGVnYWN5SGFuZGxlcnNbbmFtZV0sIGRvbUV2ZW50KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59KSgpO1xuXG52YXIgZmlyZUdsb2JhbEV2ZW50ID0gKGZ1bmN0aW9uKCkge1xuICAgIGlmICh1dGlsLmlzTm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbWl0LmFwcGx5KHByb2Nlc3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF1dGlsLmdsb2JhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBtZXRob2ROYW1lID0gXCJvblwiICsgbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHV0aWwuZ2xvYmFsW21ldGhvZE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFtZXRob2QpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIG1ldGhvZC5hcHBseSh1dGlsLmdsb2JhbCwgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH1cbn0pKCk7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUHJvbWlzZUxpZmVjeWNsZUV2ZW50T2JqZWN0KG5hbWUsIHByb21pc2UpIHtcbiAgICByZXR1cm4ge3Byb21pc2U6IHByb21pc2V9O1xufVxuXG52YXIgZXZlbnRUb09iamVjdEdlbmVyYXRvciA9IHtcbiAgICBwcm9taXNlQ3JlYXRlZDogZ2VuZXJhdGVQcm9taXNlTGlmZWN5Y2xlRXZlbnRPYmplY3QsXG4gICAgcHJvbWlzZUZ1bGZpbGxlZDogZ2VuZXJhdGVQcm9taXNlTGlmZWN5Y2xlRXZlbnRPYmplY3QsXG4gICAgcHJvbWlzZVJlamVjdGVkOiBnZW5lcmF0ZVByb21pc2VMaWZlY3ljbGVFdmVudE9iamVjdCxcbiAgICBwcm9taXNlUmVzb2x2ZWQ6IGdlbmVyYXRlUHJvbWlzZUxpZmVjeWNsZUV2ZW50T2JqZWN0LFxuICAgIHByb21pc2VDYW5jZWxsZWQ6IGdlbmVyYXRlUHJvbWlzZUxpZmVjeWNsZUV2ZW50T2JqZWN0LFxuICAgIHByb21pc2VDaGFpbmVkOiBmdW5jdGlvbihuYW1lLCBwcm9taXNlLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4ge3Byb21pc2U6IHByb21pc2UsIGNoaWxkOiBjaGlsZH07XG4gICAgfSxcbiAgICB3YXJuaW5nOiBmdW5jdGlvbihuYW1lLCB3YXJuaW5nKSB7XG4gICAgICAgIHJldHVybiB7d2FybmluZzogd2FybmluZ307XG4gICAgfSxcbiAgICB1bmhhbmRsZWRSZWplY3Rpb246IGZ1bmN0aW9uIChuYW1lLCByZWFzb24sIHByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHtyZWFzb246IHJlYXNvbiwgcHJvbWlzZTogcHJvbWlzZX07XG4gICAgfSxcbiAgICByZWplY3Rpb25IYW5kbGVkOiBnZW5lcmF0ZVByb21pc2VMaWZlY3ljbGVFdmVudE9iamVjdFxufTtcblxudmFyIGFjdGl2ZUZpcmVFdmVudCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIGdsb2JhbEV2ZW50RmlyZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBnbG9iYWxFdmVudEZpcmVkID0gZmlyZUdsb2JhbEV2ZW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhc3luYy50aHJvd0xhdGVyKGUpO1xuICAgICAgICBnbG9iYWxFdmVudEZpcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZG9tRXZlbnRGaXJlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGRvbUV2ZW50RmlyZWQgPSBmaXJlRG9tRXZlbnQobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUb09iamVjdEdlbmVyYXRvcltuYW1lXS5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFzeW5jLnRocm93TGF0ZXIoZSk7XG4gICAgICAgIGRvbUV2ZW50RmlyZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBkb21FdmVudEZpcmVkIHx8IGdsb2JhbEV2ZW50RmlyZWQ7XG59O1xuXG5Qcm9taXNlLmNvbmZpZyA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgICBvcHRzID0gT2JqZWN0KG9wdHMpO1xuICAgIGlmIChcImxvbmdTdGFja1RyYWNlc1wiIGluIG9wdHMpIHtcbiAgICAgICAgaWYgKG9wdHMubG9uZ1N0YWNrVHJhY2VzKSB7XG4gICAgICAgICAgICBQcm9taXNlLmxvbmdTdGFja1RyYWNlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKCFvcHRzLmxvbmdTdGFja1RyYWNlcyAmJiBQcm9taXNlLmhhc0xvbmdTdGFja1RyYWNlcygpKSB7XG4gICAgICAgICAgICBkaXNhYmxlTG9uZ1N0YWNrVHJhY2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwid2FybmluZ3NcIiBpbiBvcHRzKSB7XG4gICAgICAgIHZhciB3YXJuaW5nc09wdGlvbiA9IG9wdHMud2FybmluZ3M7XG4gICAgICAgIGNvbmZpZy53YXJuaW5ncyA9ICEhd2FybmluZ3NPcHRpb247XG4gICAgICAgIHdGb3Jnb3R0ZW5SZXR1cm4gPSBjb25maWcud2FybmluZ3M7XG5cbiAgICAgICAgaWYgKHV0aWwuaXNPYmplY3Qod2FybmluZ3NPcHRpb24pKSB7XG4gICAgICAgICAgICBpZiAoXCJ3Rm9yZ290dGVuUmV0dXJuXCIgaW4gd2FybmluZ3NPcHRpb24pIHtcbiAgICAgICAgICAgICAgICB3Rm9yZ290dGVuUmV0dXJuID0gISF3YXJuaW5nc09wdGlvbi53Rm9yZ290dGVuUmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcImNhbmNlbGxhdGlvblwiIGluIG9wdHMgJiYgb3B0cy5jYW5jZWxsYXRpb24gJiYgIWNvbmZpZy5jYW5jZWxsYXRpb24pIHtcbiAgICAgICAgaWYgKGFzeW5jLmhhdmVJdGVtc1F1ZXVlZCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJjYW5ub3QgZW5hYmxlIGNhbmNlbGxhdGlvbiBhZnRlciBwcm9taXNlcyBhcmUgaW4gdXNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIFByb21pc2UucHJvdG90eXBlLl9jbGVhckNhbmNlbGxhdGlvbkRhdGEgPVxuICAgICAgICAgICAgY2FuY2VsbGF0aW9uQ2xlYXJDYW5jZWxsYXRpb25EYXRhO1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fcHJvcGFnYXRlRnJvbSA9IGNhbmNlbGxhdGlvblByb3BhZ2F0ZUZyb207XG4gICAgICAgIFByb21pc2UucHJvdG90eXBlLl9vbkNhbmNlbCA9IGNhbmNlbGxhdGlvbk9uQ2FuY2VsO1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fc2V0T25DYW5jZWwgPSBjYW5jZWxsYXRpb25TZXRPbkNhbmNlbDtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2F0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrID1cbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkF0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrO1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGNhbmNlbGxhdGlvbkV4ZWN1dGU7XG4gICAgICAgIHByb3BhZ2F0ZUZyb21GdW5jdGlvbiA9IGNhbmNlbGxhdGlvblByb3BhZ2F0ZUZyb207XG4gICAgICAgIGNvbmZpZy5jYW5jZWxsYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXCJtb25pdG9yaW5nXCIgaW4gb3B0cykge1xuICAgICAgICBpZiAob3B0cy5tb25pdG9yaW5nICYmICFjb25maWcubW9uaXRvcmluZykge1xuICAgICAgICAgICAgY29uZmlnLm1vbml0b3JpbmcgPSB0cnVlO1xuICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IGFjdGl2ZUZpcmVFdmVudDtcbiAgICAgICAgfSBlbHNlIGlmICghb3B0cy5tb25pdG9yaW5nICYmIGNvbmZpZy5tb25pdG9yaW5nKSB7XG4gICAgICAgICAgICBjb25maWcubW9uaXRvcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IGRlZmF1bHRGaXJlRXZlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwiYXN5bmNIb29rc1wiIGluIG9wdHMgJiYgdXRpbC5ub2RlU3VwcG9ydHNBc3luY1Jlc291cmNlKSB7XG4gICAgICAgIHZhciBwcmV2ID0gY29uZmlnLmFzeW5jSG9va3M7XG4gICAgICAgIHZhciBjdXIgPSAhIW9wdHMuYXN5bmNIb29rcztcbiAgICAgICAgaWYgKHByZXYgIT09IGN1cikge1xuICAgICAgICAgICAgY29uZmlnLmFzeW5jSG9va3MgPSBjdXI7XG4gICAgICAgICAgICBpZiAoY3VyKSB7XG4gICAgICAgICAgICAgICAgZW5hYmxlQXN5bmNIb29rcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlQXN5bmNIb29rcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlO1xufTtcblxuZnVuY3Rpb24gZGVmYXVsdEZpcmVFdmVudCgpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblByb21pc2UucHJvdG90eXBlLl9maXJlRXZlbnQgPSBkZWZhdWx0RmlyZUV2ZW50O1xuUHJvbWlzZS5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihleGVjdXRvciwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgZXhlY3V0b3IocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbn07XG5Qcm9taXNlLnByb3RvdHlwZS5fb25DYW5jZWwgPSBmdW5jdGlvbiAoKSB7fTtcblByb21pc2UucHJvdG90eXBlLl9zZXRPbkNhbmNlbCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7IDsgfTtcblByb21pc2UucHJvdG90eXBlLl9hdHRhY2hDYW5jZWxsYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uKG9uQ2FuY2VsKSB7XG4gICAgO1xufTtcblByb21pc2UucHJvdG90eXBlLl9jYXB0dXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uICgpIHt9O1xuUHJvbWlzZS5wcm90b3R5cGUuX2F0dGFjaEV4dHJhVHJhY2UgPSBmdW5jdGlvbiAoKSB7fTtcblByb21pc2UucHJvdG90eXBlLl9kZXJlZmVyZW5jZVRyYWNlID0gZnVuY3Rpb24gKCkge307XG5Qcm9taXNlLnByb3RvdHlwZS5fY2xlYXJDYW5jZWxsYXRpb25EYXRhID0gZnVuY3Rpb24oKSB7fTtcblByb21pc2UucHJvdG90eXBlLl9wcm9wYWdhdGVGcm9tID0gZnVuY3Rpb24gKHBhcmVudCwgZmxhZ3MpIHtcbiAgICA7XG4gICAgO1xufTtcblxuZnVuY3Rpb24gY2FuY2VsbGF0aW9uRXhlY3V0ZShleGVjdXRvciwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgIHRyeSB7XG4gICAgICAgIGV4ZWN1dG9yKHJlc29sdmUsIHJlamVjdCwgZnVuY3Rpb24ob25DYW5jZWwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvbkNhbmNlbCBtdXN0IGJlIGEgZnVuY3Rpb24sIGdvdDogXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC50b1N0cmluZyhvbkNhbmNlbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvbWlzZS5fYXR0YWNoQ2FuY2VsbGF0aW9uQ2FsbGJhY2sob25DYW5jZWwpO1xuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FuY2VsbGF0aW9uQXR0YWNoQ2FuY2VsbGF0aW9uQ2FsbGJhY2sob25DYW5jZWwpIHtcbiAgICBpZiAoIXRoaXMuX2lzQ2FuY2VsbGFibGUoKSkgcmV0dXJuIHRoaXM7XG5cbiAgICB2YXIgcHJldmlvdXNPbkNhbmNlbCA9IHRoaXMuX29uQ2FuY2VsKCk7XG4gICAgaWYgKHByZXZpb3VzT25DYW5jZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodXRpbC5pc0FycmF5KHByZXZpb3VzT25DYW5jZWwpKSB7XG4gICAgICAgICAgICBwcmV2aW91c09uQ2FuY2VsLnB1c2gob25DYW5jZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2V0T25DYW5jZWwoW3ByZXZpb3VzT25DYW5jZWwsIG9uQ2FuY2VsXSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXRPbkNhbmNlbChvbkNhbmNlbCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYW5jZWxsYXRpb25PbkNhbmNlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb25DYW5jZWxGaWVsZDtcbn1cblxuZnVuY3Rpb24gY2FuY2VsbGF0aW9uU2V0T25DYW5jZWwob25DYW5jZWwpIHtcbiAgICB0aGlzLl9vbkNhbmNlbEZpZWxkID0gb25DYW5jZWw7XG59XG5cbmZ1bmN0aW9uIGNhbmNlbGxhdGlvbkNsZWFyQ2FuY2VsbGF0aW9uRGF0YSgpIHtcbiAgICB0aGlzLl9jYW5jZWxsYXRpb25QYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fb25DYW5jZWxGaWVsZCA9IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2FuY2VsbGF0aW9uUHJvcGFnYXRlRnJvbShwYXJlbnQsIGZsYWdzKSB7XG4gICAgaWYgKChmbGFncyAmIDEpICE9PSAwKSB7XG4gICAgICAgIHRoaXMuX2NhbmNlbGxhdGlvblBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdmFyIGJyYW5jaGVzUmVtYWluaW5nVG9DYW5jZWwgPSBwYXJlbnQuX2JyYW5jaGVzUmVtYWluaW5nVG9DYW5jZWw7XG4gICAgICAgIGlmIChicmFuY2hlc1JlbWFpbmluZ1RvQ2FuY2VsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJyYW5jaGVzUmVtYWluaW5nVG9DYW5jZWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudC5fYnJhbmNoZXNSZW1haW5pbmdUb0NhbmNlbCA9IGJyYW5jaGVzUmVtYWluaW5nVG9DYW5jZWwgKyAxO1xuICAgIH1cbiAgICBpZiAoKGZsYWdzICYgMikgIT09IDAgJiYgcGFyZW50Ll9pc0JvdW5kKCkpIHtcbiAgICAgICAgdGhpcy5fc2V0Qm91bmRUbyhwYXJlbnQuX2JvdW5kVG8pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYmluZGluZ1Byb3BhZ2F0ZUZyb20ocGFyZW50LCBmbGFncykge1xuICAgIGlmICgoZmxhZ3MgJiAyKSAhPT0gMCAmJiBwYXJlbnQuX2lzQm91bmQoKSkge1xuICAgICAgICB0aGlzLl9zZXRCb3VuZFRvKHBhcmVudC5fYm91bmRUbyk7XG4gICAgfVxufVxudmFyIHByb3BhZ2F0ZUZyb21GdW5jdGlvbiA9IGJpbmRpbmdQcm9wYWdhdGVGcm9tO1xuXG5mdW5jdGlvbiBib3VuZFZhbHVlRnVuY3Rpb24oKSB7XG4gICAgdmFyIHJldCA9IHRoaXMuX2JvdW5kVG87XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICBpZiAocmV0LmlzRnVsZmlsbGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0LnZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gbG9uZ1N0YWNrVHJhY2VzQ2FwdHVyZVN0YWNrVHJhY2UoKSB7XG4gICAgdGhpcy5fdHJhY2UgPSBuZXcgQ2FwdHVyZWRUcmFjZSh0aGlzLl9wZWVrQ29udGV4dCgpKTtcbn1cblxuZnVuY3Rpb24gbG9uZ1N0YWNrVHJhY2VzQXR0YWNoRXh0cmFUcmFjZShlcnJvciwgaWdub3JlU2VsZikge1xuICAgIGlmIChjYW5BdHRhY2hUcmFjZShlcnJvcikpIHtcbiAgICAgICAgdmFyIHRyYWNlID0gdGhpcy5fdHJhY2U7XG4gICAgICAgIGlmICh0cmFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoaWdub3JlU2VsZikgdHJhY2UgPSB0cmFjZS5fcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0cmFjZS5hdHRhY2hFeHRyYVRyYWNlKGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmICghZXJyb3IuX19zdGFja0NsZWFuZWRfXykge1xuICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHBhcnNlU3RhY2tBbmRNZXNzYWdlKGVycm9yKTtcbiAgICAgICAgICAgIHV0aWwubm90RW51bWVyYWJsZVByb3AoZXJyb3IsIFwic3RhY2tcIixcbiAgICAgICAgICAgICAgICBwYXJzZWQubWVzc2FnZSArIFwiXFxuXCIgKyBwYXJzZWQuc3RhY2suam9pbihcIlxcblwiKSk7XG4gICAgICAgICAgICB1dGlsLm5vdEVudW1lcmFibGVQcm9wKGVycm9yLCBcIl9fc3RhY2tDbGVhbmVkX19cIiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvbmdTdGFja1RyYWNlc0RlcmVmZXJlbmNlVHJhY2UoKSB7XG4gICAgdGhpcy5fdHJhY2UgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yZ290dGVuUmV0dXJucyhyZXR1cm5WYWx1ZSwgcHJvbWlzZUNyZWF0ZWQsIG5hbWUsIHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50KSB7XG4gICAgaWYgKHJldHVyblZhbHVlID09PSB1bmRlZmluZWQgJiYgcHJvbWlzZUNyZWF0ZWQgIT09IG51bGwgJiZcbiAgICAgICAgd0ZvcmdvdHRlblJldHVybikge1xuICAgICAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQgJiYgcGFyZW50Ll9yZXR1cm5lZE5vblVuZGVmaW5lZCgpKSByZXR1cm47XG4gICAgICAgIGlmICgocHJvbWlzZS5fYml0RmllbGQgJiA2NTUzNSkgPT09IDApIHJldHVybjtcblxuICAgICAgICBpZiAobmFtZSkgbmFtZSA9IG5hbWUgKyBcIiBcIjtcbiAgICAgICAgdmFyIGhhbmRsZXJMaW5lID0gXCJcIjtcbiAgICAgICAgdmFyIGNyZWF0b3JMaW5lID0gXCJcIjtcbiAgICAgICAgaWYgKHByb21pc2VDcmVhdGVkLl90cmFjZSkge1xuICAgICAgICAgICAgdmFyIHRyYWNlTGluZXMgPSBwcm9taXNlQ3JlYXRlZC5fdHJhY2Uuc3RhY2suc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBjbGVhblN0YWNrKHRyYWNlTGluZXMpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzdGFja1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGVGcmFtZVBhdHRlcm4udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU1hdGNoZXMgPSBsaW5lLm1hdGNoKHBhcnNlTGluZVBhdHRlcm4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGluZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJMaW5lICA9IFwiYXQgXCIgKyBsaW5lTWF0Y2hlc1sxXSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI6XCIgKyBsaW5lTWF0Y2hlc1syXSArIFwiOlwiICsgbGluZU1hdGNoZXNbM10gKyBcIiBcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpcnN0VXNlckxpbmUgPSBzdGFja1swXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNlTGluZXMubGVuZ3RoOyArK2kpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2VMaW5lc1tpXSA9PT0gZmlyc3RVc2VyTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvckxpbmUgPSBcIlxcblwiICsgdHJhY2VMaW5lc1tpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBtc2cgPSBcImEgcHJvbWlzZSB3YXMgY3JlYXRlZCBpbiBhIFwiICsgbmFtZSArXG4gICAgICAgICAgICBcImhhbmRsZXIgXCIgKyBoYW5kbGVyTGluZSArIFwiYnV0IHdhcyBub3QgcmV0dXJuZWQgZnJvbSBpdCwgXCIgK1xuICAgICAgICAgICAgXCJzZWUgaHR0cDovL2dvby5nbC9yUnFNVXdcIiArXG4gICAgICAgICAgICBjcmVhdG9yTGluZTtcbiAgICAgICAgcHJvbWlzZS5fd2Fybihtc2csIHRydWUsIHByb21pc2VDcmVhdGVkKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZWQobmFtZSwgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgbWVzc2FnZSA9IG5hbWUgK1xuICAgICAgICBcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cIjtcbiAgICBpZiAocmVwbGFjZW1lbnQpIG1lc3NhZ2UgKz0gXCIgVXNlIFwiICsgcmVwbGFjZW1lbnQgKyBcIiBpbnN0ZWFkLlwiO1xuICAgIHJldHVybiB3YXJuKG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiB3YXJuKG1lc3NhZ2UsIHNob3VsZFVzZU93blRyYWNlLCBwcm9taXNlKSB7XG4gICAgaWYgKCFjb25maWcud2FybmluZ3MpIHJldHVybjtcbiAgICB2YXIgd2FybmluZyA9IG5ldyBXYXJuaW5nKG1lc3NhZ2UpO1xuICAgIHZhciBjdHg7XG4gICAgaWYgKHNob3VsZFVzZU93blRyYWNlKSB7XG4gICAgICAgIHByb21pc2UuX2F0dGFjaEV4dHJhVHJhY2Uod2FybmluZyk7XG4gICAgfSBlbHNlIGlmIChjb25maWcubG9uZ1N0YWNrVHJhY2VzICYmIChjdHggPSBQcm9taXNlLl9wZWVrQ29udGV4dCgpKSkge1xuICAgICAgICBjdHguYXR0YWNoRXh0cmFUcmFjZSh3YXJuaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcGFyc2VkID0gcGFyc2VTdGFja0FuZE1lc3NhZ2Uod2FybmluZyk7XG4gICAgICAgIHdhcm5pbmcuc3RhY2sgPSBwYXJzZWQubWVzc2FnZSArIFwiXFxuXCIgKyBwYXJzZWQuc3RhY2suam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBpZiAoIWFjdGl2ZUZpcmVFdmVudChcIndhcm5pbmdcIiwgd2FybmluZykpIHtcbiAgICAgICAgZm9ybWF0QW5kTG9nRXJyb3Iod2FybmluZywgXCJcIiwgdHJ1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWNvbnN0cnVjdFN0YWNrKG1lc3NhZ2UsIHN0YWNrcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2tzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgICBzdGFja3NbaV0ucHVzaChcIkZyb20gcHJldmlvdXMgZXZlbnQ6XCIpO1xuICAgICAgICBzdGFja3NbaV0gPSBzdGFja3NbaV0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgaWYgKGkgPCBzdGFja3MubGVuZ3RoKSB7XG4gICAgICAgIHN0YWNrc1tpXSA9IHN0YWNrc1tpXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZSArIFwiXFxuXCIgKyBzdGFja3Muam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlT3JFbXB0eUp1bXBzKHN0YWNrcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChzdGFja3NbaV0ubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAoKGkgKyAxIDwgc3RhY2tzLmxlbmd0aCkgJiYgc3RhY2tzW2ldWzBdID09PSBzdGFja3NbaSsxXVswXSkpIHtcbiAgICAgICAgICAgIHN0YWNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbW1vblJvb3RzKHN0YWNrcykge1xuICAgIHZhciBjdXJyZW50ID0gc3RhY2tzWzBdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3RhY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBwcmV2ID0gc3RhY2tzW2ldO1xuICAgICAgICB2YXIgY3VycmVudExhc3RJbmRleCA9IGN1cnJlbnQubGVuZ3RoIC0gMTtcbiAgICAgICAgdmFyIGN1cnJlbnRMYXN0TGluZSA9IGN1cnJlbnRbY3VycmVudExhc3RJbmRleF07XG4gICAgICAgIHZhciBjb21tb25Sb290TWVldFBvaW50ID0gLTE7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IHByZXYubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcbiAgICAgICAgICAgIGlmIChwcmV2W2pdID09PSBjdXJyZW50TGFzdExpbmUpIHtcbiAgICAgICAgICAgICAgICBjb21tb25Sb290TWVldFBvaW50ID0gajtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGogPSBjb21tb25Sb290TWVldFBvaW50OyBqID49IDA7IC0taikge1xuICAgICAgICAgICAgdmFyIGxpbmUgPSBwcmV2W2pdO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRbY3VycmVudExhc3RJbmRleF0gPT09IGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50LnBvcCgpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRMYXN0SW5kZXgtLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IHByZXY7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjbGVhblN0YWNrKHN0YWNrKSB7XG4gICAgdmFyIHJldCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGxpbmUgPSBzdGFja1tpXTtcbiAgICAgICAgdmFyIGlzVHJhY2VMaW5lID0gXCIgICAgKE5vIHN0YWNrIHRyYWNlKVwiID09PSBsaW5lIHx8XG4gICAgICAgICAgICBzdGFja0ZyYW1lUGF0dGVybi50ZXN0KGxpbmUpO1xuICAgICAgICB2YXIgaXNJbnRlcm5hbEZyYW1lID0gaXNUcmFjZUxpbmUgJiYgc2hvdWxkSWdub3JlKGxpbmUpO1xuICAgICAgICBpZiAoaXNUcmFjZUxpbmUgJiYgIWlzSW50ZXJuYWxGcmFtZSkge1xuICAgICAgICAgICAgaWYgKGluZGVudFN0YWNrRnJhbWVzICYmIGxpbmUuY2hhckF0KDApICE9PSBcIiBcIikge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBcIiAgICBcIiArIGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXQucHVzaChsaW5lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBzdGFja0ZyYW1lc0FzQXJyYXkoZXJyb3IpIHtcbiAgICB2YXIgc3RhY2sgPSBlcnJvci5zdGFjay5yZXBsYWNlKC9cXHMrJC9nLCBcIlwiKS5zcGxpdChcIlxcblwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBsaW5lID0gc3RhY2tbaV07XG4gICAgICAgIGlmIChcIiAgICAoTm8gc3RhY2sgdHJhY2UpXCIgPT09IGxpbmUgfHwgc3RhY2tGcmFtZVBhdHRlcm4udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPiAwICYmIGVycm9yLm5hbWUgIT0gXCJTeW50YXhFcnJvclwiKSB7XG4gICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoaSk7XG4gICAgfVxuICAgIHJldHVybiBzdGFjaztcbn1cblxuZnVuY3Rpb24gcGFyc2VTdGFja0FuZE1lc3NhZ2UoZXJyb3IpIHtcbiAgICB2YXIgc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICB2YXIgbWVzc2FnZSA9IGVycm9yLnRvU3RyaW5nKCk7XG4gICAgc3RhY2sgPSB0eXBlb2Ygc3RhY2sgPT09IFwic3RyaW5nXCIgJiYgc3RhY2subGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gc3RhY2tGcmFtZXNBc0FycmF5KGVycm9yKSA6IFtcIiAgICAoTm8gc3RhY2sgdHJhY2UpXCJdO1xuICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBlcnJvci5uYW1lID09IFwiU3ludGF4RXJyb3JcIiA/IHN0YWNrIDogY2xlYW5TdGFjayhzdGFjaylcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRBbmRMb2dFcnJvcihlcnJvciwgdGl0bGUsIGlzU29mdCkge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB2YXIgbWVzc2FnZTtcbiAgICAgICAgaWYgKHV0aWwuaXNPYmplY3QoZXJyb3IpKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSB0aXRsZSArIGZvcm1hdFN0YWNrKHN0YWNrLCBlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gdGl0bGUgKyBTdHJpbmcoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcHJpbnRXYXJuaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhtZXNzYWdlLCBpc1NvZnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZS5sb2cgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmaXJlUmVqZWN0aW9uRXZlbnQobmFtZSwgbG9jYWxIYW5kbGVyLCByZWFzb24sIHByb21pc2UpIHtcbiAgICB2YXIgbG9jYWxFdmVudEZpcmVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbEhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgbG9jYWxFdmVudEZpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBcInJlamVjdGlvbkhhbmRsZWRcIikge1xuICAgICAgICAgICAgICAgIGxvY2FsSGFuZGxlcihwcm9taXNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9jYWxIYW5kbGVyKHJlYXNvbiwgcHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFzeW5jLnRocm93TGF0ZXIoZSk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgPT09IFwidW5oYW5kbGVkUmVqZWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKCFhY3RpdmVGaXJlRXZlbnQobmFtZSwgcmVhc29uLCBwcm9taXNlKSAmJiAhbG9jYWxFdmVudEZpcmVkKSB7XG4gICAgICAgICAgICBmb3JtYXRBbmRMb2dFcnJvcihyZWFzb24sIFwiVW5oYW5kbGVkIHJlamVjdGlvbiBcIik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVGaXJlRXZlbnQobmFtZSwgcHJvbWlzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXROb25FcnJvcihvYmopIHtcbiAgICB2YXIgc3RyO1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgc3RyID0gXCJbZnVuY3Rpb24gXCIgK1xuICAgICAgICAgICAgKG9iai5uYW1lIHx8IFwiYW5vbnltb3VzXCIpICtcbiAgICAgICAgICAgIFwiXVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IG9iaiAmJiB0eXBlb2Ygb2JqLnRvU3RyaW5nID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gb2JqLnRvU3RyaW5nKCkgOiB1dGlsLnRvU3RyaW5nKG9iaik7XG4gICAgICAgIHZhciBydXNlbGVzc1RvU3RyaW5nID0gL1xcW29iamVjdCBbYS16QS1aMC05JF9dK1xcXS87XG4gICAgICAgIGlmIChydXNlbGVzc1RvU3RyaW5nLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3U3RyID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcbiAgICAgICAgICAgICAgICBzdHIgPSBuZXdTdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlKSB7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc3RyID0gXCIoZW1wdHkgYXJyYXkpXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChcIig8XCIgKyBzbmlwKHN0cikgKyBcIj4sIG5vIHN0YWNrIHRyYWNlKVwiKTtcbn1cblxuZnVuY3Rpb24gc25pcChzdHIpIHtcbiAgICB2YXIgbWF4Q2hhcnMgPSA0MTtcbiAgICBpZiAoc3RyLmxlbmd0aCA8IG1heENoYXJzKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHJldHVybiBzdHIuc3Vic3RyKDAsIG1heENoYXJzIC0gMykgKyBcIi4uLlwiO1xufVxuXG5mdW5jdGlvbiBsb25nU3RhY2tUcmFjZXNJc1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIGNhcHR1cmVTdGFja1RyYWNlID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbnZhciBzaG91bGRJZ25vcmUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9O1xudmFyIHBhcnNlTGluZUluZm9SZWdleCA9IC9bXFwvPFxcKF0oW146XFwvXSspOihcXGQrKTooPzpcXGQrKVxcKT9cXHMqJC87XG5mdW5jdGlvbiBwYXJzZUxpbmVJbmZvKGxpbmUpIHtcbiAgICB2YXIgbWF0Y2hlcyA9IGxpbmUubWF0Y2gocGFyc2VMaW5lSW5mb1JlZ2V4KTtcbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoZXNbMV0sXG4gICAgICAgICAgICBsaW5lOiBwYXJzZUludChtYXRjaGVzWzJdLCAxMClcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNldEJvdW5kcyhmaXJzdExpbmVFcnJvciwgbGFzdExpbmVFcnJvcikge1xuICAgIGlmICghbG9uZ1N0YWNrVHJhY2VzSXNTdXBwb3J0ZWQoKSkgcmV0dXJuO1xuICAgIHZhciBmaXJzdFN0YWNrTGluZXMgPSAoZmlyc3RMaW5lRXJyb3Iuc3RhY2sgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG4gICAgdmFyIGxhc3RTdGFja0xpbmVzID0gKGxhc3RMaW5lRXJyb3Iuc3RhY2sgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG4gICAgdmFyIGZpcnN0SW5kZXggPSAtMTtcbiAgICB2YXIgbGFzdEluZGV4ID0gLTE7XG4gICAgdmFyIGZpcnN0RmlsZU5hbWU7XG4gICAgdmFyIGxhc3RGaWxlTmFtZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0U3RhY2tMaW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VMaW5lSW5mbyhmaXJzdFN0YWNrTGluZXNbaV0pO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBmaXJzdEZpbGVOYW1lID0gcmVzdWx0LmZpbGVOYW1lO1xuICAgICAgICAgICAgZmlyc3RJbmRleCA9IHJlc3VsdC5saW5lO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0U3RhY2tMaW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VMaW5lSW5mbyhsYXN0U3RhY2tMaW5lc1tpXSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGxhc3RGaWxlTmFtZSA9IHJlc3VsdC5maWxlTmFtZTtcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IHJlc3VsdC5saW5lO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpcnN0SW5kZXggPCAwIHx8IGxhc3RJbmRleCA8IDAgfHwgIWZpcnN0RmlsZU5hbWUgfHwgIWxhc3RGaWxlTmFtZSB8fFxuICAgICAgICBmaXJzdEZpbGVOYW1lICE9PSBsYXN0RmlsZU5hbWUgfHwgZmlyc3RJbmRleCA+PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNob3VsZElnbm9yZSA9IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgaWYgKGJsdWViaXJkRnJhbWVQYXR0ZXJuLnRlc3QobGluZSkpIHJldHVybiB0cnVlO1xuICAgICAgICB2YXIgaW5mbyA9IHBhcnNlTGluZUluZm8obGluZSk7XG4gICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICBpZiAoaW5mby5maWxlTmFtZSA9PT0gZmlyc3RGaWxlTmFtZSAmJlxuICAgICAgICAgICAgICAgIChmaXJzdEluZGV4IDw9IGluZm8ubGluZSAmJiBpbmZvLmxpbmUgPD0gbGFzdEluZGV4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBDYXB0dXJlZFRyYWNlKHBhcmVudCkge1xuICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLl9wcm9taXNlc0NyZWF0ZWQgPSAwO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLl9sZW5ndGggPSAxICsgKHBhcmVudCA9PT0gdW5kZWZpbmVkID8gMCA6IHBhcmVudC5fbGVuZ3RoKTtcbiAgICBjYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDYXB0dXJlZFRyYWNlKTtcbiAgICBpZiAobGVuZ3RoID4gMzIpIHRoaXMudW5jeWNsZSgpO1xufVxudXRpbC5pbmhlcml0cyhDYXB0dXJlZFRyYWNlLCBFcnJvcik7XG5Db250ZXh0LkNhcHR1cmVkVHJhY2UgPSBDYXB0dXJlZFRyYWNlO1xuXG5DYXB0dXJlZFRyYWNlLnByb3RvdHlwZS51bmN5Y2xlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMuX2xlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgMikgcmV0dXJuO1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHZhciBzdGFja1RvSW5kZXggPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBub2RlID0gdGhpczsgbm9kZSAhPT0gdW5kZWZpbmVkOyArK2kpIHtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUuX3BhcmVudDtcbiAgICB9XG4gICAgbGVuZ3RoID0gdGhpcy5fbGVuZ3RoID0gaTtcbiAgICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIHN0YWNrID0gbm9kZXNbaV0uc3RhY2s7XG4gICAgICAgIGlmIChzdGFja1RvSW5kZXhbc3RhY2tdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YWNrVG9JbmRleFtzdGFja10gPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRTdGFjayA9IG5vZGVzW2ldLnN0YWNrO1xuICAgICAgICB2YXIgaW5kZXggPSBzdGFja1RvSW5kZXhbY3VycmVudFN0YWNrXTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW5kZXggIT09IGkpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBub2Rlc1tpbmRleCAtIDFdLl9wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbm9kZXNbaW5kZXggLSAxXS5fbGVuZ3RoID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVzW2ldLl9wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBub2Rlc1tpXS5fbGVuZ3RoID0gMTtcbiAgICAgICAgICAgIHZhciBjeWNsZUVkZ2VOb2RlID0gaSA+IDAgPyBub2Rlc1tpIC0gMV0gOiB0aGlzO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgY3ljbGVFZGdlTm9kZS5fcGFyZW50ID0gbm9kZXNbaW5kZXggKyAxXTtcbiAgICAgICAgICAgICAgICBjeWNsZUVkZ2VOb2RlLl9wYXJlbnQudW5jeWNsZSgpO1xuICAgICAgICAgICAgICAgIGN5Y2xlRWRnZU5vZGUuX2xlbmd0aCA9XG4gICAgICAgICAgICAgICAgICAgIGN5Y2xlRWRnZU5vZGUuX3BhcmVudC5fbGVuZ3RoICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3ljbGVFZGdlTm9kZS5fcGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGN5Y2xlRWRnZU5vZGUuX2xlbmd0aCA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY3VycmVudENoaWxkTGVuZ3RoID0gY3ljbGVFZGdlTm9kZS5fbGVuZ3RoICsgMTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSBpIC0gMjsgaiA+PSAwOyAtLWopIHtcbiAgICAgICAgICAgICAgICBub2Rlc1tqXS5fbGVuZ3RoID0gY3VycmVudENoaWxkTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDaGlsZExlbmd0aCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQ2FwdHVyZWRUcmFjZS5wcm90b3R5cGUuYXR0YWNoRXh0cmFUcmFjZSA9IGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLl9fc3RhY2tDbGVhbmVkX18pIHJldHVybjtcbiAgICB0aGlzLnVuY3ljbGUoKTtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VTdGFja0FuZE1lc3NhZ2UoZXJyb3IpO1xuICAgIHZhciBtZXNzYWdlID0gcGFyc2VkLm1lc3NhZ2U7XG4gICAgdmFyIHN0YWNrcyA9IFtwYXJzZWQuc3RhY2tdO1xuXG4gICAgdmFyIHRyYWNlID0gdGhpcztcbiAgICB3aGlsZSAodHJhY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGFja3MucHVzaChjbGVhblN0YWNrKHRyYWNlLnN0YWNrLnNwbGl0KFwiXFxuXCIpKSk7XG4gICAgICAgIHRyYWNlID0gdHJhY2UuX3BhcmVudDtcbiAgICB9XG4gICAgcmVtb3ZlQ29tbW9uUm9vdHMoc3RhY2tzKTtcbiAgICByZW1vdmVEdXBsaWNhdGVPckVtcHR5SnVtcHMoc3RhY2tzKTtcbiAgICB1dGlsLm5vdEVudW1lcmFibGVQcm9wKGVycm9yLCBcInN0YWNrXCIsIHJlY29uc3RydWN0U3RhY2sobWVzc2FnZSwgc3RhY2tzKSk7XG4gICAgdXRpbC5ub3RFbnVtZXJhYmxlUHJvcChlcnJvciwgXCJfX3N0YWNrQ2xlYW5lZF9fXCIsIHRydWUpO1xufTtcblxudmFyIGNhcHR1cmVTdGFja1RyYWNlID0gKGZ1bmN0aW9uIHN0YWNrRGV0ZWN0aW9uKCkge1xuICAgIHZhciB2OHN0YWNrRnJhbWVQYXR0ZXJuID0gL15cXHMqYXRcXHMqLztcbiAgICB2YXIgdjhzdGFja0Zvcm1hdHRlciA9IGZ1bmN0aW9uKHN0YWNrLCBlcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrID09PSBcInN0cmluZ1wiKSByZXR1cm4gc3RhY2s7XG5cbiAgICAgICAgaWYgKGVycm9yLm5hbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgZXJyb3IubWVzc2FnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3IudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0Tm9uRXJyb3IoZXJyb3IpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICB0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgKz0gNjtcbiAgICAgICAgc3RhY2tGcmFtZVBhdHRlcm4gPSB2OHN0YWNrRnJhbWVQYXR0ZXJuO1xuICAgICAgICBmb3JtYXRTdGFjayA9IHY4c3RhY2tGb3JtYXR0ZXI7XG4gICAgICAgIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG4gICAgICAgIHNob3VsZElnbm9yZSA9IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBibHVlYmlyZEZyYW1lUGF0dGVybi50ZXN0KGxpbmUpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24ocmVjZWl2ZXIsIGlnbm9yZVVudGlsKSB7XG4gICAgICAgICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgKz0gNjtcbiAgICAgICAgICAgIGNhcHR1cmVTdGFja1RyYWNlKHJlY2VpdmVyLCBpZ25vcmVVbnRpbCk7XG4gICAgICAgICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgLT0gNjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuXG4gICAgaWYgKHR5cGVvZiBlcnIuc3RhY2sgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgZXJyLnN0YWNrLnNwbGl0KFwiXFxuXCIpWzBdLmluZGV4T2YoXCJzdGFja0RldGVjdGlvbkBcIikgPj0gMCkge1xuICAgICAgICBzdGFja0ZyYW1lUGF0dGVybiA9IC9ALztcbiAgICAgICAgZm9ybWF0U3RhY2sgPSB2OHN0YWNrRm9ybWF0dGVyO1xuICAgICAgICBpbmRlbnRTdGFja0ZyYW1lcyA9IHRydWU7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBjYXB0dXJlU3RhY2tUcmFjZShvKSB7XG4gICAgICAgICAgICBvLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGhhc1N0YWNrQWZ0ZXJUaHJvdztcbiAgICB0cnkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfVxuICAgIGNhdGNoKGUpIHtcbiAgICAgICAgaGFzU3RhY2tBZnRlclRocm93ID0gKFwic3RhY2tcIiBpbiBlKTtcbiAgICB9XG4gICAgaWYgKCEoXCJzdGFja1wiIGluIGVycikgJiYgaGFzU3RhY2tBZnRlclRocm93ICYmXG4gICAgICAgIHR5cGVvZiBFcnJvci5zdGFja1RyYWNlTGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgc3RhY2tGcmFtZVBhdHRlcm4gPSB2OHN0YWNrRnJhbWVQYXR0ZXJuO1xuICAgICAgICBmb3JtYXRTdGFjayA9IHY4c3RhY2tGb3JtYXR0ZXI7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBjYXB0dXJlU3RhY2tUcmFjZShvKSB7XG4gICAgICAgICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgKz0gNjtcbiAgICAgICAgICAgIHRyeSB7IHRocm93IG5ldyBFcnJvcigpOyB9XG4gICAgICAgICAgICBjYXRjaChlKSB7IG8uc3RhY2sgPSBlLnN0YWNrOyB9XG4gICAgICAgICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgLT0gNjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3JtYXRTdGFjayA9IGZ1bmN0aW9uKHN0YWNrLCBlcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrID09PSBcInN0cmluZ1wiKSByZXR1cm4gc3RhY2s7XG5cbiAgICAgICAgaWYgKCh0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBlcnJvciA9PT0gXCJmdW5jdGlvblwiKSAmJlxuICAgICAgICAgICAgZXJyb3IubmFtZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXROb25FcnJvcihlcnJvcik7XG4gICAgfTtcblxuICAgIHJldHVybiBudWxsO1xuXG59KShbXSk7XG5cbmlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY29uc29sZS53YXJuICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH07XG4gICAgaWYgKHV0aWwuaXNOb2RlICYmIHByb2Nlc3Muc3RkZXJyLmlzVFRZKSB7XG4gICAgICAgIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGlzU29mdCkge1xuICAgICAgICAgICAgdmFyIGNvbG9yID0gaXNTb2Z0ID8gXCJcXHUwMDFiWzMzbVwiIDogXCJcXHUwMDFiWzMxbVwiO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGNvbG9yICsgbWVzc2FnZSArIFwiXFx1MDAxYlswbVxcblwiKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCF1dGlsLmlzTm9kZSAmJiB0eXBlb2YgKG5ldyBFcnJvcigpLnN0YWNrKSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbihtZXNzYWdlLCBpc1NvZnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIiVjXCIgKyBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTb2Z0ID8gXCJjb2xvcjogZGFya29yYW5nZVwiIDogXCJjb2xvcjogcmVkXCIpO1xuICAgICAgICB9O1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICB3YXJuaW5nczogd2FybmluZ3MsXG4gICAgbG9uZ1N0YWNrVHJhY2VzOiBmYWxzZSxcbiAgICBjYW5jZWxsYXRpb246IGZhbHNlLFxuICAgIG1vbml0b3Jpbmc6IGZhbHNlLFxuICAgIGFzeW5jSG9va3M6IGZhbHNlXG59O1xuXG5pZiAobG9uZ1N0YWNrVHJhY2VzKSBQcm9taXNlLmxvbmdTdGFja1RyYWNlcygpO1xuXG5yZXR1cm4ge1xuICAgIGFzeW5jSG9va3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmFzeW5jSG9va3M7XG4gICAgfSxcbiAgICBsb25nU3RhY2tUcmFjZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmxvbmdTdGFja1RyYWNlcztcbiAgICB9LFxuICAgIHdhcm5pbmdzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy53YXJuaW5ncztcbiAgICB9LFxuICAgIGNhbmNlbGxhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb25maWcuY2FuY2VsbGF0aW9uO1xuICAgIH0sXG4gICAgbW9uaXRvcmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb25maWcubW9uaXRvcmluZztcbiAgICB9LFxuICAgIHByb3BhZ2F0ZUZyb21GdW5jdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGcm9tRnVuY3Rpb247XG4gICAgfSxcbiAgICBib3VuZFZhbHVlRnVuY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYm91bmRWYWx1ZUZ1bmN0aW9uO1xuICAgIH0sXG4gICAgY2hlY2tGb3Jnb3R0ZW5SZXR1cm5zOiBjaGVja0ZvcmdvdHRlblJldHVybnMsXG4gICAgc2V0Qm91bmRzOiBzZXRCb3VuZHMsXG4gICAgd2Fybjogd2FybixcbiAgICBkZXByZWNhdGVkOiBkZXByZWNhdGVkLFxuICAgIENhcHR1cmVkVHJhY2U6IENhcHR1cmVkVHJhY2UsXG4gICAgZmlyZURvbUV2ZW50OiBmaXJlRG9tRXZlbnQsXG4gICAgZmlyZUdsb2JhbEV2ZW50OiBmaXJlR2xvYmFsRXZlbnRcbn07XG59O1xuXG59LHtcIi4vZXJyb3JzXCI6MTIsXCIuL2VzNVwiOjEzLFwiLi91dGlsXCI6MzZ9XSwxMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSkge1xuZnVuY3Rpb24gcmV0dXJuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG59XG5mdW5jdGlvbiB0aHJvd2VyKCkge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xufVxuXG5Qcm9taXNlLnByb3RvdHlwZVtcInJldHVyblwiXSA9XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuUmV0dXJuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkgdmFsdWUuc3VwcHJlc3NVbmhhbmRsZWRSZWplY3Rpb25zKCk7XG4gICAgcmV0dXJuIHRoaXMuX3RoZW4oXG4gICAgICAgIHJldHVybmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwge3ZhbHVlOiB2YWx1ZX0sIHVuZGVmaW5lZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVtcInRocm93XCJdID1cblByb21pc2UucHJvdG90eXBlLnRoZW5UaHJvdyA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gdGhpcy5fdGhlbihcbiAgICAgICAgdGhyb3dlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHtyZWFzb246IHJlYXNvbn0sIHVuZGVmaW5lZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5jYXRjaFRocm93ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW4oXG4gICAgICAgICAgICB1bmRlZmluZWQsIHRocm93ZXIsIHVuZGVmaW5lZCwge3JlYXNvbjogcmVhc29ufSwgdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX3JlYXNvbiA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbigpIHt0aHJvdyBfcmVhc29uO307XG4gICAgICAgIHJldHVybiB0aGlzLmNhdWdodChyZWFzb24sIGhhbmRsZXIpO1xuICAgIH1cbn07XG5cblByb21pc2UucHJvdG90eXBlLmNhdGNoUmV0dXJuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPD0gMSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB2YWx1ZS5zdXBwcmVzc1VuaGFuZGxlZFJlamVjdGlvbnMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW4oXG4gICAgICAgICAgICB1bmRlZmluZWQsIHJldHVybmVyLCB1bmRlZmluZWQsIHt2YWx1ZTogdmFsdWV9LCB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfdmFsdWUgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIGlmIChfdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSBfdmFsdWUuc3VwcHJlc3NVbmhhbmRsZWRSZWplY3Rpb25zKCk7XG4gICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24oKSB7cmV0dXJuIF92YWx1ZTt9O1xuICAgICAgICByZXR1cm4gdGhpcy5jYXVnaHQodmFsdWUsIGhhbmRsZXIpO1xuICAgIH1cbn07XG59O1xuXG59LHt9XSwxMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgSU5URVJOQUwpIHtcbnZhciBQcm9taXNlUmVkdWNlID0gUHJvbWlzZS5yZWR1Y2U7XG52YXIgUHJvbWlzZUFsbCA9IFByb21pc2UuYWxsO1xuXG5mdW5jdGlvbiBwcm9taXNlQWxsVGhpcygpIHtcbiAgICByZXR1cm4gUHJvbWlzZUFsbCh0aGlzKTtcbn1cblxuZnVuY3Rpb24gUHJvbWlzZU1hcFNlcmllcyhwcm9taXNlcywgZm4pIHtcbiAgICByZXR1cm4gUHJvbWlzZVJlZHVjZShwcm9taXNlcywgZm4sIElOVEVSTkFMLCBJTlRFUk5BTCk7XG59XG5cblByb21pc2UucHJvdG90eXBlLmVhY2ggPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gUHJvbWlzZVJlZHVjZSh0aGlzLCBmbiwgSU5URVJOQUwsIDApXG4gICAgICAgICAgICAgIC5fdGhlbihwcm9taXNlQWxsVGhpcywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMsIHVuZGVmaW5lZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5tYXBTZXJpZXMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gUHJvbWlzZVJlZHVjZSh0aGlzLCBmbiwgSU5URVJOQUwsIElOVEVSTkFMKTtcbn07XG5cblByb21pc2UuZWFjaCA9IGZ1bmN0aW9uIChwcm9taXNlcywgZm4pIHtcbiAgICByZXR1cm4gUHJvbWlzZVJlZHVjZShwcm9taXNlcywgZm4sIElOVEVSTkFMLCAwKVxuICAgICAgICAgICAgICAuX3RoZW4ocHJvbWlzZUFsbFRoaXMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwcm9taXNlcywgdW5kZWZpbmVkKTtcbn07XG5cblByb21pc2UubWFwU2VyaWVzID0gUHJvbWlzZU1hcFNlcmllcztcbn07XG5cblxufSx7fV0sMTI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZXM1ID0gX2RlcmVxXyhcIi4vZXM1XCIpO1xudmFyIE9iamVjdGZyZWV6ZSA9IGVzNS5mcmVlemU7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgaW5oZXJpdHMgPSB1dGlsLmluaGVyaXRzO1xudmFyIG5vdEVudW1lcmFibGVQcm9wID0gdXRpbC5ub3RFbnVtZXJhYmxlUHJvcDtcblxuZnVuY3Rpb24gc3ViRXJyb3IobmFtZVByb3BlcnR5LCBkZWZhdWx0TWVzc2FnZSkge1xuICAgIGZ1bmN0aW9uIFN1YkVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN1YkVycm9yKSkgcmV0dXJuIG5ldyBTdWJFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgbm90RW51bWVyYWJsZVByb3AodGhpcywgXCJtZXNzYWdlXCIsXG4gICAgICAgICAgICB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UgOiBkZWZhdWx0TWVzc2FnZSk7XG4gICAgICAgIG5vdEVudW1lcmFibGVQcm9wKHRoaXMsIFwibmFtZVwiLCBuYW1lUHJvcGVydHkpO1xuICAgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgRXJyb3IuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbmhlcml0cyhTdWJFcnJvciwgRXJyb3IpO1xuICAgIHJldHVybiBTdWJFcnJvcjtcbn1cblxudmFyIF9UeXBlRXJyb3IsIF9SYW5nZUVycm9yO1xudmFyIFdhcm5pbmcgPSBzdWJFcnJvcihcIldhcm5pbmdcIiwgXCJ3YXJuaW5nXCIpO1xudmFyIENhbmNlbGxhdGlvbkVycm9yID0gc3ViRXJyb3IoXCJDYW5jZWxsYXRpb25FcnJvclwiLCBcImNhbmNlbGxhdGlvbiBlcnJvclwiKTtcbnZhciBUaW1lb3V0RXJyb3IgPSBzdWJFcnJvcihcIlRpbWVvdXRFcnJvclwiLCBcInRpbWVvdXQgZXJyb3JcIik7XG52YXIgQWdncmVnYXRlRXJyb3IgPSBzdWJFcnJvcihcIkFnZ3JlZ2F0ZUVycm9yXCIsIFwiYWdncmVnYXRlIGVycm9yXCIpO1xudHJ5IHtcbiAgICBfVHlwZUVycm9yID0gVHlwZUVycm9yO1xuICAgIF9SYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbn0gY2F0Y2goZSkge1xuICAgIF9UeXBlRXJyb3IgPSBzdWJFcnJvcihcIlR5cGVFcnJvclwiLCBcInR5cGUgZXJyb3JcIik7XG4gICAgX1JhbmdlRXJyb3IgPSBzdWJFcnJvcihcIlJhbmdlRXJyb3JcIiwgXCJyYW5nZSBlcnJvclwiKTtcbn1cblxudmFyIG1ldGhvZHMgPSAoXCJqb2luIHBvcCBwdXNoIHNoaWZ0IHVuc2hpZnQgc2xpY2UgZmlsdGVyIGZvckVhY2ggc29tZSBcIiArXG4gICAgXCJldmVyeSBtYXAgaW5kZXhPZiBsYXN0SW5kZXhPZiByZWR1Y2UgcmVkdWNlUmlnaHQgc29ydCByZXZlcnNlXCIpLnNwbGl0KFwiIFwiKTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHR5cGVvZiBBcnJheS5wcm90b3R5cGVbbWV0aG9kc1tpXV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGVbbWV0aG9kc1tpXV0gPSBBcnJheS5wcm90b3R5cGVbbWV0aG9kc1tpXV07XG4gICAgfVxufVxuXG5lczUuZGVmaW5lUHJvcGVydHkoQWdncmVnYXRlRXJyb3IucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgdmFsdWU6IDAsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbkFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZVtcImlzT3BlcmF0aW9uYWxcIl0gPSB0cnVlO1xudmFyIGxldmVsID0gMDtcbkFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbmRlbnQgPSBBcnJheShsZXZlbCAqIDQgKyAxKS5qb2luKFwiIFwiKTtcbiAgICB2YXIgcmV0ID0gXCJcXG5cIiArIGluZGVudCArIFwiQWdncmVnYXRlRXJyb3Igb2Y6XCIgKyBcIlxcblwiO1xuICAgIGxldmVsKys7XG4gICAgaW5kZW50ID0gQXJyYXkobGV2ZWwgKiA0ICsgMSkuam9pbihcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzdHIgPSB0aGlzW2ldID09PSB0aGlzID8gXCJbQ2lyY3VsYXIgQWdncmVnYXRlRXJyb3JdXCIgOiB0aGlzW2ldICsgXCJcIjtcbiAgICAgICAgdmFyIGxpbmVzID0gc3RyLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBsaW5lc1tqXSA9IGluZGVudCArIGxpbmVzW2pdO1xuICAgICAgICB9XG4gICAgICAgIHN0ciA9IGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIHJldCArPSBzdHIgKyBcIlxcblwiO1xuICAgIH1cbiAgICBsZXZlbC0tO1xuICAgIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBPcGVyYXRpb25hbEVycm9yKG1lc3NhZ2UpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgT3BlcmF0aW9uYWxFcnJvcikpXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0aW9uYWxFcnJvcihtZXNzYWdlKTtcbiAgICBub3RFbnVtZXJhYmxlUHJvcCh0aGlzLCBcIm5hbWVcIiwgXCJPcGVyYXRpb25hbEVycm9yXCIpO1xuICAgIG5vdEVudW1lcmFibGVQcm9wKHRoaXMsIFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICB0aGlzLmNhdXNlID0gbWVzc2FnZTtcbiAgICB0aGlzW1wiaXNPcGVyYXRpb25hbFwiXSA9IHRydWU7XG5cbiAgICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG5vdEVudW1lcmFibGVQcm9wKHRoaXMsIFwibWVzc2FnZVwiLCBtZXNzYWdlLm1lc3NhZ2UpO1xuICAgICAgICBub3RFbnVtZXJhYmxlUHJvcCh0aGlzLCBcInN0YWNrXCIsIG1lc3NhZ2Uuc3RhY2spO1xuICAgIH0gZWxzZSBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG59XG5pbmhlcml0cyhPcGVyYXRpb25hbEVycm9yLCBFcnJvcik7XG5cbnZhciBlcnJvclR5cGVzID0gRXJyb3JbXCJfX0JsdWViaXJkRXJyb3JUeXBlc19fXCJdO1xuaWYgKCFlcnJvclR5cGVzKSB7XG4gICAgZXJyb3JUeXBlcyA9IE9iamVjdGZyZWV6ZSh7XG4gICAgICAgIENhbmNlbGxhdGlvbkVycm9yOiBDYW5jZWxsYXRpb25FcnJvcixcbiAgICAgICAgVGltZW91dEVycm9yOiBUaW1lb3V0RXJyb3IsXG4gICAgICAgIE9wZXJhdGlvbmFsRXJyb3I6IE9wZXJhdGlvbmFsRXJyb3IsXG4gICAgICAgIFJlamVjdGlvbkVycm9yOiBPcGVyYXRpb25hbEVycm9yLFxuICAgICAgICBBZ2dyZWdhdGVFcnJvcjogQWdncmVnYXRlRXJyb3JcbiAgICB9KTtcbiAgICBlczUuZGVmaW5lUHJvcGVydHkoRXJyb3IsIFwiX19CbHVlYmlyZEVycm9yVHlwZXNfX1wiLCB7XG4gICAgICAgIHZhbHVlOiBlcnJvclR5cGVzLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEVycm9yOiBFcnJvcixcbiAgICBUeXBlRXJyb3I6IF9UeXBlRXJyb3IsXG4gICAgUmFuZ2VFcnJvcjogX1JhbmdlRXJyb3IsXG4gICAgQ2FuY2VsbGF0aW9uRXJyb3I6IGVycm9yVHlwZXMuQ2FuY2VsbGF0aW9uRXJyb3IsXG4gICAgT3BlcmF0aW9uYWxFcnJvcjogZXJyb3JUeXBlcy5PcGVyYXRpb25hbEVycm9yLFxuICAgIFRpbWVvdXRFcnJvcjogZXJyb3JUeXBlcy5UaW1lb3V0RXJyb3IsXG4gICAgQWdncmVnYXRlRXJyb3I6IGVycm9yVHlwZXMuQWdncmVnYXRlRXJyb3IsXG4gICAgV2FybmluZzogV2FybmluZ1xufTtcblxufSx7XCIuL2VzNVwiOjEzLFwiLi91dGlsXCI6MzZ9XSwxMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG52YXIgaXNFUzUgPSAoZnVuY3Rpb24oKXtcbiAgICBcInVzZSBzdHJpY3RcIjtcbiAgICByZXR1cm4gdGhpcyA9PT0gdW5kZWZpbmVkO1xufSkoKTtcblxuaWYgKGlzRVM1KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGZyZWV6ZTogT2JqZWN0LmZyZWV6ZSxcbiAgICAgICAgZGVmaW5lUHJvcGVydHk6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSxcbiAgICAgICAgZ2V0RGVzY3JpcHRvcjogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgICAgICAga2V5czogT2JqZWN0LmtleXMsXG4gICAgICAgIG5hbWVzOiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgICAgICAgZ2V0UHJvdG90eXBlT2Y6IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICAgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSxcbiAgICAgICAgaXNFUzU6IGlzRVM1LFxuICAgICAgICBwcm9wZXJ0eUlzV3JpdGFibGU6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XG4gICAgICAgICAgICByZXR1cm4gISEoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci53cml0YWJsZSB8fCBkZXNjcmlwdG9yLnNldCk7XG4gICAgICAgIH1cbiAgICB9O1xufSBlbHNlIHtcbiAgICB2YXIgaGFzID0ge30uaGFzT3duUHJvcGVydHk7XG4gICAgdmFyIHN0ciA9IHt9LnRvU3RyaW5nO1xuICAgIHZhciBwcm90byA9IHt9LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBPYmplY3RLZXlzID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgdmFyIHJldCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbykge1xuICAgICAgICAgICAgaWYgKGhhcy5jYWxsKG8sIGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcblxuICAgIHZhciBPYmplY3RHZXREZXNjcmlwdG9yID0gZnVuY3Rpb24obywga2V5KSB7XG4gICAgICAgIHJldHVybiB7dmFsdWU6IG9ba2V5XX07XG4gICAgfTtcblxuICAgIHZhciBPYmplY3REZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvLCBrZXksIGRlc2MpIHtcbiAgICAgICAgb1trZXldID0gZGVzYy52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcblxuICAgIHZhciBPYmplY3RGcmVlemUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcblxuICAgIHZhciBPYmplY3RHZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qob2JqKS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm90bztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgQXJyYXlJc0FycmF5ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ci5jYWxsKG9iaikgPT09IFwiW29iamVjdCBBcnJheV1cIjtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzQXJyYXk6IEFycmF5SXNBcnJheSxcbiAgICAgICAga2V5czogT2JqZWN0S2V5cyxcbiAgICAgICAgbmFtZXM6IE9iamVjdEtleXMsXG4gICAgICAgIGRlZmluZVByb3BlcnR5OiBPYmplY3REZWZpbmVQcm9wZXJ0eSxcbiAgICAgICAgZ2V0RGVzY3JpcHRvcjogT2JqZWN0R2V0RGVzY3JpcHRvcixcbiAgICAgICAgZnJlZXplOiBPYmplY3RGcmVlemUsXG4gICAgICAgIGdldFByb3RvdHlwZU9mOiBPYmplY3RHZXRQcm90b3R5cGVPZixcbiAgICAgICAgaXNFUzU6IGlzRVM1LFxuICAgICAgICBwcm9wZXJ0eUlzV3JpdGFibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG59LHt9XSwxNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgSU5URVJOQUwpIHtcbnZhciBQcm9taXNlTWFwID0gUHJvbWlzZS5tYXA7XG5cblByb21pc2UucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChmbiwgb3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlTWFwKHRoaXMsIGZuLCBvcHRpb25zLCBJTlRFUk5BTCk7XG59O1xuXG5Qcm9taXNlLmZpbHRlciA9IGZ1bmN0aW9uIChwcm9taXNlcywgZm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZU1hcChwcm9taXNlcywgZm4sIG9wdGlvbnMsIElOVEVSTkFMKTtcbn07XG59O1xuXG59LHt9XSwxNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgdHJ5Q29udmVydFRvUHJvbWlzZSwgTkVYVF9GSUxURVIpIHtcbnZhciB1dGlsID0gX2RlcmVxXyhcIi4vdXRpbFwiKTtcbnZhciBDYW5jZWxsYXRpb25FcnJvciA9IFByb21pc2UuQ2FuY2VsbGF0aW9uRXJyb3I7XG52YXIgZXJyb3JPYmogPSB1dGlsLmVycm9yT2JqO1xudmFyIGNhdGNoRmlsdGVyID0gX2RlcmVxXyhcIi4vY2F0Y2hfZmlsdGVyXCIpKE5FWFRfRklMVEVSKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2hIYW5kbGVyQ29udGV4dChwcm9taXNlLCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgdGhpcy5jYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbFByb21pc2UgPSBudWxsO1xufVxuXG5QYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0LnByb3RvdHlwZS5pc0ZpbmFsbHlIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gMDtcbn07XG5cbmZ1bmN0aW9uIEZpbmFsbHlIYW5kbGVyQ2FuY2VsUmVhY3Rpb24oZmluYWxseUhhbmRsZXIpIHtcbiAgICB0aGlzLmZpbmFsbHlIYW5kbGVyID0gZmluYWxseUhhbmRsZXI7XG59XG5cbkZpbmFsbHlIYW5kbGVyQ2FuY2VsUmVhY3Rpb24ucHJvdG90eXBlLl9yZXN1bHRDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICBjaGVja0NhbmNlbCh0aGlzLmZpbmFsbHlIYW5kbGVyKTtcbn07XG5cbmZ1bmN0aW9uIGNoZWNrQ2FuY2VsKGN0eCwgcmVhc29uKSB7XG4gICAgaWYgKGN0eC5jYW5jZWxQcm9taXNlICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjdHguY2FuY2VsUHJvbWlzZS5fcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdHguY2FuY2VsUHJvbWlzZS5fY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmNhbmNlbFByb21pc2UgPSBudWxsO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzdWNjZWVkKCkge1xuICAgIHJldHVybiBmaW5hbGx5SGFuZGxlci5jYWxsKHRoaXMsIHRoaXMucHJvbWlzZS5fdGFyZ2V0KCkuX3NldHRsZWRWYWx1ZSgpKTtcbn1cbmZ1bmN0aW9uIGZhaWwocmVhc29uKSB7XG4gICAgaWYgKGNoZWNrQ2FuY2VsKHRoaXMsIHJlYXNvbikpIHJldHVybjtcbiAgICBlcnJvck9iai5lID0gcmVhc29uO1xuICAgIHJldHVybiBlcnJvck9iajtcbn1cbmZ1bmN0aW9uIGZpbmFsbHlIYW5kbGVyKHJlYXNvbk9yVmFsdWUpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcbiAgICB2YXIgaGFuZGxlciA9IHRoaXMuaGFuZGxlcjtcblxuICAgIGlmICghdGhpcy5jYWxsZWQpIHtcbiAgICAgICAgdGhpcy5jYWxsZWQgPSB0cnVlO1xuICAgICAgICB2YXIgcmV0ID0gdGhpcy5pc0ZpbmFsbHlIYW5kbGVyKClcbiAgICAgICAgICAgID8gaGFuZGxlci5jYWxsKHByb21pc2UuX2JvdW5kVmFsdWUoKSlcbiAgICAgICAgICAgIDogaGFuZGxlci5jYWxsKHByb21pc2UuX2JvdW5kVmFsdWUoKSwgcmVhc29uT3JWYWx1ZSk7XG4gICAgICAgIGlmIChyZXQgPT09IE5FWFRfRklMVEVSKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9IGVsc2UgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9taXNlLl9zZXRSZXR1cm5lZE5vblVuZGVmaW5lZCgpO1xuICAgICAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocmV0LCBwcm9taXNlKTtcbiAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsUHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UuX2lzQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFzb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDYW5jZWxsYXRpb25FcnJvcihcImxhdGUgY2FuY2VsbGF0aW9uIG9ic2VydmVyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fYXR0YWNoRXh0cmFUcmFjZShyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JPYmouZSA9IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck9iajtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXliZVByb21pc2UuaXNQZW5kaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZS5fYXR0YWNoQ2FuY2VsbGF0aW9uQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbmFsbHlIYW5kbGVyQ2FuY2VsUmVhY3Rpb24odGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtYXliZVByb21pc2UuX3RoZW4oXG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWQsIGZhaWwsIHVuZGVmaW5lZCwgdGhpcywgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9taXNlLmlzUmVqZWN0ZWQoKSkge1xuICAgICAgICBjaGVja0NhbmNlbCh0aGlzKTtcbiAgICAgICAgZXJyb3JPYmouZSA9IHJlYXNvbk9yVmFsdWU7XG4gICAgICAgIHJldHVybiBlcnJvck9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja0NhbmNlbCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJlYXNvbk9yVmFsdWU7XG4gICAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZS5fcGFzc1Rocm91Z2ggPSBmdW5jdGlvbihoYW5kbGVyLCB0eXBlLCBzdWNjZXNzLCBmYWlsKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0aGlzLnRoZW4oKTtcbiAgICByZXR1cm4gdGhpcy5fdGhlbihzdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgIGZhaWwsXG4gICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0KHRoaXMsIHR5cGUsIGhhbmRsZXIpLFxuICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5sYXN0bHkgPVxuUHJvbWlzZS5wcm90b3R5cGVbXCJmaW5hbGx5XCJdID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFzc1Rocm91Z2goaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseUhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHlIYW5kbGVyKTtcbn07XG5cblxuUHJvbWlzZS5wcm90b3R5cGUudGFwID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFzc1Rocm91Z2goaGFuZGxlciwgMSwgZmluYWxseUhhbmRsZXIpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUudGFwQ2F0Y2ggPSBmdW5jdGlvbiAoaGFuZGxlck9yUHJlZGljYXRlKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYobGVuID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXNzVGhyb3VnaChoYW5kbGVyT3JQcmVkaWNhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseUhhbmRsZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICB2YXIgY2F0Y2hJbnN0YW5jZXMgPSBuZXcgQXJyYXkobGVuIC0gMSksXG4gICAgICAgICAgICBqID0gMCwgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbiAtIDE7ICsraSkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBpZiAodXRpbC5pc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgICAgIGNhdGNoSW5zdGFuY2VzW2orK10gPSBpdGVtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXBDYXRjaCBzdGF0ZW1lbnQgcHJlZGljYXRlOiBcIlxuICAgICAgICAgICAgICAgICAgICArIFwiZXhwZWN0aW5nIGFuIG9iamVjdCBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyhpdGVtKVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoSW5zdGFuY2VzLmxlbmd0aCA9IGo7XG4gICAgICAgIHZhciBoYW5kbGVyID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFzc1Rocm91Z2goY2F0Y2hGaWx0ZXIoY2F0Y2hJbnN0YW5jZXMsIGhhbmRsZXIsIHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHlIYW5kbGVyKTtcbiAgICB9XG5cbn07XG5cbnJldHVybiBQYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0O1xufTtcblxufSx7XCIuL2NhdGNoX2ZpbHRlclwiOjcsXCIuL3V0aWxcIjozNn1dLDE2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlSZWplY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkFMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlDb252ZXJ0VG9Qcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBQcm94eWFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKSB7XG52YXIgZXJyb3JzID0gX2RlcmVxXyhcIi4vZXJyb3JzXCIpO1xudmFyIFR5cGVFcnJvciA9IGVycm9ycy5UeXBlRXJyb3I7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgZXJyb3JPYmogPSB1dGlsLmVycm9yT2JqO1xudmFyIHRyeUNhdGNoID0gdXRpbC50cnlDYXRjaDtcbnZhciB5aWVsZEhhbmRsZXJzID0gW107XG5cbmZ1bmN0aW9uIHByb21pc2VGcm9tWWllbGRIYW5kbGVyKHZhbHVlLCB5aWVsZEhhbmRsZXJzLCB0cmFjZVBhcmVudCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeWllbGRIYW5kbGVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICB0cmFjZVBhcmVudC5fcHVzaENvbnRleHQoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHlpZWxkSGFuZGxlcnNbaV0pKHZhbHVlKTtcbiAgICAgICAgdHJhY2VQYXJlbnQuX3BvcENvbnRleHQoKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZXJyb3JPYmopIHtcbiAgICAgICAgICAgIHRyYWNlUGFyZW50Ll9wdXNoQ29udGV4dCgpO1xuICAgICAgICAgICAgdmFyIHJldCA9IFByb21pc2UucmVqZWN0KGVycm9yT2JqLmUpO1xuICAgICAgICAgICAgdHJhY2VQYXJlbnQuX3BvcENvbnRleHQoKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocmVzdWx0LCB0cmFjZVBhcmVudCk7XG4gICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSByZXR1cm4gbWF5YmVQcm9taXNlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gUHJvbWlzZVNwYXduKGdlbmVyYXRvckZ1bmN0aW9uLCByZWNlaXZlciwgeWllbGRIYW5kbGVyLCBzdGFjaykge1xuICAgIGlmIChkZWJ1Zy5jYW5jZWxsYXRpb24oKSkge1xuICAgICAgICB2YXIgaW50ZXJuYWwgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgICAgIHZhciBfZmluYWxseVByb21pc2UgPSB0aGlzLl9maW5hbGx5UHJvbWlzZSA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IGludGVybmFsLmxhc3RseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmluYWxseVByb21pc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBpbnRlcm5hbC5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICAgICAgaW50ZXJuYWwuX3NldE9uQ2FuY2VsKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwcm9taXNlID0gdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICAgICAgcHJvbWlzZS5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLl9nZW5lcmF0b3JGdW5jdGlvbiA9IGdlbmVyYXRvckZ1bmN0aW9uO1xuICAgIHRoaXMuX3JlY2VpdmVyID0gcmVjZWl2ZXI7XG4gICAgdGhpcy5fZ2VuZXJhdG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3lpZWxkSGFuZGxlcnMgPSB0eXBlb2YgeWllbGRIYW5kbGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBbeWllbGRIYW5kbGVyXS5jb25jYXQoeWllbGRIYW5kbGVycylcbiAgICAgICAgOiB5aWVsZEhhbmRsZXJzO1xuICAgIHRoaXMuX3lpZWxkZWRQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9jYW5jZWxsYXRpb25QaGFzZSA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhQcm9taXNlU3Bhd24sIFByb3h5YWJsZSk7XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX2lzUmVzb2x2ZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZSA9PT0gbnVsbDtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wcm9taXNlID0gdGhpcy5fZ2VuZXJhdG9yID0gbnVsbDtcbiAgICBpZiAoZGVidWcuY2FuY2VsbGF0aW9uKCkgJiYgdGhpcy5fZmluYWxseVByb21pc2UgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZmluYWxseVByb21pc2UuX2Z1bGZpbGwoKTtcbiAgICAgICAgdGhpcy5fZmluYWxseVByb21pc2UgPSBudWxsO1xuICAgIH1cbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3Byb21pc2VDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5faXNSZXNvbHZlZCgpKSByZXR1cm47XG4gICAgdmFyIGltcGxlbWVudHNSZXR1cm4gPSB0eXBlb2YgdGhpcy5fZ2VuZXJhdG9yW1wicmV0dXJuXCJdICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoIWltcGxlbWVudHNSZXR1cm4pIHtcbiAgICAgICAgdmFyIHJlYXNvbiA9IG5ldyBQcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yKFxuICAgICAgICAgICAgXCJnZW5lcmF0b3IgLnJldHVybigpIHNlbnRpbmVsXCIpO1xuICAgICAgICBQcm9taXNlLmNvcm91dGluZS5yZXR1cm5TZW50aW5lbCA9IHJlYXNvbjtcbiAgICAgICAgdGhpcy5fcHJvbWlzZS5fYXR0YWNoRXh0cmFUcmFjZShyZWFzb24pO1xuICAgICAgICB0aGlzLl9wcm9taXNlLl9wdXNoQ29udGV4dCgpO1xuICAgICAgICByZXN1bHQgPSB0cnlDYXRjaCh0aGlzLl9nZW5lcmF0b3JbXCJ0aHJvd1wiXSkuY2FsbCh0aGlzLl9nZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pO1xuICAgICAgICB0aGlzLl9wcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcHJvbWlzZS5fcHVzaENvbnRleHQoKTtcbiAgICAgICAgcmVzdWx0ID0gdHJ5Q2F0Y2godGhpcy5fZ2VuZXJhdG9yW1wicmV0dXJuXCJdKS5jYWxsKHRoaXMuX2dlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLl9wcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgfVxuICAgIHRoaXMuX2NhbmNlbGxhdGlvblBoYXNlID0gdHJ1ZTtcbiAgICB0aGlzLl95aWVsZGVkUHJvbWlzZSA9IG51bGw7XG4gICAgdGhpcy5fY29udGludWUocmVzdWx0KTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3Byb21pc2VGdWxmaWxsZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHRoaXMuX3lpZWxkZWRQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9wcm9taXNlLl9wdXNoQ29udGV4dCgpO1xuICAgIHZhciByZXN1bHQgPSB0cnlDYXRjaCh0aGlzLl9nZW5lcmF0b3IubmV4dCkuY2FsbCh0aGlzLl9nZW5lcmF0b3IsIHZhbHVlKTtcbiAgICB0aGlzLl9wcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgdGhpcy5fY29udGludWUocmVzdWx0KTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3Byb21pc2VSZWplY3RlZCA9IGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIHRoaXMuX3lpZWxkZWRQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9wcm9taXNlLl9hdHRhY2hFeHRyYVRyYWNlKHJlYXNvbik7XG4gICAgdGhpcy5fcHJvbWlzZS5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2godGhpcy5fZ2VuZXJhdG9yW1widGhyb3dcIl0pXG4gICAgICAgIC5jYWxsKHRoaXMuX2dlbmVyYXRvciwgcmVhc29uKTtcbiAgICB0aGlzLl9wcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgdGhpcy5fY29udGludWUocmVzdWx0KTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl95aWVsZGVkUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLl95aWVsZGVkUHJvbWlzZTtcbiAgICAgICAgdGhpcy5feWllbGRlZFByb21pc2UgPSBudWxsO1xuICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgIH1cbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUucHJvbWlzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3J1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9nZW5lcmF0b3IgPSB0aGlzLl9nZW5lcmF0b3JGdW5jdGlvbi5jYWxsKHRoaXMuX3JlY2VpdmVyKTtcbiAgICB0aGlzLl9yZWNlaXZlciA9XG4gICAgICAgIHRoaXMuX2dlbmVyYXRvckZ1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Byb21pc2VGdWxmaWxsZWQodW5kZWZpbmVkKTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX2NvbnRpbnVlID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgIHZhciBwcm9taXNlID0gdGhpcy5fcHJvbWlzZTtcbiAgICBpZiAocmVzdWx0ID09PSBlcnJvck9iaikge1xuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XG4gICAgICAgIGlmICh0aGlzLl9jYW5jZWxsYXRpb25QaGFzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS5fcmVqZWN0Q2FsbGJhY2socmVzdWx0LmUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICBpZiAocmVzdWx0LmRvbmUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuICAgICAgICBpZiAodGhpcy5fY2FuY2VsbGF0aW9uUGhhc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2UuX3Jlc29sdmVDYWxsYmFjayh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gdHJ5Q29udmVydFRvUHJvbWlzZSh2YWx1ZSwgdGhpcy5fcHJvbWlzZSk7XG4gICAgICAgIGlmICghKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICAgICAgICBtYXliZVByb21pc2UgPVxuICAgICAgICAgICAgICAgIHByb21pc2VGcm9tWWllbGRIYW5kbGVyKG1heWJlUHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl95aWVsZEhhbmRsZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb21pc2UpO1xuICAgICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb21pc2VSZWplY3RlZChcbiAgICAgICAgICAgICAgICAgICAgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQSB2YWx1ZSAlcyB3YXMgeWllbGRlZCB0aGF0IGNvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgcHJvbWlzZVxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcXHUwMDBhXCIucmVwbGFjZShcIiVzXCIsIFN0cmluZyh2YWx1ZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRnJvbSBjb3JvdXRpbmU6XFx1MDAwYVwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YWNrLnNwbGl0KFwiXFxuXCIpLnNsaWNlKDEsIC03KS5qb2luKFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYXliZVByb21pc2UgPSBtYXliZVByb21pc2UuX3RhcmdldCgpO1xuICAgICAgICB2YXIgYml0RmllbGQgPSBtYXliZVByb21pc2UuX2JpdEZpZWxkO1xuICAgICAgICA7XG4gICAgICAgIGlmICgoKGJpdEZpZWxkICYgNTAzOTcxODQpID09PSAwKSkge1xuICAgICAgICAgICAgdGhpcy5feWllbGRlZFByb21pc2UgPSBtYXliZVByb21pc2U7XG4gICAgICAgICAgICBtYXliZVByb21pc2UuX3Byb3h5KHRoaXMsIG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAzMzU1NDQzMikgIT09IDApKSB7XG4gICAgICAgICAgICBQcm9taXNlLl9hc3luYy5pbnZva2UoXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvbWlzZUZ1bGZpbGxlZCwgdGhpcywgbWF5YmVQcm9taXNlLl92YWx1ZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgICAgICBQcm9taXNlLl9hc3luYy5pbnZva2UoXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvbWlzZVJlamVjdGVkLCB0aGlzLCBtYXliZVByb21pc2UuX3JlYXNvbigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcHJvbWlzZUNhbmNlbGxlZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuUHJvbWlzZS5jb3JvdXRpbmUgPSBmdW5jdGlvbiAoZ2VuZXJhdG9yRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGdlbmVyYXRvckZ1bmN0aW9uICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImdlbmVyYXRvckZ1bmN0aW9uIG11c3QgYmUgYSBmdW5jdGlvblxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxuICAgIHZhciB5aWVsZEhhbmRsZXIgPSBPYmplY3Qob3B0aW9ucykueWllbGRIYW5kbGVyO1xuICAgIHZhciBQcm9taXNlU3Bhd24kID0gUHJvbWlzZVNwYXduO1xuICAgIHZhciBzdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBnZW5lcmF0b3IgPSBnZW5lcmF0b3JGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB2YXIgc3Bhd24gPSBuZXcgUHJvbWlzZVNwYXduJCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgeWllbGRIYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayk7XG4gICAgICAgIHZhciByZXQgPSBzcGF3bi5wcm9taXNlKCk7XG4gICAgICAgIHNwYXduLl9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7XG4gICAgICAgIHNwYXduLl9wcm9taXNlRnVsZmlsbGVkKHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcbn07XG5cblByb21pc2UuY29yb3V0aW5lLmFkZFlpZWxkSGFuZGxlciA9IGZ1bmN0aW9uKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJleHBlY3RpbmcgYSBmdW5jdGlvbiBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyhmbikpO1xuICAgIH1cbiAgICB5aWVsZEhhbmRsZXJzLnB1c2goZm4pO1xufTtcblxuUHJvbWlzZS5zcGF3biA9IGZ1bmN0aW9uIChnZW5lcmF0b3JGdW5jdGlvbikge1xuICAgIGRlYnVnLmRlcHJlY2F0ZWQoXCJQcm9taXNlLnNwYXduKClcIiwgXCJQcm9taXNlLmNvcm91dGluZSgpXCIpO1xuICAgIGlmICh0eXBlb2YgZ2VuZXJhdG9yRnVuY3Rpb24gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gYXBpUmVqZWN0aW9uKFwiZ2VuZXJhdG9yRnVuY3Rpb24gbXVzdCBiZSBhIGZ1bmN0aW9uXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbiAgICB9XG4gICAgdmFyIHNwYXduID0gbmV3IFByb21pc2VTcGF3bihnZW5lcmF0b3JGdW5jdGlvbiwgdGhpcyk7XG4gICAgdmFyIHJldCA9IHNwYXduLnByb21pc2UoKTtcbiAgICBzcGF3bi5fcnVuKFByb21pc2Uuc3Bhd24pO1xuICAgIHJldHVybiByZXQ7XG59O1xufTtcblxufSx7XCIuL2Vycm9yc1wiOjEyLFwiLi91dGlsXCI6MzZ9XSwxNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID1cbmZ1bmN0aW9uKFByb21pc2UsIFByb21pc2VBcnJheSwgdHJ5Q29udmVydFRvUHJvbWlzZSwgSU5URVJOQUwsIGFzeW5jKSB7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgY2FuRXZhbHVhdGUgPSB1dGlsLmNhbkV2YWx1YXRlO1xudmFyIHRyeUNhdGNoID0gdXRpbC50cnlDYXRjaDtcbnZhciBlcnJvck9iaiA9IHV0aWwuZXJyb3JPYmo7XG52YXIgcmVqZWN0O1xuXG5pZiAoIXRydWUpIHtcbmlmIChjYW5FdmFsdWF0ZSkge1xuICAgIHZhciB0aGVuQ2FsbGJhY2sgPSBmdW5jdGlvbihpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXCJ2YWx1ZVwiLCBcImhvbGRlclwiLCBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICd1c2Ugc3RyaWN0JzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIGhvbGRlci5wSW5kZXggPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIGhvbGRlci5jaGVja0Z1bGZpbGxtZW50KHRoaXMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIFwiLnJlcGxhY2UoL0luZGV4L2csIGkpKTtcbiAgICB9O1xuXG4gICAgdmFyIHByb21pc2VTZXR0ZXIgPSBmdW5jdGlvbihpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXCJwcm9taXNlXCIsIFwiaG9sZGVyXCIsIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICd1c2Ugc3RyaWN0JzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIGhvbGRlci5wSW5kZXggPSBwcm9taXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIFwiLnJlcGxhY2UoL0luZGV4L2csIGkpKTtcbiAgICB9O1xuXG4gICAgdmFyIGdlbmVyYXRlSG9sZGVyQ2xhc3MgPSBmdW5jdGlvbih0b3RhbCkge1xuICAgICAgICB2YXIgcHJvcHMgPSBuZXcgQXJyYXkodG90YWwpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBwcm9wc1tpXSA9IFwidGhpcy5wXCIgKyAoaSsxKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYXNzaWdubWVudCA9IHByb3BzLmpvaW4oXCIgPSBcIikgKyBcIiA9IG51bGw7XCI7XG4gICAgICAgIHZhciBjYW5jZWxsYXRpb25Db2RlPSBcInZhciBwcm9taXNlO1xcblwiICsgcHJvcHMubWFwKGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAgICAgcHJvbWlzZSA9IFwiICsgcHJvcCArIFwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBpZiAocHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5jYW5jZWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIFwiO1xuICAgICAgICB9KS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB2YXIgcGFzc2VkQXJndW1lbnRzID0gcHJvcHMuam9pbihcIiwgXCIpO1xuICAgICAgICB2YXIgbmFtZSA9IFwiSG9sZGVyJFwiICsgdG90YWw7XG5cblxuICAgICAgICB2YXIgY29kZSA9IFwicmV0dXJuIGZ1bmN0aW9uKHRyeUNhdGNoLCBlcnJvck9iaiwgUHJvbWlzZSwgYXN5bmMpIHsgICAgXFxuXFxcbiAgICAgICAgICAgICd1c2Ugc3RyaWN0JzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIFtUaGVOYW1lXShmbikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBbVGhlUHJvcGVydGllc10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB0aGlzLmZuID0gZm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB0aGlzLmFzeW5jTmVlZGVkID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIFtUaGVOYW1lXS5wcm90b3R5cGUuX2NhbGxGdW5jdGlvbiA9IGZ1bmN0aW9uKHByb21pc2UpIHsgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBwcm9taXNlLl9wdXNoQ29udGV4dCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gdHJ5Q2F0Y2godGhpcy5mbikoW1RoZVBhc3NlZEFyZ3VtZW50c10pOyAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBwcm9taXNlLl9wb3BDb250ZXh0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBlcnJvck9iaikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fcmVqZWN0Q2FsbGJhY2socmV0LmUsIGZhbHNlKTsgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fcmVzb2x2ZUNhbGxiYWNrKHJldCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIFtUaGVOYW1lXS5wcm90b3R5cGUuY2hlY2tGdWxmaWxsbWVudCA9IGZ1bmN0aW9uKHByb21pc2UpIHsgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB2YXIgbm93ID0gKyt0aGlzLm5vdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBpZiAobm93ID09PSBbVGhlVG90YWxdKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmNOZWVkZWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLmludm9rZSh0aGlzLl9jYWxsRnVuY3Rpb24sIHRoaXMsIHByb21pc2UpOyAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxGdW5jdGlvbihwcm9taXNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIFtUaGVOYW1lXS5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkgeyAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBbQ2FuY2VsbGF0aW9uQ29kZV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIHJldHVybiBbVGhlTmFtZV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgfSh0cnlDYXRjaCwgZXJyb3JPYmosIFByb21pc2UsIGFzeW5jKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgXCI7XG5cbiAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvXFxbVGhlTmFtZVxcXS9nLCBuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcW1RoZVRvdGFsXFxdL2csIHRvdGFsKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcW1RoZVBhc3NlZEFyZ3VtZW50c1xcXS9nLCBwYXNzZWRBcmd1bWVudHMpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxbVGhlUHJvcGVydGllc1xcXS9nLCBhc3NpZ25tZW50KVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcW0NhbmNlbGxhdGlvbkNvZGVcXF0vZywgY2FuY2VsbGF0aW9uQ29kZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcInRyeUNhdGNoXCIsIFwiZXJyb3JPYmpcIiwgXCJQcm9taXNlXCIsIFwiYXN5bmNcIiwgY29kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cnlDYXRjaCwgZXJyb3JPYmosIFByb21pc2UsIGFzeW5jKTtcbiAgICB9O1xuXG4gICAgdmFyIGhvbGRlckNsYXNzZXMgPSBbXTtcbiAgICB2YXIgdGhlbkNhbGxiYWNrcyA9IFtdO1xuICAgIHZhciBwcm9taXNlU2V0dGVycyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyArK2kpIHtcbiAgICAgICAgaG9sZGVyQ2xhc3Nlcy5wdXNoKGdlbmVyYXRlSG9sZGVyQ2xhc3MoaSArIDEpKTtcbiAgICAgICAgdGhlbkNhbGxiYWNrcy5wdXNoKHRoZW5DYWxsYmFjayhpICsgMSkpO1xuICAgICAgICBwcm9taXNlU2V0dGVycy5wdXNoKHByb21pc2VTZXR0ZXIoaSArIDEpKTtcbiAgICB9XG5cbiAgICByZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHRoaXMuX3JlamVjdChyZWFzb24pO1xuICAgIH07XG59fVxuXG5Qcm9taXNlLmpvaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxhc3QgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB2YXIgZm47XG4gICAgaWYgKGxhc3QgPiAwICYmIHR5cGVvZiBhcmd1bWVudHNbbGFzdF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBmbiA9IGFyZ3VtZW50c1tsYXN0XTtcbiAgICAgICAgaWYgKCF0cnVlKSB7XG4gICAgICAgICAgICBpZiAobGFzdCA8PSA4ICYmIGNhbkV2YWx1YXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICAgICAgICAgICAgICByZXQuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgICAgICAgICAgICAgdmFyIEhvbGRlckNsYXNzID0gaG9sZGVyQ2xhc3Nlc1tsYXN0IC0gMV07XG4gICAgICAgICAgICAgICAgdmFyIGhvbGRlciA9IG5ldyBIb2xkZXJDbGFzcyhmbik7XG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoZW5DYWxsYmFja3M7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3Q7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gdHJ5Q29udmVydFRvUHJvbWlzZShhcmd1bWVudHNbaV0sIHJldCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXliZVByb21pc2UgPSBtYXliZVByb21pc2UuX3RhcmdldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdEZpZWxkID0gbWF5YmVQcm9taXNlLl9iaXRGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGJpdEZpZWxkICYgNTAzOTcxODQpID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZS5fdGhlbihjYWxsYmFja3NbaV0sIHJlamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLCByZXQsIGhvbGRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZVNldHRlcnNbaV0obWF5YmVQcm9taXNlLCBob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRlci5hc3luY05lZWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMzM1NTQ0MzIpICE9PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKHJldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZVByb21pc2UuX3ZhbHVlKCksIGhvbGRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0Ll9yZWplY3QobWF5YmVQcm9taXNlLl9yZWFzb24oKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5fY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0uY2FsbChyZXQsIG1heWJlUHJvbWlzZSwgaG9sZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcmV0Ll9pc0ZhdGVTZWFsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZGVyLmFzeW5jTmVlZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IFByb21pc2UuX2dldENvbnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRlci5mbiA9IHV0aWwuY29udGV4dEJpbmQoY29udGV4dCwgaG9sZGVyLmZuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXQuX3NldEFzeW5jR3VhcmFudGVlZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXQuX3NldE9uQ2FuY2VsKGhvbGRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7O1xuICAgIGlmIChmbikgYXJncy5wb3AoKTtcbiAgICB2YXIgcmV0ID0gbmV3IFByb21pc2VBcnJheShhcmdzKS5wcm9taXNlKCk7XG4gICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyByZXQuc3ByZWFkKGZuKSA6IHJldDtcbn07XG5cbn07XG5cbn0se1wiLi91dGlsXCI6MzZ9XSwxODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZUFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlSZWplY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUNvbnZlcnRUb1Byb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkFMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zykge1xudmFyIHV0aWwgPSBfZGVyZXFfKFwiLi91dGlsXCIpO1xudmFyIHRyeUNhdGNoID0gdXRpbC50cnlDYXRjaDtcbnZhciBlcnJvck9iaiA9IHV0aWwuZXJyb3JPYmo7XG52YXIgYXN5bmMgPSBQcm9taXNlLl9hc3luYztcblxuZnVuY3Rpb24gTWFwcGluZ1Byb21pc2VBcnJheShwcm9taXNlcywgZm4sIGxpbWl0LCBfZmlsdGVyKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciQocHJvbWlzZXMpO1xuICAgIHRoaXMuX3Byb21pc2UuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgdmFyIGNvbnRleHQgPSBQcm9taXNlLl9nZXRDb250ZXh0KCk7XG4gICAgdGhpcy5fY2FsbGJhY2sgPSB1dGlsLmNvbnRleHRCaW5kKGNvbnRleHQsIGZuKTtcbiAgICB0aGlzLl9wcmVzZXJ2ZWRWYWx1ZXMgPSBfZmlsdGVyID09PSBJTlRFUk5BTFxuICAgICAgICA/IG5ldyBBcnJheSh0aGlzLmxlbmd0aCgpKVxuICAgICAgICA6IG51bGw7XG4gICAgdGhpcy5fbGltaXQgPSBsaW1pdDtcbiAgICB0aGlzLl9pbkZsaWdodCA9IDA7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICBhc3luYy5pbnZva2UodGhpcy5fYXN5bmNJbml0LCB0aGlzLCB1bmRlZmluZWQpO1xuICAgIGlmICh1dGlsLmlzQXJyYXkocHJvbWlzZXMpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvbWlzZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBtYXliZVByb21pc2UgPSBwcm9taXNlc1tpXTtcbiAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgbWF5YmVQcm9taXNlLnN1cHByZXNzVW5oYW5kbGVkUmVqZWN0aW9ucygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxudXRpbC5pbmhlcml0cyhNYXBwaW5nUHJvbWlzZUFycmF5LCBQcm9taXNlQXJyYXkpO1xuXG5NYXBwaW5nUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fYXN5bmNJbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5faW5pdCQodW5kZWZpbmVkLCAtMik7XG59O1xuXG5NYXBwaW5nUHJvbWlzZUFycmF5LnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uICgpIHt9O1xuXG5NYXBwaW5nUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZUZ1bGZpbGxlZCA9IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgIHZhciBwcmVzZXJ2ZWRWYWx1ZXMgPSB0aGlzLl9wcmVzZXJ2ZWRWYWx1ZXM7XG4gICAgdmFyIGxpbWl0ID0gdGhpcy5fbGltaXQ7XG5cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gKGluZGV4ICogLTEpIC0gMTtcbiAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICBpZiAobGltaXQgPj0gMSkge1xuICAgICAgICAgICAgdGhpcy5faW5GbGlnaHQtLTtcbiAgICAgICAgICAgIHRoaXMuX2RyYWluUXVldWUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1Jlc29sdmVkKCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxpbWl0ID49IDEgJiYgdGhpcy5faW5GbGlnaHQgPj0gbGltaXQpIHtcbiAgICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVzZXJ2ZWRWYWx1ZXMgIT09IG51bGwpIHByZXNlcnZlZFZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMuX3Byb21pc2U7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrO1xuICAgICAgICB2YXIgcmVjZWl2ZXIgPSBwcm9taXNlLl9ib3VuZFZhbHVlKCk7XG4gICAgICAgIHByb21pc2UuX3B1c2hDb250ZXh0KCk7XG4gICAgICAgIHZhciByZXQgPSB0cnlDYXRjaChjYWxsYmFjaykuY2FsbChyZWNlaXZlciwgdmFsdWUsIGluZGV4LCBsZW5ndGgpO1xuICAgICAgICB2YXIgcHJvbWlzZUNyZWF0ZWQgPSBwcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgICAgIGRlYnVnLmNoZWNrRm9yZ290dGVuUmV0dXJucyhcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIHByb21pc2VDcmVhdGVkLFxuICAgICAgICAgICAgcHJlc2VydmVkVmFsdWVzICE9PSBudWxsID8gXCJQcm9taXNlLmZpbHRlclwiIDogXCJQcm9taXNlLm1hcFwiLFxuICAgICAgICAgICAgcHJvbWlzZVxuICAgICAgICApO1xuICAgICAgICBpZiAocmV0ID09PSBlcnJvck9iaikge1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0KHJldC5lKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocmV0LCB0aGlzLl9wcm9taXNlKTtcbiAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZSA9IG1heWJlUHJvbWlzZS5fdGFyZ2V0KCk7XG4gICAgICAgICAgICB2YXIgYml0RmllbGQgPSBtYXliZVByb21pc2UuX2JpdEZpZWxkO1xuICAgICAgICAgICAgO1xuICAgICAgICAgICAgaWYgKCgoYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbWl0ID49IDEpIHRoaXMuX2luRmxpZ2h0Kys7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IG1heWJlUHJvbWlzZTtcbiAgICAgICAgICAgICAgICBtYXliZVByb21pc2UuX3Byb3h5KHRoaXMsIChpbmRleCArIDEpICogLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKChiaXRGaWVsZCAmIDMzNTU0NDMyKSAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXQgPSBtYXliZVByb21pc2UuX3ZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVqZWN0KG1heWJlUHJvbWlzZS5fcmVhc29uKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXNbaW5kZXhdID0gcmV0O1xuICAgIH1cbiAgICB2YXIgdG90YWxSZXNvbHZlZCA9ICsrdGhpcy5fdG90YWxSZXNvbHZlZDtcbiAgICBpZiAodG90YWxSZXNvbHZlZCA+PSBsZW5ndGgpIHtcbiAgICAgICAgaWYgKHByZXNlcnZlZFZhbHVlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyKHZhbHVlcywgcHJlc2VydmVkVmFsdWVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuTWFwcGluZ1Byb21pc2VBcnJheS5wcm90b3R5cGUuX2RyYWluUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHF1ZXVlID0gdGhpcy5fcXVldWU7XG4gICAgdmFyIGxpbWl0ID0gdGhpcy5fbGltaXQ7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLl9pbkZsaWdodCA8IGxpbWl0KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1Jlc29sdmVkKCkpIHJldHVybjtcbiAgICAgICAgdmFyIGluZGV4ID0gcXVldWUucG9wKCk7XG4gICAgICAgIHRoaXMuX3Byb21pc2VGdWxmaWxsZWQodmFsdWVzW2luZGV4XSwgaW5kZXgpO1xuICAgIH1cbn07XG5cbk1hcHBpbmdQcm9taXNlQXJyYXkucHJvdG90eXBlLl9maWx0ZXIgPSBmdW5jdGlvbiAoYm9vbGVhbnMsIHZhbHVlcykge1xuICAgIHZhciBsZW4gPSB2YWx1ZXMubGVuZ3RoO1xuICAgIHZhciByZXQgPSBuZXcgQXJyYXkobGVuKTtcbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoYm9vbGVhbnNbaV0pIHJldFtqKytdID0gdmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXQubGVuZ3RoID0gajtcbiAgICB0aGlzLl9yZXNvbHZlKHJldCk7XG59O1xuXG5NYXBwaW5nUHJvbWlzZUFycmF5LnByb3RvdHlwZS5wcmVzZXJ2ZWRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXNlcnZlZFZhbHVlcztcbn07XG5cbmZ1bmN0aW9uIG1hcChwcm9taXNlcywgZm4sIG9wdGlvbnMsIF9maWx0ZXIpIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImV4cGVjdGluZyBhIGZ1bmN0aW9uIGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGZuKSk7XG4gICAgfVxuXG4gICAgdmFyIGxpbWl0ID0gMDtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIiAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29uY3VycmVuY3kgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUeXBlRXJyb3IoXCInY29uY3VycmVuY3knIG11c3QgYmUgYSBudW1iZXIgYnV0IGl0IGlzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY2xhc3NTdHJpbmcob3B0aW9ucy5jb25jdXJyZW5jeSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbWl0ID0gb3B0aW9ucy5jb25jdXJyZW5jeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBidXQgaXQgaXMgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNsYXNzU3RyaW5nKG9wdGlvbnMpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGltaXQgPSB0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgaXNGaW5pdGUobGltaXQpICYmIGxpbWl0ID49IDEgPyBsaW1pdCA6IDA7XG4gICAgcmV0dXJuIG5ldyBNYXBwaW5nUHJvbWlzZUFycmF5KHByb21pc2VzLCBmbiwgbGltaXQsIF9maWx0ZXIpLnByb21pc2UoKTtcbn1cblxuUHJvbWlzZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGZuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG1hcCh0aGlzLCBmbiwgb3B0aW9ucywgbnVsbCk7XG59O1xuXG5Qcm9taXNlLm1hcCA9IGZ1bmN0aW9uIChwcm9taXNlcywgZm4sIG9wdGlvbnMsIF9maWx0ZXIpIHtcbiAgICByZXR1cm4gbWFwKHByb21pc2VzLCBmbiwgb3B0aW9ucywgX2ZpbHRlcik7XG59O1xuXG5cbn07XG5cbn0se1wiLi91dGlsXCI6MzZ9XSwxOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID1cbmZ1bmN0aW9uKFByb21pc2UsIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBhcGlSZWplY3Rpb24sIGRlYnVnKSB7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xuXG5Qcm9taXNlLm1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgUHJvbWlzZS5UeXBlRXJyb3IoXCJleHBlY3RpbmcgYSBmdW5jdGlvbiBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyhmbikpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmV0ID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgICAgICByZXQuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgICAgIHJldC5fcHVzaENvbnRleHQoKTtcbiAgICAgICAgdmFyIHZhbHVlID0gdHJ5Q2F0Y2goZm4pLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIHZhciBwcm9taXNlQ3JlYXRlZCA9IHJldC5fcG9wQ29udGV4dCgpO1xuICAgICAgICBkZWJ1Zy5jaGVja0ZvcmdvdHRlblJldHVybnMoXG4gICAgICAgICAgICB2YWx1ZSwgcHJvbWlzZUNyZWF0ZWQsIFwiUHJvbWlzZS5tZXRob2RcIiwgcmV0KTtcbiAgICAgICAgcmV0Ll9yZXNvbHZlRnJvbVN5bmNWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcbn07XG5cblByb21pc2UuYXR0ZW1wdCA9IFByb21pc2VbXCJ0cnlcIl0gPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImV4cGVjdGluZyBhIGZ1bmN0aW9uIGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGZuKSk7XG4gICAgfVxuICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgcmV0Ll9jYXB0dXJlU3RhY2tUcmFjZSgpO1xuICAgIHJldC5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlYnVnLmRlcHJlY2F0ZWQoXCJjYWxsaW5nIFByb21pc2UudHJ5IHdpdGggbW9yZSB0aGFuIDEgYXJndW1lbnRcIik7XG4gICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIHZhciBjdHggPSBhcmd1bWVudHNbMl07XG4gICAgICAgIHZhbHVlID0gdXRpbC5pc0FycmF5KGFyZykgPyB0cnlDYXRjaChmbikuYXBwbHkoY3R4LCBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnlDYXRjaChmbikuY2FsbChjdHgsIGFyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB0cnlDYXRjaChmbikoKTtcbiAgICB9XG4gICAgdmFyIHByb21pc2VDcmVhdGVkID0gcmV0Ll9wb3BDb250ZXh0KCk7XG4gICAgZGVidWcuY2hlY2tGb3Jnb3R0ZW5SZXR1cm5zKFxuICAgICAgICB2YWx1ZSwgcHJvbWlzZUNyZWF0ZWQsIFwiUHJvbWlzZS50cnlcIiwgcmV0KTtcbiAgICByZXQuX3Jlc29sdmVGcm9tU3luY1ZhbHVlKHZhbHVlKTtcbiAgICByZXR1cm4gcmV0O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Jlc29sdmVGcm9tU3luY1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1dGlsLmVycm9yT2JqKSB7XG4gICAgICAgIHRoaXMuX3JlamVjdENhbGxiYWNrKHZhbHVlLmUsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZXNvbHZlQ2FsbGJhY2sodmFsdWUsIHRydWUpO1xuICAgIH1cbn07XG59O1xuXG59LHtcIi4vdXRpbFwiOjM2fV0sMjA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgbWF5YmVXcmFwQXNFcnJvciA9IHV0aWwubWF5YmVXcmFwQXNFcnJvcjtcbnZhciBlcnJvcnMgPSBfZGVyZXFfKFwiLi9lcnJvcnNcIik7XG52YXIgT3BlcmF0aW9uYWxFcnJvciA9IGVycm9ycy5PcGVyYXRpb25hbEVycm9yO1xudmFyIGVzNSA9IF9kZXJlcV8oXCIuL2VzNVwiKTtcblxuZnVuY3Rpb24gaXNVbnR5cGVkRXJyb3Iob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgIGVzNS5nZXRQcm90b3R5cGVPZihvYmopID09PSBFcnJvci5wcm90b3R5cGU7XG59XG5cbnZhciByRXJyb3JLZXkgPSAvXig/Om5hbWV8bWVzc2FnZXxzdGFja3xjYXVzZSkkLztcbmZ1bmN0aW9uIHdyYXBBc09wZXJhdGlvbmFsRXJyb3Iob2JqKSB7XG4gICAgdmFyIHJldDtcbiAgICBpZiAoaXNVbnR5cGVkRXJyb3Iob2JqKSkge1xuICAgICAgICByZXQgPSBuZXcgT3BlcmF0aW9uYWxFcnJvcihvYmopO1xuICAgICAgICByZXQubmFtZSA9IG9iai5uYW1lO1xuICAgICAgICByZXQubWVzc2FnZSA9IG9iai5tZXNzYWdlO1xuICAgICAgICByZXQuc3RhY2sgPSBvYmouc3RhY2s7XG4gICAgICAgIHZhciBrZXlzID0gZXM1LmtleXMob2JqKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGlmICghckVycm9yS2V5LnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgdXRpbC5tYXJrQXNPcmlnaW5hdGluZ0Zyb21SZWplY3Rpb24ob2JqKTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBub2RlYmFja0ZvclByb21pc2UocHJvbWlzZSwgbXVsdGlBcmdzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVyciwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHByb21pc2UgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgdmFyIHdyYXBwZWQgPSB3cmFwQXNPcGVyYXRpb25hbEVycm9yKG1heWJlV3JhcEFzRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICBwcm9taXNlLl9hdHRhY2hFeHRyYVRyYWNlKHdyYXBwZWQpO1xuICAgICAgICAgICAgcHJvbWlzZS5fcmVqZWN0KHdyYXBwZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKCFtdWx0aUFyZ3MpIHtcbiAgICAgICAgICAgIHByb21pc2UuX2Z1bGZpbGwodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7O1xuICAgICAgICAgICAgcHJvbWlzZS5fZnVsZmlsbChhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9taXNlID0gbnVsbDtcbiAgICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGViYWNrRm9yUHJvbWlzZTtcblxufSx7XCIuL2Vycm9yc1wiOjEyLFwiLi9lczVcIjoxMyxcIi4vdXRpbFwiOjM2fV0sMjE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UpIHtcbnZhciB1dGlsID0gX2RlcmVxXyhcIi4vdXRpbFwiKTtcbnZhciBhc3luYyA9IFByb21pc2UuX2FzeW5jO1xudmFyIHRyeUNhdGNoID0gdXRpbC50cnlDYXRjaDtcbnZhciBlcnJvck9iaiA9IHV0aWwuZXJyb3JPYmo7XG5cbmZ1bmN0aW9uIHNwcmVhZEFkYXB0ZXIodmFsLCBub2RlYmFjaykge1xuICAgIHZhciBwcm9taXNlID0gdGhpcztcbiAgICBpZiAoIXV0aWwuaXNBcnJheSh2YWwpKSByZXR1cm4gc3VjY2Vzc0FkYXB0ZXIuY2FsbChwcm9taXNlLCB2YWwsIG5vZGViYWNrKTtcbiAgICB2YXIgcmV0ID1cbiAgICAgICAgdHJ5Q2F0Y2gobm9kZWJhY2spLmFwcGx5KHByb21pc2UuX2JvdW5kVmFsdWUoKSwgW251bGxdLmNvbmNhdCh2YWwpKTtcbiAgICBpZiAocmV0ID09PSBlcnJvck9iaikge1xuICAgICAgICBhc3luYy50aHJvd0xhdGVyKHJldC5lKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN1Y2Nlc3NBZGFwdGVyKHZhbCwgbm9kZWJhY2spIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgdmFyIHJlY2VpdmVyID0gcHJvbWlzZS5fYm91bmRWYWx1ZSgpO1xuICAgIHZhciByZXQgPSB2YWwgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRyeUNhdGNoKG5vZGViYWNrKS5jYWxsKHJlY2VpdmVyLCBudWxsKVxuICAgICAgICA6IHRyeUNhdGNoKG5vZGViYWNrKS5jYWxsKHJlY2VpdmVyLCBudWxsLCB2YWwpO1xuICAgIGlmIChyZXQgPT09IGVycm9yT2JqKSB7XG4gICAgICAgIGFzeW5jLnRocm93TGF0ZXIocmV0LmUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVycm9yQWRhcHRlcihyZWFzb24sIG5vZGViYWNrKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgIGlmICghcmVhc29uKSB7XG4gICAgICAgIHZhciBuZXdSZWFzb24gPSBuZXcgRXJyb3IocmVhc29uICsgXCJcIik7XG4gICAgICAgIG5ld1JlYXNvbi5jYXVzZSA9IHJlYXNvbjtcbiAgICAgICAgcmVhc29uID0gbmV3UmVhc29uO1xuICAgIH1cbiAgICB2YXIgcmV0ID0gdHJ5Q2F0Y2gobm9kZWJhY2spLmNhbGwocHJvbWlzZS5fYm91bmRWYWx1ZSgpLCByZWFzb24pO1xuICAgIGlmIChyZXQgPT09IGVycm9yT2JqKSB7XG4gICAgICAgIGFzeW5jLnRocm93TGF0ZXIocmV0LmUpO1xuICAgIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGUuYXNDYWxsYmFjayA9IFByb21pc2UucHJvdG90eXBlLm5vZGVpZnkgPSBmdW5jdGlvbiAobm9kZWJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlYmFjayA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdmFyIGFkYXB0ZXIgPSBzdWNjZXNzQWRhcHRlcjtcbiAgICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qob3B0aW9ucykuc3ByZWFkKSB7XG4gICAgICAgICAgICBhZGFwdGVyID0gc3ByZWFkQWRhcHRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aGVuKFxuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGVycm9yQWRhcHRlcixcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBub2RlYmFja1xuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG59O1xuXG59LHtcIi4vdXRpbFwiOjM2fV0sMjI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xudmFyIG1ha2VTZWxmUmVzb2x1dGlvbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiY2lyY3VsYXIgcHJvbWlzZSByZXNvbHV0aW9uIGNoYWluXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbn07XG52YXIgcmVmbGVjdEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UuUHJvbWlzZUluc3BlY3Rpb24odGhpcy5fdGFyZ2V0KCkpO1xufTtcbnZhciBhcGlSZWplY3Rpb24gPSBmdW5jdGlvbihtc2cpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihtc2cpKTtcbn07XG5mdW5jdGlvbiBQcm94eWFibGUoKSB7fVxudmFyIFVOREVGSU5FRF9CSU5ESU5HID0ge307XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG51dGlsLnNldFJlZmxlY3RIYW5kbGVyKHJlZmxlY3RIYW5kbGVyKTtcblxudmFyIGdldERvbWFpbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb21haW4gPSBwcm9jZXNzLmRvbWFpbjtcbiAgICBpZiAoZG9tYWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBkb21haW47XG59O1xudmFyIGdldENvbnRleHREZWZhdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG51bGw7XG59O1xudmFyIGdldENvbnRleHREb21haW4gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkb21haW46IGdldERvbWFpbigpLFxuICAgICAgICBhc3luYzogbnVsbFxuICAgIH07XG59O1xudmFyIEFzeW5jUmVzb3VyY2UgPSB1dGlsLmlzTm9kZSAmJiB1dGlsLm5vZGVTdXBwb3J0c0FzeW5jUmVzb3VyY2UgP1xuICAgIF9kZXJlcV8oXCJhc3luY19ob29rc1wiKS5Bc3luY1Jlc291cmNlIDogbnVsbDtcbnZhciBnZXRDb250ZXh0QXN5bmNIb29rcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRvbWFpbjogZ2V0RG9tYWluKCksXG4gICAgICAgIGFzeW5jOiBuZXcgQXN5bmNSZXNvdXJjZShcIkJsdWViaXJkOjpQcm9taXNlXCIpXG4gICAgfTtcbn07XG52YXIgZ2V0Q29udGV4dCA9IHV0aWwuaXNOb2RlID8gZ2V0Q29udGV4dERvbWFpbiA6IGdldENvbnRleHREZWZhdWx0O1xudXRpbC5ub3RFbnVtZXJhYmxlUHJvcChQcm9taXNlLCBcIl9nZXRDb250ZXh0XCIsIGdldENvbnRleHQpO1xudmFyIGVuYWJsZUFzeW5jSG9va3MgPSBmdW5jdGlvbigpIHtcbiAgICBnZXRDb250ZXh0ID0gZ2V0Q29udGV4dEFzeW5jSG9va3M7XG4gICAgdXRpbC5ub3RFbnVtZXJhYmxlUHJvcChQcm9taXNlLCBcIl9nZXRDb250ZXh0XCIsIGdldENvbnRleHRBc3luY0hvb2tzKTtcbn07XG52YXIgZGlzYWJsZUFzeW5jSG9va3MgPSBmdW5jdGlvbigpIHtcbiAgICBnZXRDb250ZXh0ID0gZ2V0Q29udGV4dERvbWFpbjtcbiAgICB1dGlsLm5vdEVudW1lcmFibGVQcm9wKFByb21pc2UsIFwiX2dldENvbnRleHRcIiwgZ2V0Q29udGV4dERvbWFpbik7XG59O1xuXG52YXIgZXM1ID0gX2RlcmVxXyhcIi4vZXM1XCIpO1xudmFyIEFzeW5jID0gX2RlcmVxXyhcIi4vYXN5bmNcIik7XG52YXIgYXN5bmMgPSBuZXcgQXN5bmMoKTtcbmVzNS5kZWZpbmVQcm9wZXJ0eShQcm9taXNlLCBcIl9hc3luY1wiLCB7dmFsdWU6IGFzeW5jfSk7XG52YXIgZXJyb3JzID0gX2RlcmVxXyhcIi4vZXJyb3JzXCIpO1xudmFyIFR5cGVFcnJvciA9IFByb21pc2UuVHlwZUVycm9yID0gZXJyb3JzLlR5cGVFcnJvcjtcblByb21pc2UuUmFuZ2VFcnJvciA9IGVycm9ycy5SYW5nZUVycm9yO1xudmFyIENhbmNlbGxhdGlvbkVycm9yID0gUHJvbWlzZS5DYW5jZWxsYXRpb25FcnJvciA9IGVycm9ycy5DYW5jZWxsYXRpb25FcnJvcjtcblByb21pc2UuVGltZW91dEVycm9yID0gZXJyb3JzLlRpbWVvdXRFcnJvcjtcblByb21pc2UuT3BlcmF0aW9uYWxFcnJvciA9IGVycm9ycy5PcGVyYXRpb25hbEVycm9yO1xuUHJvbWlzZS5SZWplY3Rpb25FcnJvciA9IGVycm9ycy5PcGVyYXRpb25hbEVycm9yO1xuUHJvbWlzZS5BZ2dyZWdhdGVFcnJvciA9IGVycm9ycy5BZ2dyZWdhdGVFcnJvcjtcbnZhciBJTlRFUk5BTCA9IGZ1bmN0aW9uKCl7fTtcbnZhciBBUFBMWSA9IHt9O1xudmFyIE5FWFRfRklMVEVSID0ge307XG52YXIgdHJ5Q29udmVydFRvUHJvbWlzZSA9IF9kZXJlcV8oXCIuL3RoZW5hYmxlc1wiKShQcm9taXNlLCBJTlRFUk5BTCk7XG52YXIgUHJvbWlzZUFycmF5ID1cbiAgICBfZGVyZXFfKFwiLi9wcm9taXNlX2FycmF5XCIpKFByb21pc2UsIElOVEVSTkFMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUNvbnZlcnRUb1Byb21pc2UsIGFwaVJlamVjdGlvbiwgUHJveHlhYmxlKTtcbnZhciBDb250ZXh0ID0gX2RlcmVxXyhcIi4vY29udGV4dFwiKShQcm9taXNlKTtcbiAvKmpzaGludCB1bnVzZWQ6ZmFsc2UqL1xudmFyIGNyZWF0ZUNvbnRleHQgPSBDb250ZXh0LmNyZWF0ZTtcblxudmFyIGRlYnVnID0gX2RlcmVxXyhcIi4vZGVidWdnYWJpbGl0eVwiKShQcm9taXNlLCBDb250ZXh0LFxuICAgIGVuYWJsZUFzeW5jSG9va3MsIGRpc2FibGVBc3luY0hvb2tzKTtcbnZhciBDYXB0dXJlZFRyYWNlID0gZGVidWcuQ2FwdHVyZWRUcmFjZTtcbnZhciBQYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0ID1cbiAgICBfZGVyZXFfKFwiLi9maW5hbGx5XCIpKFByb21pc2UsIHRyeUNvbnZlcnRUb1Byb21pc2UsIE5FWFRfRklMVEVSKTtcbnZhciBjYXRjaEZpbHRlciA9IF9kZXJlcV8oXCIuL2NhdGNoX2ZpbHRlclwiKShORVhUX0ZJTFRFUik7XG52YXIgbm9kZWJhY2tGb3JQcm9taXNlID0gX2RlcmVxXyhcIi4vbm9kZWJhY2tcIik7XG52YXIgZXJyb3JPYmogPSB1dGlsLmVycm9yT2JqO1xudmFyIHRyeUNhdGNoID0gdXRpbC50cnlDYXRjaDtcbmZ1bmN0aW9uIGNoZWNrKHNlbGYsIGV4ZWN1dG9yKSB7XG4gICAgaWYgKHNlbGYgPT0gbnVsbCB8fCBzZWxmLmNvbnN0cnVjdG9yICE9PSBQcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgaW52b2tlZCBkaXJlY3RseVxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZXhwZWN0aW5nIGEgZnVuY3Rpb24gYnV0IGdvdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcoZXhlY3V0b3IpKTtcbiAgICB9XG5cbn1cblxuZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGlmIChleGVjdXRvciAhPT0gSU5URVJOQUwpIHtcbiAgICAgICAgY2hlY2sodGhpcywgZXhlY3V0b3IpO1xuICAgIH1cbiAgICB0aGlzLl9iaXRGaWVsZCA9IDA7XG4gICAgdGhpcy5fZnVsZmlsbG1lbnRIYW5kbGVyMCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZWplY3Rpb25IYW5kbGVyMCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9wcm9taXNlMCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZWNlaXZlcjAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZUZyb21FeGVjdXRvcihleGVjdXRvcik7XG4gICAgdGhpcy5fcHJvbWlzZUNyZWF0ZWQoKTtcbiAgICB0aGlzLl9maXJlRXZlbnQoXCJwcm9taXNlQ3JlYXRlZFwiLCB0aGlzKTtcbn1cblxuUHJvbWlzZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBQcm9taXNlXVwiO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuY2F1Z2h0ID0gUHJvbWlzZS5wcm90b3R5cGVbXCJjYXRjaFwiXSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICAgIHZhciBjYXRjaEluc3RhbmNlcyA9IG5ldyBBcnJheShsZW4gLSAxKSxcbiAgICAgICAgICAgIGogPSAwLCBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgKytpKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGlmICh1dGlsLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgY2F0Y2hJbnN0YW5jZXNbaisrXSA9IGl0ZW07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcGlSZWplY3Rpb24oXCJDYXRjaCBzdGF0ZW1lbnQgcHJlZGljYXRlOiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZXhwZWN0aW5nIGFuIG9iamVjdCBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2hJbnN0YW5jZXMubGVuZ3RoID0gajtcbiAgICAgICAgZm4gPSBhcmd1bWVudHNbaV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGxhc3QgYXJndW1lbnQgdG8gLmNhdGNoKCkgXCIgK1xuICAgICAgICAgICAgICAgIFwibXVzdCBiZSBhIGZ1bmN0aW9uLCBnb3QgXCIgKyB1dGlsLnRvU3RyaW5nKGZuKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIGNhdGNoRmlsdGVyKGNhdGNoSW5zdGFuY2VzLCBmbiwgdGhpcykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgZm4pO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUucmVmbGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhlbihyZWZsZWN0SGFuZGxlcixcbiAgICAgICAgcmVmbGVjdEhhbmRsZXIsIHVuZGVmaW5lZCwgdGhpcywgdW5kZWZpbmVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAoZGlkRnVsZmlsbCwgZGlkUmVqZWN0KSB7XG4gICAgaWYgKGRlYnVnLndhcm5pbmdzKCkgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdHlwZW9mIGRpZEZ1bGZpbGwgIT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgZGlkUmVqZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdmFyIG1zZyA9IFwiLnRoZW4oKSBvbmx5IGFjY2VwdHMgZnVuY3Rpb25zIGJ1dCB3YXMgcGFzc2VkOiBcIiArXG4gICAgICAgICAgICAgICAgdXRpbC5jbGFzc1N0cmluZyhkaWRGdWxmaWxsKTtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBtc2cgKz0gXCIsIFwiICsgdXRpbC5jbGFzc1N0cmluZyhkaWRSZWplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dhcm4obXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RoZW4oZGlkRnVsZmlsbCwgZGlkUmVqZWN0LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoZGlkRnVsZmlsbCwgZGlkUmVqZWN0KSB7XG4gICAgdmFyIHByb21pc2UgPVxuICAgICAgICB0aGlzLl90aGVuKGRpZEZ1bGZpbGwsIGRpZFJlamVjdCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgcHJvbWlzZS5fc2V0SXNGaW5hbCgpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuc3ByZWFkID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBhcGlSZWplY3Rpb24oXCJleHBlY3RpbmcgYSBmdW5jdGlvbiBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyhmbikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbGwoKS5fdGhlbihmbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIEFQUExZLCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXQgPSB7XG4gICAgICAgIGlzRnVsZmlsbGVkOiBmYWxzZSxcbiAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgIGZ1bGZpbGxtZW50VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVqZWN0aW9uUmVhc29uOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIGlmICh0aGlzLmlzRnVsZmlsbGVkKCkpIHtcbiAgICAgICAgcmV0LmZ1bGZpbGxtZW50VmFsdWUgPSB0aGlzLnZhbHVlKCk7XG4gICAgICAgIHJldC5pc0Z1bGZpbGxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUmVqZWN0ZWQoKSkge1xuICAgICAgICByZXQucmVqZWN0aW9uUmVhc29uID0gdGhpcy5yZWFzb24oKTtcbiAgICAgICAgcmV0LmlzUmVqZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuYWxsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLl93YXJuKFwiLmFsbCgpIHdhcyBwYXNzZWQgYXJndW1lbnRzIGJ1dCBpdCBkb2VzIG5vdCB0YWtlIGFueVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlQXJyYXkodGhpcykucHJvbWlzZSgpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gdGhpcy5jYXVnaHQodXRpbC5vcmlnaW5hdGVzRnJvbVJlamVjdGlvbiwgZm4pO1xufTtcblxuUHJvbWlzZS5nZXROZXdMaWJyYXJ5Q29weSA9IG1vZHVsZS5leHBvcnRzO1xuXG5Qcm9taXNlLmlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBQcm9taXNlO1xufTtcblxuUHJvbWlzZS5mcm9tTm9kZSA9IFByb21pc2UuZnJvbUNhbGxiYWNrID0gZnVuY3Rpb24oZm4pIHtcbiAgICB2YXIgcmV0ID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgIHJldC5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICB2YXIgbXVsdGlBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyAhIU9iamVjdChhcmd1bWVudHNbMV0pLm11bHRpQXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgIHZhciByZXN1bHQgPSB0cnlDYXRjaChmbikobm9kZWJhY2tGb3JQcm9taXNlKHJldCwgbXVsdGlBcmdzKSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gZXJyb3JPYmopIHtcbiAgICAgICAgcmV0Ll9yZWplY3RDYWxsYmFjayhyZXN1bHQuZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmICghcmV0Ll9pc0ZhdGVTZWFsZWQoKSkgcmV0Ll9zZXRBc3luY0d1YXJhbnRlZWQoKTtcbiAgICByZXR1cm4gcmV0O1xufTtcblxuUHJvbWlzZS5hbGwgPSBmdW5jdGlvbiAocHJvbWlzZXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2VBcnJheShwcm9taXNlcykucHJvbWlzZSgpO1xufTtcblxuUHJvbWlzZS5jYXN0ID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciByZXQgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKG9iaik7XG4gICAgaWYgKCEocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgICAgcmV0ID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgICAgICByZXQuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgICAgIHJldC5fc2V0RnVsZmlsbGVkKCk7XG4gICAgICAgIHJldC5fcmVqZWN0aW9uSGFuZGxlcjAgPSBvYmo7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5Qcm9taXNlLnJlc29sdmUgPSBQcm9taXNlLmZ1bGZpbGxlZCA9IFByb21pc2UuY2FzdDtcblxuUHJvbWlzZS5yZWplY3QgPSBQcm9taXNlLnJlamVjdGVkID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgcmV0Ll9jYXB0dXJlU3RhY2tUcmFjZSgpO1xuICAgIHJldC5fcmVqZWN0Q2FsbGJhY2socmVhc29uLCB0cnVlKTtcbiAgICByZXR1cm4gcmV0O1xufTtcblxuUHJvbWlzZS5zZXRTY2hlZHVsZXIgPSBmdW5jdGlvbihmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZXhwZWN0aW5nIGEgZnVuY3Rpb24gYnV0IGdvdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcoZm4pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFzeW5jLnNldFNjaGVkdWxlcihmbik7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fdGhlbiA9IGZ1bmN0aW9uIChcbiAgICBkaWRGdWxmaWxsLFxuICAgIGRpZFJlamVjdCxcbiAgICBfLCAgICByZWNlaXZlcixcbiAgICBpbnRlcm5hbERhdGFcbikge1xuICAgIHZhciBoYXZlSW50ZXJuYWxEYXRhID0gaW50ZXJuYWxEYXRhICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIHByb21pc2UgPSBoYXZlSW50ZXJuYWxEYXRhID8gaW50ZXJuYWxEYXRhIDogbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXQoKTtcbiAgICB2YXIgYml0RmllbGQgPSB0YXJnZXQuX2JpdEZpZWxkO1xuXG4gICAgaWYgKCFoYXZlSW50ZXJuYWxEYXRhKSB7XG4gICAgICAgIHByb21pc2UuX3Byb3BhZ2F0ZUZyb20odGhpcywgMyk7XG4gICAgICAgIHByb21pc2UuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgICAgIGlmIChyZWNlaXZlciA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAoKHRoaXMuX2JpdEZpZWxkICYgMjA5NzE1MikgIT09IDApKSB7XG4gICAgICAgICAgICBpZiAoISgoYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZXIgPSB0aGlzLl9ib3VuZFZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVyID0gdGFyZ2V0ID09PSB0aGlzID8gdW5kZWZpbmVkIDogdGhpcy5fYm91bmRUbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maXJlRXZlbnQoXCJwcm9taXNlQ2hhaW5lZFwiLCB0aGlzLCBwcm9taXNlKTtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IGdldENvbnRleHQoKTtcbiAgICBpZiAoISgoYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDApKSB7XG4gICAgICAgIHZhciBoYW5kbGVyLCB2YWx1ZSwgc2V0dGxlciA9IHRhcmdldC5fc2V0dGxlUHJvbWlzZUN0eDtcbiAgICAgICAgaWYgKCgoYml0RmllbGQgJiAzMzU1NDQzMikgIT09IDApKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRhcmdldC5fcmVqZWN0aW9uSGFuZGxlcjA7XG4gICAgICAgICAgICBoYW5kbGVyID0gZGlkRnVsZmlsbDtcbiAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMTY3NzcyMTYpICE9PSAwKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0YXJnZXQuX2Z1bGZpbGxtZW50SGFuZGxlcjA7XG4gICAgICAgICAgICBoYW5kbGVyID0gZGlkUmVqZWN0O1xuICAgICAgICAgICAgdGFyZ2V0Ll91bnNldFJlamVjdGlvbklzVW5oYW5kbGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXR0bGVyID0gdGFyZ2V0Ll9zZXR0bGVQcm9taXNlTGF0ZUNhbmNlbGxhdGlvbk9ic2VydmVyO1xuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQ2FuY2VsbGF0aW9uRXJyb3IoXCJsYXRlIGNhbmNlbGxhdGlvbiBvYnNlcnZlclwiKTtcbiAgICAgICAgICAgIHRhcmdldC5fYXR0YWNoRXh0cmFUcmFjZSh2YWx1ZSk7XG4gICAgICAgICAgICBoYW5kbGVyID0gZGlkUmVqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuaW52b2tlKHNldHRsZXIsIHRhcmdldCwge1xuICAgICAgICAgICAgaGFuZGxlcjogdXRpbC5jb250ZXh0QmluZChjb250ZXh0LCBoYW5kbGVyKSxcbiAgICAgICAgICAgIHByb21pc2U6IHByb21pc2UsXG4gICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0Ll9hZGRDYWxsYmFja3MoZGlkRnVsZmlsbCwgZGlkUmVqZWN0LCBwcm9taXNlLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVyLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdEZpZWxkICYgNjU1MzU7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5faXNGYXRlU2VhbGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiAxMTc1MDYwNDgpICE9PSAwO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2lzRm9sbG93aW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiA2NzEwODg2NCkgPT09IDY3MTA4ODY0O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldExlbmd0aCA9IGZ1bmN0aW9uIChsZW4pIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9ICh0aGlzLl9iaXRGaWVsZCAmIC02NTUzNikgfFxuICAgICAgICAobGVuICYgNjU1MzUpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldEZ1bGZpbGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkIHwgMzM1NTQ0MzI7XG4gICAgdGhpcy5fZmlyZUV2ZW50KFwicHJvbWlzZUZ1bGZpbGxlZFwiLCB0aGlzKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9zZXRSZWplY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkIHwgMTY3NzcyMTY7XG4gICAgdGhpcy5fZmlyZUV2ZW50KFwicHJvbWlzZVJlamVjdGVkXCIsIHRoaXMpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldEZvbGxvd2luZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkIHwgNjcxMDg4NjQ7XG4gICAgdGhpcy5fZmlyZUV2ZW50KFwicHJvbWlzZVJlc29sdmVkXCIsIHRoaXMpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldElzRmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCB8IDQxOTQzMDQ7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5faXNGaW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2JpdEZpZWxkICYgNDE5NDMwNCkgPiAwO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Vuc2V0Q2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCAmICh+NjU1MzYpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCA2NTUzNjtcbiAgICB0aGlzLl9maXJlRXZlbnQoXCJwcm9taXNlQ2FuY2VsbGVkXCIsIHRoaXMpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldFdpbGxCZUNhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCA4Mzg4NjA4O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldEFzeW5jR3VhcmFudGVlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChhc3luYy5oYXNDdXN0b21TY2hlZHVsZXIoKSkgcmV0dXJuO1xuICAgIHZhciBiaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkO1xuICAgIHRoaXMuX2JpdEZpZWxkID0gYml0RmllbGQgfFxuICAgICAgICAoKChiaXRGaWVsZCAmIDUzNjg3MDkxMikgPj4gMikgXlxuICAgICAgICAxMzQyMTc3MjgpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldE5vQXN5bmNHdWFyYW50ZWUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9ICh0aGlzLl9iaXRGaWVsZCB8IDUzNjg3MDkxMikgJlxuICAgICAgICAofjEzNDIxNzcyOCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcmVjZWl2ZXJBdCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHZhciByZXQgPSBpbmRleCA9PT0gMCA/IHRoaXMuX3JlY2VpdmVyMCA6IHRoaXNbXG4gICAgICAgICAgICBpbmRleCAqIDQgLSA0ICsgM107XG4gICAgaWYgKHJldCA9PT0gVU5ERUZJTkVEX0JJTkRJTkcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHJldCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2lzQm91bmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm91bmRWYWx1ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Byb21pc2VBdCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiB0aGlzW1xuICAgICAgICAgICAgaW5kZXggKiA0IC0gNCArIDJdO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2Z1bGZpbGxtZW50SGFuZGxlckF0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXNbXG4gICAgICAgICAgICBpbmRleCAqIDQgLSA0ICsgMF07XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcmVqZWN0aW9uSGFuZGxlckF0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXNbXG4gICAgICAgICAgICBpbmRleCAqIDQgLSA0ICsgMV07XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fYm91bmRWYWx1ZSA9IGZ1bmN0aW9uKCkge307XG5cblByb21pc2UucHJvdG90eXBlLl9taWdyYXRlQ2FsbGJhY2swID0gZnVuY3Rpb24gKGZvbGxvd2VyKSB7XG4gICAgdmFyIGJpdEZpZWxkID0gZm9sbG93ZXIuX2JpdEZpZWxkO1xuICAgIHZhciBmdWxmaWxsID0gZm9sbG93ZXIuX2Z1bGZpbGxtZW50SGFuZGxlcjA7XG4gICAgdmFyIHJlamVjdCA9IGZvbGxvd2VyLl9yZWplY3Rpb25IYW5kbGVyMDtcbiAgICB2YXIgcHJvbWlzZSA9IGZvbGxvd2VyLl9wcm9taXNlMDtcbiAgICB2YXIgcmVjZWl2ZXIgPSBmb2xsb3dlci5fcmVjZWl2ZXJBdCgwKTtcbiAgICBpZiAocmVjZWl2ZXIgPT09IHVuZGVmaW5lZCkgcmVjZWl2ZXIgPSBVTkRFRklORURfQklORElORztcbiAgICB0aGlzLl9hZGRDYWxsYmFja3MoZnVsZmlsbCwgcmVqZWN0LCBwcm9taXNlLCByZWNlaXZlciwgbnVsbCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fbWlncmF0ZUNhbGxiYWNrQXQgPSBmdW5jdGlvbiAoZm9sbG93ZXIsIGluZGV4KSB7XG4gICAgdmFyIGZ1bGZpbGwgPSBmb2xsb3dlci5fZnVsZmlsbG1lbnRIYW5kbGVyQXQoaW5kZXgpO1xuICAgIHZhciByZWplY3QgPSBmb2xsb3dlci5fcmVqZWN0aW9uSGFuZGxlckF0KGluZGV4KTtcbiAgICB2YXIgcHJvbWlzZSA9IGZvbGxvd2VyLl9wcm9taXNlQXQoaW5kZXgpO1xuICAgIHZhciByZWNlaXZlciA9IGZvbGxvd2VyLl9yZWNlaXZlckF0KGluZGV4KTtcbiAgICBpZiAocmVjZWl2ZXIgPT09IHVuZGVmaW5lZCkgcmVjZWl2ZXIgPSBVTkRFRklORURfQklORElORztcbiAgICB0aGlzLl9hZGRDYWxsYmFja3MoZnVsZmlsbCwgcmVqZWN0LCBwcm9taXNlLCByZWNlaXZlciwgbnVsbCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fYWRkQ2FsbGJhY2tzID0gZnVuY3Rpb24gKFxuICAgIGZ1bGZpbGwsXG4gICAgcmVqZWN0LFxuICAgIHByb21pc2UsXG4gICAgcmVjZWl2ZXIsXG4gICAgY29udGV4dFxuKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5fbGVuZ3RoKCk7XG5cbiAgICBpZiAoaW5kZXggPj0gNjU1MzUgLSA0KSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fc2V0TGVuZ3RoKDApO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9wcm9taXNlMCA9IHByb21pc2U7XG4gICAgICAgIHRoaXMuX3JlY2VpdmVyMCA9IHJlY2VpdmVyO1xuICAgICAgICBpZiAodHlwZW9mIGZ1bGZpbGwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5fZnVsZmlsbG1lbnRIYW5kbGVyMCA9IHV0aWwuY29udGV4dEJpbmQoY29udGV4dCwgZnVsZmlsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByZWplY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0aW9uSGFuZGxlcjAgPSB1dGlsLmNvbnRleHRCaW5kKGNvbnRleHQsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYmFzZSA9IGluZGV4ICogNCAtIDQ7XG4gICAgICAgIHRoaXNbYmFzZSArIDJdID0gcHJvbWlzZTtcbiAgICAgICAgdGhpc1tiYXNlICsgM10gPSByZWNlaXZlcjtcbiAgICAgICAgaWYgKHR5cGVvZiBmdWxmaWxsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXNbYmFzZSArIDBdID1cbiAgICAgICAgICAgICAgICB1dGlsLmNvbnRleHRCaW5kKGNvbnRleHQsIGZ1bGZpbGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcmVqZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXNbYmFzZSArIDFdID1cbiAgICAgICAgICAgICAgICB1dGlsLmNvbnRleHRCaW5kKGNvbnRleHQsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fc2V0TGVuZ3RoKGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Byb3h5ID0gZnVuY3Rpb24gKHByb3h5YWJsZSwgYXJnKSB7XG4gICAgdGhpcy5fYWRkQ2FsbGJhY2tzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcmcsIHByb3h5YWJsZSwgbnVsbCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcmVzb2x2ZUNhbGxiYWNrID0gZnVuY3Rpb24odmFsdWUsIHNob3VsZEJpbmQpIHtcbiAgICBpZiAoKCh0aGlzLl9iaXRGaWVsZCAmIDExNzUwNjA0OCkgIT09IDApKSByZXR1cm47XG4gICAgaWYgKHZhbHVlID09PSB0aGlzKVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0Q2FsbGJhY2sobWFrZVNlbGZSZXNvbHV0aW9uRXJyb3IoKSwgZmFsc2UpO1xuICAgIHZhciBtYXliZVByb21pc2UgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKHZhbHVlLCB0aGlzKTtcbiAgICBpZiAoIShtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSkgcmV0dXJuIHRoaXMuX2Z1bGZpbGwodmFsdWUpO1xuXG4gICAgaWYgKHNob3VsZEJpbmQpIHRoaXMuX3Byb3BhZ2F0ZUZyb20obWF5YmVQcm9taXNlLCAyKTtcblxuXG4gICAgdmFyIHByb21pc2UgPSBtYXliZVByb21pc2UuX3RhcmdldCgpO1xuXG4gICAgaWYgKHByb21pc2UgPT09IHRoaXMpIHtcbiAgICAgICAgdGhpcy5fcmVqZWN0KG1ha2VTZWxmUmVzb2x1dGlvbkVycm9yKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJpdEZpZWxkID0gcHJvbWlzZS5fYml0RmllbGQ7XG4gICAgaWYgKCgoYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDApKSB7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9sZW5ndGgoKTtcbiAgICAgICAgaWYgKGxlbiA+IDApIHByb21pc2UuX21pZ3JhdGVDYWxsYmFjazAodGhpcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIHByb21pc2UuX21pZ3JhdGVDYWxsYmFja0F0KHRoaXMsIGkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldEZvbGxvd2luZygpO1xuICAgICAgICB0aGlzLl9zZXRMZW5ndGgoMCk7XG4gICAgICAgIHRoaXMuX3NldEZvbGxvd2VlKG1heWJlUHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMzM1NTQ0MzIpICE9PSAwKSkge1xuICAgICAgICB0aGlzLl9mdWxmaWxsKHByb21pc2UuX3ZhbHVlKCkpO1xuICAgIH0gZWxzZSBpZiAoKChiaXRGaWVsZCAmIDE2Nzc3MjE2KSAhPT0gMCkpIHtcbiAgICAgICAgdGhpcy5fcmVqZWN0KHByb21pc2UuX3JlYXNvbigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVhc29uID0gbmV3IENhbmNlbGxhdGlvbkVycm9yKFwibGF0ZSBjYW5jZWxsYXRpb24gb2JzZXJ2ZXJcIik7XG4gICAgICAgIHByb21pc2UuX2F0dGFjaEV4dHJhVHJhY2UocmVhc29uKTtcbiAgICAgICAgdGhpcy5fcmVqZWN0KHJlYXNvbik7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3JlamVjdENhbGxiYWNrID1cbmZ1bmN0aW9uKHJlYXNvbiwgc3luY2hyb25vdXMsIGlnbm9yZU5vbkVycm9yV2FybmluZ3MpIHtcbiAgICB2YXIgdHJhY2UgPSB1dGlsLmVuc3VyZUVycm9yT2JqZWN0KHJlYXNvbik7XG4gICAgdmFyIGhhc1N0YWNrID0gdHJhY2UgPT09IHJlYXNvbjtcbiAgICBpZiAoIWhhc1N0YWNrICYmICFpZ25vcmVOb25FcnJvcldhcm5pbmdzICYmIGRlYnVnLndhcm5pbmdzKCkpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcImEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCBhIG5vbi1lcnJvcjogXCIgK1xuICAgICAgICAgICAgdXRpbC5jbGFzc1N0cmluZyhyZWFzb24pO1xuICAgICAgICB0aGlzLl93YXJuKG1lc3NhZ2UsIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLl9hdHRhY2hFeHRyYVRyYWNlKHRyYWNlLCBzeW5jaHJvbm91cyA/IGhhc1N0YWNrIDogZmFsc2UpO1xuICAgIHRoaXMuX3JlamVjdChyZWFzb24pO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Jlc29sdmVGcm9tRXhlY3V0b3IgPSBmdW5jdGlvbiAoZXhlY3V0b3IpIHtcbiAgICBpZiAoZXhlY3V0b3IgPT09IElOVEVSTkFMKSByZXR1cm47XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgIHRoaXMuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgdGhpcy5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgc3luY2hyb25vdXMgPSB0cnVlO1xuICAgIHZhciByID0gdGhpcy5fZXhlY3V0ZShleGVjdXRvciwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcHJvbWlzZS5fcmVzb2x2ZUNhbGxiYWNrKHZhbHVlKTtcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHByb21pc2UuX3JlamVjdENhbGxiYWNrKHJlYXNvbiwgc3luY2hyb25vdXMpO1xuICAgIH0pO1xuICAgIHN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgdGhpcy5fcG9wQ29udGV4dCgpO1xuXG4gICAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9taXNlLl9yZWplY3RDYWxsYmFjayhyLCB0cnVlKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0dGxlUHJvbWlzZUZyb21IYW5kbGVyID0gZnVuY3Rpb24gKFxuICAgIGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSwgcHJvbWlzZVxuKSB7XG4gICAgdmFyIGJpdEZpZWxkID0gcHJvbWlzZS5fYml0RmllbGQ7XG4gICAgaWYgKCgoYml0RmllbGQgJiA2NTUzNikgIT09IDApKSByZXR1cm47XG4gICAgcHJvbWlzZS5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgeDtcbiAgICBpZiAocmVjZWl2ZXIgPT09IEFQUExZKSB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgeCA9IGVycm9yT2JqO1xuICAgICAgICAgICAgeC5lID0gbmV3IFR5cGVFcnJvcihcImNhbm5vdCAuc3ByZWFkKCkgYSBub24tYXJyYXk6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY2xhc3NTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHggPSB0cnlDYXRjaChoYW5kbGVyKS5hcHBseSh0aGlzLl9ib3VuZFZhbHVlKCksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSB0cnlDYXRjaChoYW5kbGVyKS5jYWxsKHJlY2VpdmVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIHZhciBwcm9taXNlQ3JlYXRlZCA9IHByb21pc2UuX3BvcENvbnRleHQoKTtcbiAgICBiaXRGaWVsZCA9IHByb21pc2UuX2JpdEZpZWxkO1xuICAgIGlmICgoKGJpdEZpZWxkICYgNjU1MzYpICE9PSAwKSkgcmV0dXJuO1xuXG4gICAgaWYgKHggPT09IE5FWFRfRklMVEVSKSB7XG4gICAgICAgIHByb21pc2UuX3JlamVjdCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh4ID09PSBlcnJvck9iaikge1xuICAgICAgICBwcm9taXNlLl9yZWplY3RDYWxsYmFjayh4LmUsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1Zy5jaGVja0ZvcmdvdHRlblJldHVybnMoeCwgcHJvbWlzZUNyZWF0ZWQsIFwiXCIsICBwcm9taXNlLCB0aGlzKTtcbiAgICAgICAgcHJvbWlzZS5fcmVzb2x2ZUNhbGxiYWNrKHgpO1xuICAgIH1cbn07XG5cblByb21pc2UucHJvdG90eXBlLl90YXJnZXQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmV0ID0gdGhpcztcbiAgICB3aGlsZSAocmV0Ll9pc0ZvbGxvd2luZygpKSByZXQgPSByZXQuX2ZvbGxvd2VlKCk7XG4gICAgcmV0dXJuIHJldDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9mb2xsb3dlZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWplY3Rpb25IYW5kbGVyMDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9zZXRGb2xsb3dlZSA9IGZ1bmN0aW9uKHByb21pc2UpIHtcbiAgICB0aGlzLl9yZWplY3Rpb25IYW5kbGVyMCA9IHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0dGxlUHJvbWlzZSA9IGZ1bmN0aW9uKHByb21pc2UsIGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSkge1xuICAgIHZhciBpc1Byb21pc2UgPSBwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZTtcbiAgICB2YXIgYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZDtcbiAgICB2YXIgYXN5bmNHdWFyYW50ZWVkID0gKChiaXRGaWVsZCAmIDEzNDIxNzcyOCkgIT09IDApO1xuICAgIGlmICgoKGJpdEZpZWxkICYgNjU1MzYpICE9PSAwKSkge1xuICAgICAgICBpZiAoaXNQcm9taXNlKSBwcm9taXNlLl9pbnZva2VJbnRlcm5hbE9uQ2FuY2VsKCk7XG5cbiAgICAgICAgaWYgKHJlY2VpdmVyIGluc3RhbmNlb2YgUGFzc1Rocm91Z2hIYW5kbGVyQ29udGV4dCAmJlxuICAgICAgICAgICAgcmVjZWl2ZXIuaXNGaW5hbGx5SGFuZGxlcigpKSB7XG4gICAgICAgICAgICByZWNlaXZlci5jYW5jZWxQcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgICAgIGlmICh0cnlDYXRjaChoYW5kbGVyKS5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgPT09IGVycm9yT2JqKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZS5fcmVqZWN0KGVycm9yT2JqLmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPT09IHJlZmxlY3RIYW5kbGVyKSB7XG4gICAgICAgICAgICBwcm9taXNlLl9mdWxmaWxsKHJlZmxlY3RIYW5kbGVyLmNhbGwocmVjZWl2ZXIpKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZWNlaXZlciBpbnN0YW5jZW9mIFByb3h5YWJsZSkge1xuICAgICAgICAgICAgcmVjZWl2ZXIuX3Byb21pc2VDYW5jZWxsZWQocHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlIHx8IHByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlQXJyYXkpIHtcbiAgICAgICAgICAgIHByb21pc2UuX2NhbmNlbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjZWl2ZXIuY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaWYgKCFpc1Byb21pc2UpIHtcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbChyZWNlaXZlciwgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFzeW5jR3VhcmFudGVlZCkgcHJvbWlzZS5fc2V0QXN5bmNHdWFyYW50ZWVkKCk7XG4gICAgICAgICAgICB0aGlzLl9zZXR0bGVQcm9taXNlRnJvbUhhbmRsZXIoaGFuZGxlciwgcmVjZWl2ZXIsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaW5zdGFuY2VvZiBQcm94eWFibGUpIHtcbiAgICAgICAgaWYgKCFyZWNlaXZlci5faXNSZXNvbHZlZCgpKSB7XG4gICAgICAgICAgICBpZiAoKChiaXRGaWVsZCAmIDMzNTU0NDMyKSAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlci5fcHJvbWlzZUZ1bGZpbGxlZCh2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVyLl9wcm9taXNlUmVqZWN0ZWQodmFsdWUsIHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1Byb21pc2UpIHtcbiAgICAgICAgaWYgKGFzeW5jR3VhcmFudGVlZCkgcHJvbWlzZS5fc2V0QXN5bmNHdWFyYW50ZWVkKCk7XG4gICAgICAgIGlmICgoKGJpdEZpZWxkICYgMzM1NTQ0MzIpICE9PSAwKSkge1xuICAgICAgICAgICAgcHJvbWlzZS5fZnVsZmlsbCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlLl9yZWplY3QodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldHRsZVByb21pc2VMYXRlQ2FuY2VsbGF0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbihjdHgpIHtcbiAgICB2YXIgaGFuZGxlciA9IGN0eC5oYW5kbGVyO1xuICAgIHZhciBwcm9taXNlID0gY3R4LnByb21pc2U7XG4gICAgdmFyIHJlY2VpdmVyID0gY3R4LnJlY2VpdmVyO1xuICAgIHZhciB2YWx1ZSA9IGN0eC52YWx1ZTtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAoIShwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbChyZWNlaXZlciwgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2V0dGxlUHJvbWlzZUZyb21IYW5kbGVyKGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHByb21pc2UuX3JlamVjdCh2YWx1ZSk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldHRsZVByb21pc2VDdHggPSBmdW5jdGlvbihjdHgpIHtcbiAgICB0aGlzLl9zZXR0bGVQcm9taXNlKGN0eC5wcm9taXNlLCBjdHguaGFuZGxlciwgY3R4LnJlY2VpdmVyLCBjdHgudmFsdWUpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldHRsZVByb21pc2UwID0gZnVuY3Rpb24oaGFuZGxlciwgdmFsdWUsIGJpdEZpZWxkKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzLl9wcm9taXNlMDtcbiAgICB2YXIgcmVjZWl2ZXIgPSB0aGlzLl9yZWNlaXZlckF0KDApO1xuICAgIHRoaXMuX3Byb21pc2UwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JlY2VpdmVyMCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zZXR0bGVQcm9taXNlKHByb21pc2UsIGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fY2xlYXJDYWxsYmFja0RhdGFBdEluZGV4ID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICB2YXIgYmFzZSA9IGluZGV4ICogNCAtIDQ7XG4gICAgdGhpc1tiYXNlICsgMl0gPVxuICAgIHRoaXNbYmFzZSArIDNdID1cbiAgICB0aGlzW2Jhc2UgKyAwXSA9XG4gICAgdGhpc1tiYXNlICsgMV0gPSB1bmRlZmluZWQ7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fZnVsZmlsbCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBiaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkO1xuICAgIGlmICgoKGJpdEZpZWxkICYgMTE3NTA2MDQ4KSA+Pj4gMTYpKSByZXR1cm47XG4gICAgaWYgKHZhbHVlID09PSB0aGlzKSB7XG4gICAgICAgIHZhciBlcnIgPSBtYWtlU2VsZlJlc29sdXRpb25FcnJvcigpO1xuICAgICAgICB0aGlzLl9hdHRhY2hFeHRyYVRyYWNlKGVycik7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWplY3QoZXJyKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RnVsZmlsbGVkKCk7XG4gICAgdGhpcy5fcmVqZWN0aW9uSGFuZGxlcjAgPSB2YWx1ZTtcblxuICAgIGlmICgoYml0RmllbGQgJiA2NTUzNSkgPiAwKSB7XG4gICAgICAgIGlmICgoKGJpdEZpZWxkICYgMTM0MjE3NzI4KSAhPT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHRsZVByb21pc2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXR0bGVQcm9taXNlcyh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZXJlZmVyZW5jZVRyYWNlKCk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3JlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICB2YXIgYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZDtcbiAgICBpZiAoKChiaXRGaWVsZCAmIDExNzUwNjA0OCkgPj4+IDE2KSkgcmV0dXJuO1xuICAgIHRoaXMuX3NldFJlamVjdGVkKCk7XG4gICAgdGhpcy5fZnVsZmlsbG1lbnRIYW5kbGVyMCA9IHJlYXNvbjtcblxuICAgIGlmICh0aGlzLl9pc0ZpbmFsKCkpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmZhdGFsRXJyb3IocmVhc29uLCB1dGlsLmlzTm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKChiaXRGaWVsZCAmIDY1NTM1KSA+IDApIHtcbiAgICAgICAgYXN5bmMuc2V0dGxlUHJvbWlzZXModGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlUG9zc2libGVSZWplY3Rpb25IYW5kbGVkKCk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2Z1bGZpbGxQcm9taXNlcyA9IGZ1bmN0aW9uIChsZW4sIHZhbHVlKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuX2Z1bGZpbGxtZW50SGFuZGxlckF0KGkpO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMuX3Byb21pc2VBdChpKTtcbiAgICAgICAgdmFyIHJlY2VpdmVyID0gdGhpcy5fcmVjZWl2ZXJBdChpKTtcbiAgICAgICAgdGhpcy5fY2xlYXJDYWxsYmFja0RhdGFBdEluZGV4KGkpO1xuICAgICAgICB0aGlzLl9zZXR0bGVQcm9taXNlKHByb21pc2UsIGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3JlamVjdFByb21pc2VzID0gZnVuY3Rpb24gKGxlbiwgcmVhc29uKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuX3JlamVjdGlvbkhhbmRsZXJBdChpKTtcbiAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLl9wcm9taXNlQXQoaSk7XG4gICAgICAgIHZhciByZWNlaXZlciA9IHRoaXMuX3JlY2VpdmVyQXQoaSk7XG4gICAgICAgIHRoaXMuX2NsZWFyQ2FsbGJhY2tEYXRhQXRJbmRleChpKTtcbiAgICAgICAgdGhpcy5fc2V0dGxlUHJvbWlzZShwcm9taXNlLCBoYW5kbGVyLCByZWNlaXZlciwgcmVhc29uKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0dGxlUHJvbWlzZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJpdEZpZWxkID0gdGhpcy5fYml0RmllbGQ7XG4gICAgdmFyIGxlbiA9IChiaXRGaWVsZCAmIDY1NTM1KTtcblxuICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgIGlmICgoKGJpdEZpZWxkICYgMTY4NDI3NTIpICE9PSAwKSkge1xuICAgICAgICAgICAgdmFyIHJlYXNvbiA9IHRoaXMuX2Z1bGZpbGxtZW50SGFuZGxlcjA7XG4gICAgICAgICAgICB0aGlzLl9zZXR0bGVQcm9taXNlMCh0aGlzLl9yZWplY3Rpb25IYW5kbGVyMCwgcmVhc29uLCBiaXRGaWVsZCk7XG4gICAgICAgICAgICB0aGlzLl9yZWplY3RQcm9taXNlcyhsZW4sIHJlYXNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9yZWplY3Rpb25IYW5kbGVyMDtcbiAgICAgICAgICAgIHRoaXMuX3NldHRsZVByb21pc2UwKHRoaXMuX2Z1bGZpbGxtZW50SGFuZGxlcjAsIHZhbHVlLCBiaXRGaWVsZCk7XG4gICAgICAgICAgICB0aGlzLl9mdWxmaWxsUHJvbWlzZXMobGVuLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0TGVuZ3RoKDApO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhckNhbmNlbGxhdGlvbkRhdGEoKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9zZXR0bGVkVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZDtcbiAgICBpZiAoKChiaXRGaWVsZCAmIDMzNTU0NDMyKSAhPT0gMCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdGlvbkhhbmRsZXIwO1xuICAgIH0gZWxzZSBpZiAoKChiaXRGaWVsZCAmIDE2Nzc3MjE2KSAhPT0gMCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxtZW50SGFuZGxlcjA7XG4gICAgfVxufTtcblxuaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gICAgZXM1LmRlZmluZVByb3BlcnR5KFByb21pc2UucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJPYmplY3RcIjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZlclJlc29sdmUodikge3RoaXMucHJvbWlzZS5fcmVzb2x2ZUNhbGxiYWNrKHYpO31cbmZ1bmN0aW9uIGRlZmVyUmVqZWN0KHYpIHt0aGlzLnByb21pc2UuX3JlamVjdENhbGxiYWNrKHYsIGZhbHNlKTt9XG5cblByb21pc2UuZGVmZXIgPSBQcm9taXNlLnBlbmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICBkZWJ1Zy5kZXByZWNhdGVkKFwiUHJvbWlzZS5kZWZlclwiLCBcIm5ldyBQcm9taXNlXCIpO1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb21pc2U6IHByb21pc2UsXG4gICAgICAgIHJlc29sdmU6IGRlZmVyUmVzb2x2ZSxcbiAgICAgICAgcmVqZWN0OiBkZWZlclJlamVjdFxuICAgIH07XG59O1xuXG51dGlsLm5vdEVudW1lcmFibGVQcm9wKFByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgIFwiX21ha2VTZWxmUmVzb2x1dGlvbkVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgIG1ha2VTZWxmUmVzb2x1dGlvbkVycm9yKTtcblxuX2RlcmVxXyhcIi4vbWV0aG9kXCIpKFByb21pc2UsIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBhcGlSZWplY3Rpb24sXG4gICAgZGVidWcpO1xuX2RlcmVxXyhcIi4vYmluZFwiKShQcm9taXNlLCBJTlRFUk5BTCwgdHJ5Q29udmVydFRvUHJvbWlzZSwgZGVidWcpO1xuX2RlcmVxXyhcIi4vY2FuY2VsXCIpKFByb21pc2UsIFByb21pc2VBcnJheSwgYXBpUmVqZWN0aW9uLCBkZWJ1Zyk7XG5fZGVyZXFfKFwiLi9kaXJlY3RfcmVzb2x2ZVwiKShQcm9taXNlKTtcbl9kZXJlcV8oXCIuL3N5bmNocm9ub3VzX2luc3BlY3Rpb25cIikoUHJvbWlzZSk7XG5fZGVyZXFfKFwiLi9qb2luXCIpKFxuICAgIFByb21pc2UsIFByb21pc2VBcnJheSwgdHJ5Q29udmVydFRvUHJvbWlzZSwgSU5URVJOQUwsIGFzeW5jKTtcblByb21pc2UuUHJvbWlzZSA9IFByb21pc2U7XG5Qcm9taXNlLnZlcnNpb24gPSBcIjMuNy4yXCI7XG5fZGVyZXFfKCcuL2NhbGxfZ2V0LmpzJykoUHJvbWlzZSk7XG5fZGVyZXFfKCcuL2dlbmVyYXRvcnMuanMnKShQcm9taXNlLCBhcGlSZWplY3Rpb24sIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBQcm94eWFibGUsIGRlYnVnKTtcbl9kZXJlcV8oJy4vbWFwLmpzJykoUHJvbWlzZSwgUHJvbWlzZUFycmF5LCBhcGlSZWplY3Rpb24sIHRyeUNvbnZlcnRUb1Byb21pc2UsIElOVEVSTkFMLCBkZWJ1Zyk7XG5fZGVyZXFfKCcuL25vZGVpZnkuanMnKShQcm9taXNlKTtcbl9kZXJlcV8oJy4vcHJvbWlzaWZ5LmpzJykoUHJvbWlzZSwgSU5URVJOQUwpO1xuX2RlcmVxXygnLi9wcm9wcy5qcycpKFByb21pc2UsIFByb21pc2VBcnJheSwgdHJ5Q29udmVydFRvUHJvbWlzZSwgYXBpUmVqZWN0aW9uKTtcbl9kZXJlcV8oJy4vcmFjZS5qcycpKFByb21pc2UsIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBhcGlSZWplY3Rpb24pO1xuX2RlcmVxXygnLi9yZWR1Y2UuanMnKShQcm9taXNlLCBQcm9taXNlQXJyYXksIGFwaVJlamVjdGlvbiwgdHJ5Q29udmVydFRvUHJvbWlzZSwgSU5URVJOQUwsIGRlYnVnKTtcbl9kZXJlcV8oJy4vc2V0dGxlLmpzJykoUHJvbWlzZSwgUHJvbWlzZUFycmF5LCBkZWJ1Zyk7XG5fZGVyZXFfKCcuL3NvbWUuanMnKShQcm9taXNlLCBQcm9taXNlQXJyYXksIGFwaVJlamVjdGlvbik7XG5fZGVyZXFfKCcuL3RpbWVycy5qcycpKFByb21pc2UsIElOVEVSTkFMLCBkZWJ1Zyk7XG5fZGVyZXFfKCcuL3VzaW5nLmpzJykoUHJvbWlzZSwgYXBpUmVqZWN0aW9uLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBjcmVhdGVDb250ZXh0LCBJTlRFUk5BTCwgZGVidWcpO1xuX2RlcmVxXygnLi9hbnkuanMnKShQcm9taXNlKTtcbl9kZXJlcV8oJy4vZWFjaC5qcycpKFByb21pc2UsIElOVEVSTkFMKTtcbl9kZXJlcV8oJy4vZmlsdGVyLmpzJykoUHJvbWlzZSwgSU5URVJOQUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgdXRpbC50b0Zhc3RQcm9wZXJ0aWVzKFByb21pc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIHV0aWwudG9GYXN0UHJvcGVydGllcyhQcm9taXNlLnByb3RvdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBmdW5jdGlvbiBmaWxsVHlwZXModmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIHZhciBwID0gbmV3IFByb21pc2UoSU5URVJOQUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICBwLl9mdWxmaWxsbWVudEhhbmRsZXIwID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgcC5fcmVqZWN0aW9uSGFuZGxlcjAgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIHAuX3Byb21pc2UwID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICBwLl9yZWNlaXZlcjAgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgLy8gQ29tcGxldGUgc2xhY2sgdHJhY2tpbmcsIG9wdCBvdXQgb2YgZmllbGQtdHlwZSB0cmFja2luZyBhbmQgICAgICAgICAgIFxuICAgIC8vIHN0YWJpbGl6ZSBtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBmaWxsVHlwZXMoe2E6IDF9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgZmlsbFR5cGVzKHtiOiAyfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIGZpbGxUeXBlcyh7YzogM30pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBmaWxsVHlwZXMoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgZmlsbFR5cGVzKGZ1bmN0aW9uKCl7fSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIGZpbGxUeXBlcyh1bmRlZmluZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBmaWxsVHlwZXMoZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgZmlsbFR5cGVzKG5ldyBQcm9taXNlKElOVEVSTkFMKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIGRlYnVnLnNldEJvdW5kcyhBc3luYy5maXJzdExpbmVFcnJvciwgdXRpbC5sYXN0TGluZUVycm9yKTsgICAgICAgICAgICAgICBcbiAgICByZXR1cm4gUHJvbWlzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbn07XG5cbn0se1wiLi9hbnkuanNcIjoxLFwiLi9hc3luY1wiOjIsXCIuL2JpbmRcIjozLFwiLi9jYWxsX2dldC5qc1wiOjUsXCIuL2NhbmNlbFwiOjYsXCIuL2NhdGNoX2ZpbHRlclwiOjcsXCIuL2NvbnRleHRcIjo4LFwiLi9kZWJ1Z2dhYmlsaXR5XCI6OSxcIi4vZGlyZWN0X3Jlc29sdmVcIjoxMCxcIi4vZWFjaC5qc1wiOjExLFwiLi9lcnJvcnNcIjoxMixcIi4vZXM1XCI6MTMsXCIuL2ZpbHRlci5qc1wiOjE0LFwiLi9maW5hbGx5XCI6MTUsXCIuL2dlbmVyYXRvcnMuanNcIjoxNixcIi4vam9pblwiOjE3LFwiLi9tYXAuanNcIjoxOCxcIi4vbWV0aG9kXCI6MTksXCIuL25vZGViYWNrXCI6MjAsXCIuL25vZGVpZnkuanNcIjoyMSxcIi4vcHJvbWlzZV9hcnJheVwiOjIzLFwiLi9wcm9taXNpZnkuanNcIjoyNCxcIi4vcHJvcHMuanNcIjoyNSxcIi4vcmFjZS5qc1wiOjI3LFwiLi9yZWR1Y2UuanNcIjoyOCxcIi4vc2V0dGxlLmpzXCI6MzAsXCIuL3NvbWUuanNcIjozMSxcIi4vc3luY2hyb25vdXNfaW5zcGVjdGlvblwiOjMyLFwiLi90aGVuYWJsZXNcIjozMyxcIi4vdGltZXJzLmpzXCI6MzQsXCIuL3VzaW5nLmpzXCI6MzUsXCIuL3V0aWxcIjozNixcImFzeW5jX2hvb2tzXCI6dW5kZWZpbmVkfV0sMjM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLFxuICAgIGFwaVJlamVjdGlvbiwgUHJveHlhYmxlKSB7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgaXNBcnJheSA9IHV0aWwuaXNBcnJheTtcblxuZnVuY3Rpb24gdG9SZXNvbHV0aW9uVmFsdWUodmFsKSB7XG4gICAgc3dpdGNoKHZhbCkge1xuICAgIGNhc2UgLTI6IHJldHVybiBbXTtcbiAgICBjYXNlIC0zOiByZXR1cm4ge307XG4gICAgY2FzZSAtNjogcmV0dXJuIG5ldyBNYXAoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIFByb21pc2VBcnJheSh2YWx1ZXMpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgaWYgKHZhbHVlcyBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcHJvbWlzZS5fcHJvcGFnYXRlRnJvbSh2YWx1ZXMsIDMpO1xuICAgICAgICB2YWx1ZXMuc3VwcHJlc3NVbmhhbmRsZWRSZWplY3Rpb25zKCk7XG4gICAgfVxuICAgIHByb21pc2UuX3NldE9uQ2FuY2VsKHRoaXMpO1xuICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcztcbiAgICB0aGlzLl9sZW5ndGggPSAwO1xuICAgIHRoaXMuX3RvdGFsUmVzb2x2ZWQgPSAwO1xuICAgIHRoaXMuX2luaXQodW5kZWZpbmVkLCAtMik7XG59XG51dGlsLmluaGVyaXRzKFByb21pc2VBcnJheSwgUHJveHlhYmxlKTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUucHJvbWlzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KF8sIHJlc29sdmVWYWx1ZUlmRW1wdHkpIHtcbiAgICB2YXIgdmFsdWVzID0gdHJ5Q29udmVydFRvUHJvbWlzZSh0aGlzLl92YWx1ZXMsIHRoaXMuX3Byb21pc2UpO1xuICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHZhbHVlcyA9IHZhbHVlcy5fdGFyZ2V0KCk7XG4gICAgICAgIHZhciBiaXRGaWVsZCA9IHZhbHVlcy5fYml0RmllbGQ7XG4gICAgICAgIDtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuXG4gICAgICAgIGlmICgoKGJpdEZpZWxkICYgNTAzOTcxODQpID09PSAwKSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvbWlzZS5fc2V0QXN5bmNHdWFyYW50ZWVkKCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzLl90aGVuKFxuICAgICAgICAgICAgICAgIGluaXQsXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVqZWN0LFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIHJlc29sdmVWYWx1ZUlmRW1wdHlcbiAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMzM1NTQ0MzIpICE9PSAwKSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLl92YWx1ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0KHZhbHVlcy5fcmVhc29uKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbmNlbCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbHVlcyA9IHV0aWwuYXNBcnJheSh2YWx1ZXMpO1xuICAgIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIGVyciA9IGFwaVJlamVjdGlvbihcbiAgICAgICAgICAgIFwiZXhwZWN0aW5nIGFuIGFycmF5IG9yIGFuIGl0ZXJhYmxlIG9iamVjdCBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyh2YWx1ZXMpKS5yZWFzb24oKTtcbiAgICAgICAgdGhpcy5fcHJvbWlzZS5fcmVqZWN0Q2FsbGJhY2soZXJyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocmVzb2x2ZVZhbHVlSWZFbXB0eSA9PT0gLTUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVFbXB0eUFycmF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlKHRvUmVzb2x1dGlvblZhbHVlKHJlc29sdmVWYWx1ZUlmRW1wdHkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2l0ZXJhdGUodmFsdWVzKTtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUuX2l0ZXJhdGUgPSBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICB2YXIgbGVuID0gdGhpcy5nZXRBY3R1YWxMZW5ndGgodmFsdWVzLmxlbmd0aCk7XG4gICAgdGhpcy5fbGVuZ3RoID0gbGVuO1xuICAgIHRoaXMuX3ZhbHVlcyA9IHRoaXMuc2hvdWxkQ29weVZhbHVlcygpID8gbmV3IEFycmF5KGxlbikgOiB0aGlzLl92YWx1ZXM7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX3Byb21pc2U7XG4gICAgdmFyIGlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICB2YXIgYml0RmllbGQgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UodmFsdWVzW2ldLCByZXN1bHQpO1xuXG4gICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICBtYXliZVByb21pc2UgPSBtYXliZVByb21pc2UuX3RhcmdldCgpO1xuICAgICAgICAgICAgYml0RmllbGQgPSBtYXliZVByb21pc2UuX2JpdEZpZWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYml0RmllbGQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIGlmIChiaXRGaWVsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZS5zdXBwcmVzc1VuaGFuZGxlZFJlamVjdGlvbnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChiaXRGaWVsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCgoYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgbWF5YmVQcm9taXNlLl9wcm94eSh0aGlzLCBpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaV0gPSBtYXliZVByb21pc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAzMzU1NDQzMikgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgaXNSZXNvbHZlZCA9IHRoaXMuX3Byb21pc2VGdWxmaWxsZWQobWF5YmVQcm9taXNlLl92YWx1ZSgpLCBpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKChiaXRGaWVsZCAmIDE2Nzc3MjE2KSAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICBpc1Jlc29sdmVkID0gdGhpcy5fcHJvbWlzZVJlamVjdGVkKG1heWJlUHJvbWlzZS5fcmVhc29uKCksIGkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpc1Jlc29sdmVkID0gdGhpcy5fcHJvbWlzZUNhbmNlbGxlZChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSB0aGlzLl9wcm9taXNlRnVsZmlsbGVkKG1heWJlUHJvbWlzZSwgaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc1Jlc29sdmVkKSByZXN1bHQuX3NldEFzeW5jR3VhcmFudGVlZCgpO1xufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5faXNSZXNvbHZlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVzID09PSBudWxsO1xufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHRoaXMuX3ZhbHVlcyA9IG51bGw7XG4gICAgdGhpcy5fcHJvbWlzZS5fZnVsZmlsbCh2YWx1ZSk7XG59O1xuXG5Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5faXNSZXNvbHZlZCgpIHx8ICF0aGlzLl9wcm9taXNlLl9pc0NhbmNlbGxhYmxlKCkpIHJldHVybjtcbiAgICB0aGlzLl92YWx1ZXMgPSBudWxsO1xuICAgIHRoaXMuX3Byb21pc2UuX2NhbmNlbCgpO1xufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcmVqZWN0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHRoaXMuX3ZhbHVlcyA9IG51bGw7XG4gICAgdGhpcy5fcHJvbWlzZS5fcmVqZWN0Q2FsbGJhY2socmVhc29uLCBmYWxzZSk7XG59O1xuXG5Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9wcm9taXNlRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgIHRoaXMuX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICB2YXIgdG90YWxSZXNvbHZlZCA9ICsrdGhpcy5fdG90YWxSZXNvbHZlZDtcbiAgICBpZiAodG90YWxSZXNvbHZlZCA+PSB0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZSh0aGlzLl92YWx1ZXMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZUNhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2NhbmNlbCgpO1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZVJlamVjdGVkID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHRoaXMuX3RvdGFsUmVzb2x2ZWQrKztcbiAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9pc1Jlc29sdmVkKCkpIHJldHVybjtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuICAgIHRoaXMuX2NhbmNlbCgpO1xuICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHZhbHVlcy5jYW5jZWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlc1tpXSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXNbaV0uY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5Qcm9taXNlQXJyYXkucHJvdG90eXBlLnNob3VsZENvcHlWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5Qcm9taXNlQXJyYXkucHJvdG90eXBlLmdldEFjdHVhbExlbmd0aCA9IGZ1bmN0aW9uIChsZW4pIHtcbiAgICByZXR1cm4gbGVuO1xufTtcblxucmV0dXJuIFByb21pc2VBcnJheTtcbn07XG5cbn0se1wiLi91dGlsXCI6MzZ9XSwyNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgSU5URVJOQUwpIHtcbnZhciBUSElTID0ge307XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgbm9kZWJhY2tGb3JQcm9taXNlID0gX2RlcmVxXyhcIi4vbm9kZWJhY2tcIik7XG52YXIgd2l0aEFwcGVuZGVkID0gdXRpbC53aXRoQXBwZW5kZWQ7XG52YXIgbWF5YmVXcmFwQXNFcnJvciA9IHV0aWwubWF5YmVXcmFwQXNFcnJvcjtcbnZhciBjYW5FdmFsdWF0ZSA9IHV0aWwuY2FuRXZhbHVhdGU7XG52YXIgVHlwZUVycm9yID0gX2RlcmVxXyhcIi4vZXJyb3JzXCIpLlR5cGVFcnJvcjtcbnZhciBkZWZhdWx0U3VmZml4ID0gXCJBc3luY1wiO1xudmFyIGRlZmF1bHRQcm9taXNpZmllZCA9IHtfX2lzUHJvbWlzaWZpZWRfXzogdHJ1ZX07XG52YXIgbm9Db3B5UHJvcHMgPSBbXG4gICAgXCJhcml0eVwiLCAgICBcImxlbmd0aFwiLFxuICAgIFwibmFtZVwiLFxuICAgIFwiYXJndW1lbnRzXCIsXG4gICAgXCJjYWxsZXJcIixcbiAgICBcImNhbGxlZVwiLFxuICAgIFwicHJvdG90eXBlXCIsXG4gICAgXCJfX2lzUHJvbWlzaWZpZWRfX1wiXG5dO1xudmFyIG5vQ29weVByb3BzUGF0dGVybiA9IG5ldyBSZWdFeHAoXCJeKD86XCIgKyBub0NvcHlQcm9wcy5qb2luKFwifFwiKSArIFwiKSRcIik7XG5cbnZhciBkZWZhdWx0RmlsdGVyID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB1dGlsLmlzSWRlbnRpZmllcihuYW1lKSAmJlxuICAgICAgICBuYW1lLmNoYXJBdCgwKSAhPT0gXCJfXCIgJiZcbiAgICAgICAgbmFtZSAhPT0gXCJjb25zdHJ1Y3RvclwiO1xufTtcblxuZnVuY3Rpb24gcHJvcHNGaWx0ZXIoa2V5KSB7XG4gICAgcmV0dXJuICFub0NvcHlQcm9wc1BhdHRlcm4udGVzdChrZXkpO1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2lmaWVkKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZuLl9faXNQcm9taXNpZmllZF9fID09PSB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBoYXNQcm9taXNpZmllZChvYmosIGtleSwgc3VmZml4KSB7XG4gICAgdmFyIHZhbCA9IHV0aWwuZ2V0RGF0YVByb3BlcnR5T3JEZWZhdWx0KG9iaiwga2V5ICsgc3VmZml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UHJvbWlzaWZpZWQpO1xuICAgIHJldHVybiB2YWwgPyBpc1Byb21pc2lmaWVkKHZhbCkgOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrVmFsaWQocmV0LCBzdWZmaXgsIHN1ZmZpeFJlZ2V4cCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHZhciBrZXkgPSByZXRbaV07XG4gICAgICAgIGlmIChzdWZmaXhSZWdleHAudGVzdChrZXkpKSB7XG4gICAgICAgICAgICB2YXIga2V5V2l0aG91dEFzeW5jU3VmZml4ID0ga2V5LnJlcGxhY2Uoc3VmZml4UmVnZXhwLCBcIlwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmV0Lmxlbmd0aDsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJldFtqXSA9PT0ga2V5V2l0aG91dEFzeW5jU3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcHJvbWlzaWZ5IGFuIEFQSSB0aGF0IGhhcyBub3JtYWwgbWV0aG9kcyB3aXRoICclcyctc3VmZml4XFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcIiVzXCIsIHN1ZmZpeCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcHJvbWlzaWZpYWJsZU1ldGhvZHMob2JqLCBzdWZmaXgsIHN1ZmZpeFJlZ2V4cCwgZmlsdGVyKSB7XG4gICAgdmFyIGtleXMgPSB1dGlsLmluaGVyaXRlZERhdGFLZXlzKG9iaik7XG4gICAgdmFyIHJldCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgIHZhciBwYXNzZXNEZWZhdWx0RmlsdGVyID0gZmlsdGVyID09PSBkZWZhdWx0RmlsdGVyXG4gICAgICAgICAgICA/IHRydWUgOiBkZWZhdWx0RmlsdGVyKGtleSwgdmFsdWUsIG9iaik7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgIWlzUHJvbWlzaWZpZWQodmFsdWUpICYmXG4gICAgICAgICAgICAhaGFzUHJvbWlzaWZpZWQob2JqLCBrZXksIHN1ZmZpeCkgJiZcbiAgICAgICAgICAgIGZpbHRlcihrZXksIHZhbHVlLCBvYmosIHBhc3Nlc0RlZmF1bHRGaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXQucHVzaChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja1ZhbGlkKHJldCwgc3VmZml4LCBzdWZmaXhSZWdleHApO1xuICAgIHJldHVybiByZXQ7XG59XG5cbnZhciBlc2NhcGVJZGVudFJlZ2V4ID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWyRdKS8sIFwiXFxcXCRcIik7XG59O1xuXG52YXIgbWFrZU5vZGVQcm9taXNpZmllZEV2YWw7XG5pZiAoIXRydWUpIHtcbnZhciBzd2l0Y2hDYXNlQXJndW1lbnRPcmRlciA9IGZ1bmN0aW9uKGxpa2VseUFyZ3VtZW50Q291bnQpIHtcbiAgICB2YXIgcmV0ID0gW2xpa2VseUFyZ3VtZW50Q291bnRdO1xuICAgIHZhciBtaW4gPSBNYXRoLm1heCgwLCBsaWtlbHlBcmd1bWVudENvdW50IC0gMSAtIDMpO1xuICAgIGZvcih2YXIgaSA9IGxpa2VseUFyZ3VtZW50Q291bnQgLSAxOyBpID49IG1pbjsgLS1pKSB7XG4gICAgICAgIHJldC5wdXNoKGkpO1xuICAgIH1cbiAgICBmb3IodmFyIGkgPSBsaWtlbHlBcmd1bWVudENvdW50ICsgMTsgaSA8PSAzOyArK2kpIHtcbiAgICAgICAgcmV0LnB1c2goaSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG52YXIgYXJndW1lbnRTZXF1ZW5jZSA9IGZ1bmN0aW9uKGFyZ3VtZW50Q291bnQpIHtcbiAgICByZXR1cm4gdXRpbC5maWxsZWRSYW5nZShhcmd1bWVudENvdW50LCBcIl9hcmdcIiwgXCJcIik7XG59O1xuXG52YXIgcGFyYW1ldGVyRGVjbGFyYXRpb24gPSBmdW5jdGlvbihwYXJhbWV0ZXJDb3VudCkge1xuICAgIHJldHVybiB1dGlsLmZpbGxlZFJhbmdlKFxuICAgICAgICBNYXRoLm1heChwYXJhbWV0ZXJDb3VudCwgMyksIFwiX2FyZ1wiLCBcIlwiKTtcbn07XG5cbnZhciBwYXJhbWV0ZXJDb3VudCA9IGZ1bmN0aW9uKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbi5sZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGZuLmxlbmd0aCwgMTAyMyArIDEpLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59O1xuXG5tYWtlTm9kZVByb21pc2lmaWVkRXZhbCA9XG5mdW5jdGlvbihjYWxsYmFjaywgcmVjZWl2ZXIsIG9yaWdpbmFsTmFtZSwgZm4sIF8sIG11bHRpQXJncykge1xuICAgIHZhciBuZXdQYXJhbWV0ZXJDb3VudCA9IE1hdGgubWF4KDAsIHBhcmFtZXRlckNvdW50KGZuKSAtIDEpO1xuICAgIHZhciBhcmd1bWVudE9yZGVyID0gc3dpdGNoQ2FzZUFyZ3VtZW50T3JkZXIobmV3UGFyYW1ldGVyQ291bnQpO1xuICAgIHZhciBzaG91bGRQcm94eVRoaXMgPSB0eXBlb2YgY2FsbGJhY2sgPT09IFwic3RyaW5nXCIgfHwgcmVjZWl2ZXIgPT09IFRISVM7XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZUNhbGxGb3JBcmd1bWVudENvdW50KGNvdW50KSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRTZXF1ZW5jZShjb3VudCkuam9pbihcIiwgXCIpO1xuICAgICAgICB2YXIgY29tbWEgPSBjb3VudCA+IDAgPyBcIiwgXCIgOiBcIlwiO1xuICAgICAgICB2YXIgcmV0O1xuICAgICAgICBpZiAoc2hvdWxkUHJveHlUaGlzKSB7XG4gICAgICAgICAgICByZXQgPSBcInJldCA9IGNhbGxiYWNrLmNhbGwodGhpcywge3thcmdzfX0sIG5vZGViYWNrKTsgYnJlYWs7XFxuXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQgPSByZWNlaXZlciA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBcInJldCA9IGNhbGxiYWNrKHt7YXJnc319LCBub2RlYmFjayk7IGJyZWFrO1xcblwiXG4gICAgICAgICAgICAgICAgOiBcInJldCA9IGNhbGxiYWNrLmNhbGwocmVjZWl2ZXIsIHt7YXJnc319LCBub2RlYmFjayk7IGJyZWFrO1xcblwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQucmVwbGFjZShcInt7YXJnc319XCIsIGFyZ3MpLnJlcGxhY2UoXCIsIFwiLCBjb21tYSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVBcmd1bWVudFN3aXRjaENhc2UoKSB7XG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50T3JkZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHJldCArPSBcImNhc2UgXCIgKyBhcmd1bWVudE9yZGVyW2ldICtcIjpcIiArXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVDYWxsRm9yQXJndW1lbnRDb3VudChhcmd1bWVudE9yZGVyW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCArPSBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgdmFyIGkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgYXJnc1tpXSA9IG5vZGViYWNrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgW0NvZGVGb3JDYWxsXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICBcIi5yZXBsYWNlKFwiW0NvZGVGb3JDYWxsXVwiLCAoc2hvdWxkUHJveHlUaGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJyZXQgPSBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcXG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwicmV0ID0gY2FsbGJhY2suYXBwbHkocmVjZWl2ZXIsIGFyZ3MpO1xcblwiKSk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgdmFyIGdldEZ1bmN0aW9uQ29kZSA9IHR5cGVvZiBjYWxsYmFjayA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChcInRoaXMgIT0gbnVsbCA/IHRoaXNbJ1wiK2NhbGxiYWNrK1wiJ10gOiBmblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiZm5cIjtcbiAgICB2YXIgYm9keSA9IFwiJ3VzZSBzdHJpY3QnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgIHZhciByZXQgPSBmdW5jdGlvbiAoUGFyYW1ldGVycykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAndXNlIHN0cmljdCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICBwcm9taXNlLl9jYXB0dXJlU3RhY2tUcmFjZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICB2YXIgbm9kZWJhY2sgPSBub2RlYmFja0ZvclByb21pc2UocHJvbWlzZSwgXCIgKyBtdWx0aUFyZ3MgKyBcIik7ICAgXFxuXFxcbiAgICAgICAgICAgIHZhciByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRyeUNhdGNoKFtHZXRGdW5jdGlvbkNvZGVdKTsgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIHN3aXRjaChsZW4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBbQ29kZUZvclN3aXRjaENhc2VdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIGlmIChyZXQgPT09IGVycm9yT2JqKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBwcm9taXNlLl9yZWplY3RDYWxsYmFjayhtYXliZVdyYXBBc0Vycm9yKHJldC5lKSwgdHJ1ZSwgdHJ1ZSk7XFxuXFxcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIGlmICghcHJvbWlzZS5faXNGYXRlU2VhbGVkKCkpIHByb21pc2UuX3NldEFzeW5jR3VhcmFudGVlZCgpOyAgICAgXFxuXFxcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgbm90RW51bWVyYWJsZVByb3AocmV0LCAnX19pc1Byb21pc2lmaWVkX18nLCB0cnVlKTsgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgcmV0dXJuIHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICBcIi5yZXBsYWNlKFwiW0NvZGVGb3JTd2l0Y2hDYXNlXVwiLCBnZW5lcmF0ZUFyZ3VtZW50U3dpdGNoQ2FzZSgpKVxuICAgICAgICAucmVwbGFjZShcIltHZXRGdW5jdGlvbkNvZGVdXCIsIGdldEZ1bmN0aW9uQ29kZSk7XG4gICAgYm9keSA9IGJvZHkucmVwbGFjZShcIlBhcmFtZXRlcnNcIiwgcGFyYW1ldGVyRGVjbGFyYXRpb24obmV3UGFyYW1ldGVyQ291bnQpKTtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFwiUHJvbWlzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWNlaXZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aXRoQXBwZW5kZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF5YmVXcmFwQXNFcnJvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJub2RlYmFja0ZvclByb21pc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHJ5Q2F0Y2hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JPYmpcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibm90RW51bWVyYWJsZVByb3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiSU5URVJOQUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkpKFxuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICBmbixcbiAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhBcHBlbmRlZCxcbiAgICAgICAgICAgICAgICAgICAgbWF5YmVXcmFwQXNFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgbm9kZWJhY2tGb3JQcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICB1dGlsLnRyeUNhdGNoLFxuICAgICAgICAgICAgICAgICAgICB1dGlsLmVycm9yT2JqLFxuICAgICAgICAgICAgICAgICAgICB1dGlsLm5vdEVudW1lcmFibGVQcm9wLFxuICAgICAgICAgICAgICAgICAgICBJTlRFUk5BTCk7XG59O1xufVxuXG5mdW5jdGlvbiBtYWtlTm9kZVByb21pc2lmaWVkQ2xvc3VyZShjYWxsYmFjaywgcmVjZWl2ZXIsIF8sIGZuLCBfXywgbXVsdGlBcmdzKSB7XG4gICAgdmFyIGRlZmF1bHRUaGlzID0gKGZ1bmN0aW9uKCkge3JldHVybiB0aGlzO30pKCk7XG4gICAgdmFyIG1ldGhvZCA9IGNhbGxiYWNrO1xuICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gZm47XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb21pc2lmaWVkKCkge1xuICAgICAgICB2YXIgX3JlY2VpdmVyID0gcmVjZWl2ZXI7XG4gICAgICAgIGlmIChyZWNlaXZlciA9PT0gVEhJUykgX3JlY2VpdmVyID0gdGhpcztcbiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgICAgIHByb21pc2UuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgICAgIHZhciBjYiA9IHR5cGVvZiBtZXRob2QgPT09IFwic3RyaW5nXCIgJiYgdGhpcyAhPT0gZGVmYXVsdFRoaXNcbiAgICAgICAgICAgID8gdGhpc1ttZXRob2RdIDogY2FsbGJhY2s7XG4gICAgICAgIHZhciBmbiA9IG5vZGViYWNrRm9yUHJvbWlzZShwcm9taXNlLCBtdWx0aUFyZ3MpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2IuYXBwbHkoX3JlY2VpdmVyLCB3aXRoQXBwZW5kZWQoYXJndW1lbnRzLCBmbikpO1xuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgIHByb21pc2UuX3JlamVjdENhbGxiYWNrKG1heWJlV3JhcEFzRXJyb3IoZSksIHRydWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJvbWlzZS5faXNGYXRlU2VhbGVkKCkpIHByb21pc2UuX3NldEFzeW5jR3VhcmFudGVlZCgpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgdXRpbC5ub3RFbnVtZXJhYmxlUHJvcChwcm9taXNpZmllZCwgXCJfX2lzUHJvbWlzaWZpZWRfX1wiLCB0cnVlKTtcbiAgICByZXR1cm4gcHJvbWlzaWZpZWQ7XG59XG5cbnZhciBtYWtlTm9kZVByb21pc2lmaWVkID0gY2FuRXZhbHVhdGVcbiAgICA/IG1ha2VOb2RlUHJvbWlzaWZpZWRFdmFsXG4gICAgOiBtYWtlTm9kZVByb21pc2lmaWVkQ2xvc3VyZTtcblxuZnVuY3Rpb24gcHJvbWlzaWZ5QWxsKG9iaiwgc3VmZml4LCBmaWx0ZXIsIHByb21pc2lmaWVyLCBtdWx0aUFyZ3MpIHtcbiAgICB2YXIgc3VmZml4UmVnZXhwID0gbmV3IFJlZ0V4cChlc2NhcGVJZGVudFJlZ2V4KHN1ZmZpeCkgKyBcIiRcIik7XG4gICAgdmFyIG1ldGhvZHMgPVxuICAgICAgICBwcm9taXNpZmlhYmxlTWV0aG9kcyhvYmosIHN1ZmZpeCwgc3VmZml4UmVnZXhwLCBmaWx0ZXIpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKz0gMikge1xuICAgICAgICB2YXIga2V5ID0gbWV0aG9kc1tpXTtcbiAgICAgICAgdmFyIGZuID0gbWV0aG9kc1tpKzFdO1xuICAgICAgICB2YXIgcHJvbWlzaWZpZWRLZXkgPSBrZXkgKyBzdWZmaXg7XG4gICAgICAgIGlmIChwcm9taXNpZmllciA9PT0gbWFrZU5vZGVQcm9taXNpZmllZCkge1xuICAgICAgICAgICAgb2JqW3Byb21pc2lmaWVkS2V5XSA9XG4gICAgICAgICAgICAgICAgbWFrZU5vZGVQcm9taXNpZmllZChrZXksIFRISVMsIGtleSwgZm4sIHN1ZmZpeCwgbXVsdGlBcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcm9taXNpZmllZCA9IHByb21pc2lmaWVyKGZuLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFrZU5vZGVQcm9taXNpZmllZChrZXksIFRISVMsIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiwgc3VmZml4LCBtdWx0aUFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1dGlsLm5vdEVudW1lcmFibGVQcm9wKHByb21pc2lmaWVkLCBcIl9faXNQcm9taXNpZmllZF9fXCIsIHRydWUpO1xuICAgICAgICAgICAgb2JqW3Byb21pc2lmaWVkS2V5XSA9IHByb21pc2lmaWVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHV0aWwudG9GYXN0UHJvcGVydGllcyhvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIHByb21pc2lmeShjYWxsYmFjaywgcmVjZWl2ZXIsIG11bHRpQXJncykge1xuICAgIHJldHVybiBtYWtlTm9kZVByb21pc2lmaWVkKGNhbGxiYWNrLCByZWNlaXZlciwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywgbnVsbCwgbXVsdGlBcmdzKTtcbn1cblxuUHJvbWlzZS5wcm9taXNpZnkgPSBmdW5jdGlvbiAoZm4sIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImV4cGVjdGluZyBhIGZ1bmN0aW9uIGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGZuKSk7XG4gICAgfVxuICAgIGlmIChpc1Byb21pc2lmaWVkKGZuKSkge1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfVxuICAgIG9wdGlvbnMgPSBPYmplY3Qob3B0aW9ucyk7XG4gICAgdmFyIHJlY2VpdmVyID0gb3B0aW9ucy5jb250ZXh0ID09PSB1bmRlZmluZWQgPyBUSElTIDogb3B0aW9ucy5jb250ZXh0O1xuICAgIHZhciBtdWx0aUFyZ3MgPSAhIW9wdGlvbnMubXVsdGlBcmdzO1xuICAgIHZhciByZXQgPSBwcm9taXNpZnkoZm4sIHJlY2VpdmVyLCBtdWx0aUFyZ3MpO1xuICAgIHV0aWwuY29weURlc2NyaXB0b3JzKGZuLCByZXQsIHByb3BzRmlsdGVyKTtcbiAgICByZXR1cm4gcmV0O1xufTtcblxuUHJvbWlzZS5wcm9taXNpZnlBbGwgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgdGFyZ2V0IG9mIHByb21pc2lmeUFsbCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbiAgICB9XG4gICAgb3B0aW9ucyA9IE9iamVjdChvcHRpb25zKTtcbiAgICB2YXIgbXVsdGlBcmdzID0gISFvcHRpb25zLm11bHRpQXJncztcbiAgICB2YXIgc3VmZml4ID0gb3B0aW9ucy5zdWZmaXg7XG4gICAgaWYgKHR5cGVvZiBzdWZmaXggIT09IFwic3RyaW5nXCIpIHN1ZmZpeCA9IGRlZmF1bHRTdWZmaXg7XG4gICAgdmFyIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgIGlmICh0eXBlb2YgZmlsdGVyICE9PSBcImZ1bmN0aW9uXCIpIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgdmFyIHByb21pc2lmaWVyID0gb3B0aW9ucy5wcm9taXNpZmllcjtcbiAgICBpZiAodHlwZW9mIHByb21pc2lmaWVyICE9PSBcImZ1bmN0aW9uXCIpIHByb21pc2lmaWVyID0gbWFrZU5vZGVQcm9taXNpZmllZDtcblxuICAgIGlmICghdXRpbC5pc0lkZW50aWZpZXIoc3VmZml4KSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInN1ZmZpeCBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSB1dGlsLmluaGVyaXRlZERhdGFLZXlzKHRhcmdldCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRhcmdldFtrZXlzW2ldXTtcbiAgICAgICAgaWYgKGtleXNbaV0gIT09IFwiY29uc3RydWN0b3JcIiAmJlxuICAgICAgICAgICAgdXRpbC5pc0NsYXNzKHZhbHVlKSkge1xuICAgICAgICAgICAgcHJvbWlzaWZ5QWxsKHZhbHVlLnByb3RvdHlwZSwgc3VmZml4LCBmaWx0ZXIsIHByb21pc2lmaWVyLFxuICAgICAgICAgICAgICAgIG11bHRpQXJncyk7XG4gICAgICAgICAgICBwcm9taXNpZnlBbGwodmFsdWUsIHN1ZmZpeCwgZmlsdGVyLCBwcm9taXNpZmllciwgbXVsdGlBcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNpZnlBbGwodGFyZ2V0LCBzdWZmaXgsIGZpbHRlciwgcHJvbWlzaWZpZXIsIG11bHRpQXJncyk7XG59O1xufTtcblxuXG59LHtcIi4vZXJyb3JzXCI6MTIsXCIuL25vZGViYWNrXCI6MjAsXCIuL3V0aWxcIjozNn1dLDI1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihcbiAgICBQcm9taXNlLCBQcm9taXNlQXJyYXksIHRyeUNvbnZlcnRUb1Byb21pc2UsIGFwaVJlamVjdGlvbikge1xudmFyIHV0aWwgPSBfZGVyZXFfKFwiLi91dGlsXCIpO1xudmFyIGlzT2JqZWN0ID0gdXRpbC5pc09iamVjdDtcbnZhciBlczUgPSBfZGVyZXFfKFwiLi9lczVcIik7XG52YXIgRXM2TWFwO1xuaWYgKHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIikgRXM2TWFwID0gTWFwO1xuXG52YXIgbWFwVG9FbnRyaWVzID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNpemUgPSAwO1xuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEVudHJ5KHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdGhpc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgdGhpc1tpbmRleCArIHNpemVdID0ga2V5O1xuICAgICAgICBpbmRleCsrO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBtYXBUb0VudHJpZXMobWFwKSB7XG4gICAgICAgIHNpemUgPSBtYXAuc2l6ZTtcbiAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICB2YXIgcmV0ID0gbmV3IEFycmF5KG1hcC5zaXplICogMik7XG4gICAgICAgIG1hcC5mb3JFYWNoKGV4dHJhY3RFbnRyeSwgcmV0KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xufSkoKTtcblxudmFyIGVudHJpZXNUb01hcCA9IGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgICB2YXIgcmV0ID0gbmV3IEVzNk1hcCgpO1xuICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aCAvIDIgfCAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGVudHJpZXNbbGVuZ3RoICsgaV07XG4gICAgICAgIHZhciB2YWx1ZSA9IGVudHJpZXNbaV07XG4gICAgICAgIHJldC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBQcm9wZXJ0aWVzUHJvbWlzZUFycmF5KG9iaikge1xuICAgIHZhciBpc01hcCA9IGZhbHNlO1xuICAgIHZhciBlbnRyaWVzO1xuICAgIGlmIChFczZNYXAgIT09IHVuZGVmaW5lZCAmJiBvYmogaW5zdGFuY2VvZiBFczZNYXApIHtcbiAgICAgICAgZW50cmllcyA9IG1hcFRvRW50cmllcyhvYmopO1xuICAgICAgICBpc01hcCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleXMgPSBlczUua2V5cyhvYmopO1xuICAgICAgICB2YXIgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGVudHJpZXMgPSBuZXcgQXJyYXkobGVuICogMik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgZW50cmllc1tpXSA9IG9ialtrZXldO1xuICAgICAgICAgICAgZW50cmllc1tpICsgbGVuXSA9IGtleTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNvbnN0cnVjdG9yJChlbnRyaWVzKTtcbiAgICB0aGlzLl9pc01hcCA9IGlzTWFwO1xuICAgIHRoaXMuX2luaXQkKHVuZGVmaW5lZCwgaXNNYXAgPyAtNiA6IC0zKTtcbn1cbnV0aWwuaW5oZXJpdHMoUHJvcGVydGllc1Byb21pc2VBcnJheSwgUHJvbWlzZUFycmF5KTtcblxuUHJvcGVydGllc1Byb21pc2VBcnJheS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuUHJvcGVydGllc1Byb21pc2VBcnJheS5wcm90b3R5cGUuX3Byb21pc2VGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgdGhpcy5fdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgIHZhciB0b3RhbFJlc29sdmVkID0gKyt0aGlzLl90b3RhbFJlc29sdmVkO1xuICAgIGlmICh0b3RhbFJlc29sdmVkID49IHRoaXMuX2xlbmd0aCkge1xuICAgICAgICB2YXIgdmFsO1xuICAgICAgICBpZiAodGhpcy5faXNNYXApIHtcbiAgICAgICAgICAgIHZhbCA9IGVudHJpZXNUb01hcCh0aGlzLl92YWx1ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICB2YXIga2V5T2Zmc2V0ID0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aCgpOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YWxbdGhpcy5fdmFsdWVzW2kgKyBrZXlPZmZzZXRdXSA9IHRoaXMuX3ZhbHVlc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXNvbHZlKHZhbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5Qcm9wZXJ0aWVzUHJvbWlzZUFycmF5LnByb3RvdHlwZS5zaG91bGRDb3B5VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblByb3BlcnRpZXNQcm9taXNlQXJyYXkucHJvdG90eXBlLmdldEFjdHVhbExlbmd0aCA9IGZ1bmN0aW9uIChsZW4pIHtcbiAgICByZXR1cm4gbGVuID4+IDE7XG59O1xuXG5mdW5jdGlvbiBwcm9wcyhwcm9taXNlcykge1xuICAgIHZhciByZXQ7XG4gICAgdmFyIGNhc3RWYWx1ZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocHJvbWlzZXMpO1xuXG4gICAgaWYgKCFpc09iamVjdChjYXN0VmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBhcGlSZWplY3Rpb24oXCJjYW5ub3QgYXdhaXQgcHJvcGVydGllcyBvZiBhIG5vbi1vYmplY3RcXHUwMDBhXFx1MDAwYSAgICBTZWUgaHR0cDovL2dvby5nbC9NcXJGbVhcXHUwMDBhXCIpO1xuICAgIH0gZWxzZSBpZiAoY2FzdFZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXQgPSBjYXN0VmFsdWUuX3RoZW4oXG4gICAgICAgICAgICBQcm9taXNlLnByb3BzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IG5ldyBQcm9wZXJ0aWVzUHJvbWlzZUFycmF5KGNhc3RWYWx1ZSkucHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGlmIChjYXN0VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldC5fcHJvcGFnYXRlRnJvbShjYXN0VmFsdWUsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuXG5Qcm9taXNlLnByb3RvdHlwZS5wcm9wcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvcHModGhpcyk7XG59O1xuXG5Qcm9taXNlLnByb3BzID0gZnVuY3Rpb24gKHByb21pc2VzKSB7XG4gICAgcmV0dXJuIHByb3BzKHByb21pc2VzKTtcbn07XG59O1xuXG59LHtcIi4vZXM1XCI6MTMsXCIuL3V0aWxcIjozNn1dLDI2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xuZnVuY3Rpb24gYXJyYXlNb3ZlKHNyYywgc3JjSW5kZXgsIGRzdCwgZHN0SW5kZXgsIGxlbikge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgZHN0W2ogKyBkc3RJbmRleF0gPSBzcmNbaiArIHNyY0luZGV4XTtcbiAgICAgICAgc3JjW2ogKyBzcmNJbmRleF0gPSB2b2lkIDA7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBRdWV1ZShjYXBhY2l0eSkge1xuICAgIHRoaXMuX2NhcGFjaXR5ID0gY2FwYWNpdHk7XG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICB0aGlzLl9mcm9udCA9IDA7XG59XG5cblF1ZXVlLnByb3RvdHlwZS5fd2lsbEJlT3ZlckNhcGFjaXR5ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwYWNpdHkgPCBzaXplO1xufTtcblxuUXVldWUucHJvdG90eXBlLl9wdXNoT25lID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgIHRoaXMuX2NoZWNrQ2FwYWNpdHkobGVuZ3RoICsgMSk7XG4gICAgdmFyIGkgPSAodGhpcy5fZnJvbnQgKyBsZW5ndGgpICYgKHRoaXMuX2NhcGFjaXR5IC0gMSk7XG4gICAgdGhpc1tpXSA9IGFyZztcbiAgICB0aGlzLl9sZW5ndGggPSBsZW5ndGggKyAxO1xufTtcblxuUXVldWUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZm4sIHJlY2VpdmVyLCBhcmcpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKSArIDM7XG4gICAgaWYgKHRoaXMuX3dpbGxCZU92ZXJDYXBhY2l0eShsZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuX3B1c2hPbmUoZm4pO1xuICAgICAgICB0aGlzLl9wdXNoT25lKHJlY2VpdmVyKTtcbiAgICAgICAgdGhpcy5fcHVzaE9uZShhcmcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBqID0gdGhpcy5fZnJvbnQgKyBsZW5ndGggLSAzO1xuICAgIHRoaXMuX2NoZWNrQ2FwYWNpdHkobGVuZ3RoKTtcbiAgICB2YXIgd3JhcE1hc2sgPSB0aGlzLl9jYXBhY2l0eSAtIDE7XG4gICAgdGhpc1soaiArIDApICYgd3JhcE1hc2tdID0gZm47XG4gICAgdGhpc1soaiArIDEpICYgd3JhcE1hc2tdID0gcmVjZWl2ZXI7XG4gICAgdGhpc1soaiArIDIpICYgd3JhcE1hc2tdID0gYXJnO1xuICAgIHRoaXMuX2xlbmd0aCA9IGxlbmd0aDtcbn07XG5cblF1ZXVlLnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZnJvbnQgPSB0aGlzLl9mcm9udCxcbiAgICAgICAgcmV0ID0gdGhpc1tmcm9udF07XG5cbiAgICB0aGlzW2Zyb250XSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9mcm9udCA9IChmcm9udCArIDEpICYgKHRoaXMuX2NhcGFjaXR5IC0gMSk7XG4gICAgdGhpcy5fbGVuZ3RoLS07XG4gICAgcmV0dXJuIHJldDtcbn07XG5cblF1ZXVlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcbn07XG5cblF1ZXVlLnByb3RvdHlwZS5fY2hlY2tDYXBhY2l0eSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgaWYgKHRoaXMuX2NhcGFjaXR5IDwgc2l6ZSkge1xuICAgICAgICB0aGlzLl9yZXNpemVUbyh0aGlzLl9jYXBhY2l0eSA8PCAxKTtcbiAgICB9XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUuX3Jlc2l6ZVRvID0gZnVuY3Rpb24gKGNhcGFjaXR5KSB7XG4gICAgdmFyIG9sZENhcGFjaXR5ID0gdGhpcy5fY2FwYWNpdHk7XG4gICAgdGhpcy5fY2FwYWNpdHkgPSBjYXBhY2l0eTtcbiAgICB2YXIgZnJvbnQgPSB0aGlzLl9mcm9udDtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5fbGVuZ3RoO1xuICAgIHZhciBtb3ZlSXRlbXNDb3VudCA9IChmcm9udCArIGxlbmd0aCkgJiAob2xkQ2FwYWNpdHkgLSAxKTtcbiAgICBhcnJheU1vdmUodGhpcywgMCwgdGhpcywgb2xkQ2FwYWNpdHksIG1vdmVJdGVtc0NvdW50KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG5cbn0se31dLDI3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihcbiAgICBQcm9taXNlLCBJTlRFUk5BTCwgdHJ5Q29udmVydFRvUHJvbWlzZSwgYXBpUmVqZWN0aW9uKSB7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG5cbnZhciByYWNlTGF0ZXIgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIHJhY2UoYXJyYXksIHByb21pc2UpO1xuICAgIH0pO1xufTtcblxuZnVuY3Rpb24gcmFjZShwcm9taXNlcywgcGFyZW50KSB7XG4gICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocHJvbWlzZXMpO1xuXG4gICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJhY2VMYXRlcihtYXliZVByb21pc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb21pc2VzID0gdXRpbC5hc0FycmF5KHByb21pc2VzKTtcbiAgICAgICAgaWYgKHByb21pc2VzID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImV4cGVjdGluZyBhbiBhcnJheSBvciBhbiBpdGVyYWJsZSBvYmplY3QgYnV0IGdvdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcocHJvbWlzZXMpKTtcbiAgICB9XG5cbiAgICB2YXIgcmV0ID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXQuX3Byb3BhZ2F0ZUZyb20ocGFyZW50LCAzKTtcbiAgICB9XG4gICAgdmFyIGZ1bGZpbGwgPSByZXQuX2Z1bGZpbGw7XG4gICAgdmFyIHJlamVjdCA9IHJldC5fcmVqZWN0O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwcm9taXNlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICB2YXIgdmFsID0gcHJvbWlzZXNbaV07XG5cbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkICYmICEoaSBpbiBwcm9taXNlcykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5jYXN0KHZhbCkuX3RoZW4oZnVsZmlsbCwgcmVqZWN0LCB1bmRlZmluZWQsIHJldCwgbnVsbCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cblByb21pc2UucmFjZSA9IGZ1bmN0aW9uIChwcm9taXNlcykge1xuICAgIHJldHVybiByYWNlKHByb21pc2VzLCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUucmFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmFjZSh0aGlzLCB1bmRlZmluZWQpO1xufTtcblxufTtcblxufSx7XCIuL3V0aWxcIjozNn1dLDI4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFwaVJlamVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Q29udmVydFRvUHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJOQUwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKSB7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xuXG5mdW5jdGlvbiBSZWR1Y3Rpb25Qcm9taXNlQXJyYXkocHJvbWlzZXMsIGZuLCBpbml0aWFsVmFsdWUsIF9lYWNoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciQocHJvbWlzZXMpO1xuICAgIHZhciBjb250ZXh0ID0gUHJvbWlzZS5fZ2V0Q29udGV4dCgpO1xuICAgIHRoaXMuX2ZuID0gdXRpbC5jb250ZXh0QmluZChjb250ZXh0LCBmbik7XG4gICAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IFByb21pc2UucmVzb2x2ZShpbml0aWFsVmFsdWUpO1xuICAgICAgICBpbml0aWFsVmFsdWUuX2F0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLl9pbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgdGhpcy5fY3VycmVudENhbmNlbGxhYmxlID0gbnVsbDtcbiAgICBpZihfZWFjaCA9PT0gSU5URVJOQUwpIHtcbiAgICAgICAgdGhpcy5fZWFjaFZhbHVlcyA9IEFycmF5KHRoaXMuX2xlbmd0aCk7XG4gICAgfSBlbHNlIGlmIChfZWFjaCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9lYWNoVmFsdWVzID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9lYWNoVmFsdWVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlLl9jYXB0dXJlU3RhY2tUcmFjZSgpO1xuICAgIHRoaXMuX2luaXQkKHVuZGVmaW5lZCwgLTUpO1xufVxudXRpbC5pbmhlcml0cyhSZWR1Y3Rpb25Qcm9taXNlQXJyYXksIFByb21pc2VBcnJheSk7XG5cblJlZHVjdGlvblByb21pc2VBcnJheS5wcm90b3R5cGUuX2dvdEFjY3VtID0gZnVuY3Rpb24oYWNjdW0pIHtcbiAgICBpZiAodGhpcy5fZWFjaFZhbHVlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuX2VhY2hWYWx1ZXMgIT09IG51bGwgJiZcbiAgICAgICAgYWNjdW0gIT09IElOVEVSTkFMKSB7XG4gICAgICAgIHRoaXMuX2VhY2hWYWx1ZXMucHVzaChhY2N1bSk7XG4gICAgfVxufTtcblxuUmVkdWN0aW9uUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fZWFjaENvbXBsZXRlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAodGhpcy5fZWFjaFZhbHVlcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lYWNoVmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZWFjaFZhbHVlcztcbn07XG5cblJlZHVjdGlvblByb21pc2VBcnJheS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbigpIHt9O1xuXG5SZWR1Y3Rpb25Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9yZXNvbHZlRW1wdHlBcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3Jlc29sdmUodGhpcy5fZWFjaFZhbHVlcyAhPT0gdW5kZWZpbmVkID8gdGhpcy5fZWFjaFZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5faW5pdGlhbFZhbHVlKTtcbn07XG5cblJlZHVjdGlvblByb21pc2VBcnJheS5wcm90b3R5cGUuc2hvdWxkQ29weVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5SZWR1Y3Rpb25Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9yZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLl9wcm9taXNlLl9yZXNvbHZlQ2FsbGJhY2sodmFsdWUpO1xuICAgIHRoaXMuX3ZhbHVlcyA9IG51bGw7XG59O1xuXG5SZWR1Y3Rpb25Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9yZXN1bHRDYW5jZWxsZWQgPSBmdW5jdGlvbihzZW5kZXIpIHtcbiAgICBpZiAoc2VuZGVyID09PSB0aGlzLl9pbml0aWFsVmFsdWUpIHJldHVybiB0aGlzLl9jYW5jZWwoKTtcbiAgICBpZiAodGhpcy5faXNSZXNvbHZlZCgpKSByZXR1cm47XG4gICAgdGhpcy5fcmVzdWx0Q2FuY2VsbGVkJCgpO1xuICAgIGlmICh0aGlzLl9jdXJyZW50Q2FuY2VsbGFibGUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDYW5jZWxsYWJsZS5jYW5jZWwoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2luaXRpYWxWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFZhbHVlLmNhbmNlbCgpO1xuICAgIH1cbn07XG5cblJlZHVjdGlvblByb21pc2VBcnJheS5wcm90b3R5cGUuX2l0ZXJhdGUgPSBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YXIgaTtcbiAgICB2YXIgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcbiAgICBpZiAodGhpcy5faW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9pbml0aWFsVmFsdWU7XG4gICAgICAgIGkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gUHJvbWlzZS5yZXNvbHZlKHZhbHVlc1swXSk7XG4gICAgICAgIGkgPSAxO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRDYW5jZWxsYWJsZSA9IHZhbHVlO1xuXG4gICAgZm9yICh2YXIgaiA9IGk7IGogPCBsZW5ndGg7ICsraikge1xuICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gdmFsdWVzW2pdO1xuICAgICAgICBpZiAobWF5YmVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgbWF5YmVQcm9taXNlLnN1cHByZXNzVW5oYW5kbGVkUmVqZWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZS5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIGN0eCA9IHtcbiAgICAgICAgICAgICAgICBhY2N1bTogbnVsbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVzW2ldLFxuICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgICAgICAgICAgICAgIGFycmF5OiB0aGlzXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLl90aGVuKGdvdEFjY3VtLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY3R4LCB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICBpZiAoKGkgJiAxMjcpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuX3NldE5vQXN5bmNHdWFyYW50ZWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9lYWNoVmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgLl90aGVuKHRoaXMuX2VhY2hDb21wbGV0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbHVlLl90aGVuKGNvbXBsZXRlZCwgY29tcGxldGVkLCB1bmRlZmluZWQsIHZhbHVlLCB0aGlzKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIChmbiwgaW5pdGlhbFZhbHVlKSB7XG4gICAgcmV0dXJuIHJlZHVjZSh0aGlzLCBmbiwgaW5pdGlhbFZhbHVlLCBudWxsKTtcbn07XG5cblByb21pc2UucmVkdWNlID0gZnVuY3Rpb24gKHByb21pc2VzLCBmbiwgaW5pdGlhbFZhbHVlLCBfZWFjaCkge1xuICAgIHJldHVybiByZWR1Y2UocHJvbWlzZXMsIGZuLCBpbml0aWFsVmFsdWUsIF9lYWNoKTtcbn07XG5cbmZ1bmN0aW9uIGNvbXBsZXRlZCh2YWx1ZU9yUmVhc29uLCBhcnJheSkge1xuICAgIGlmICh0aGlzLmlzRnVsZmlsbGVkKCkpIHtcbiAgICAgICAgYXJyYXkuX3Jlc29sdmUodmFsdWVPclJlYXNvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXkuX3JlamVjdCh2YWx1ZU9yUmVhc29uKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZShwcm9taXNlcywgZm4sIGluaXRpYWxWYWx1ZSwgX2VhY2gpIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImV4cGVjdGluZyBhIGZ1bmN0aW9uIGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGZuKSk7XG4gICAgfVxuICAgIHZhciBhcnJheSA9IG5ldyBSZWR1Y3Rpb25Qcm9taXNlQXJyYXkocHJvbWlzZXMsIGZuLCBpbml0aWFsVmFsdWUsIF9lYWNoKTtcbiAgICByZXR1cm4gYXJyYXkucHJvbWlzZSgpO1xufVxuXG5mdW5jdGlvbiBnb3RBY2N1bShhY2N1bSkge1xuICAgIHRoaXMuYWNjdW0gPSBhY2N1bTtcbiAgICB0aGlzLmFycmF5Ll9nb3RBY2N1bShhY2N1bSk7XG4gICAgdmFyIHZhbHVlID0gdHJ5Q29udmVydFRvUHJvbWlzZSh0aGlzLnZhbHVlLCB0aGlzLmFycmF5Ll9wcm9taXNlKTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHRoaXMuYXJyYXkuX2N1cnJlbnRDYW5jZWxsYWJsZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWUuX3RoZW4oZ290VmFsdWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLCB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnb3RWYWx1ZS5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdvdFZhbHVlKHZhbHVlKSB7XG4gICAgdmFyIGFycmF5ID0gdGhpcy5hcnJheTtcbiAgICB2YXIgcHJvbWlzZSA9IGFycmF5Ll9wcm9taXNlO1xuICAgIHZhciBmbiA9IHRyeUNhdGNoKGFycmF5Ll9mbik7XG4gICAgcHJvbWlzZS5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgcmV0O1xuICAgIGlmIChhcnJheS5fZWFjaFZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldCA9IGZuLmNhbGwocHJvbWlzZS5fYm91bmRWYWx1ZSgpLCB2YWx1ZSwgdGhpcy5pbmRleCwgdGhpcy5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IGZuLmNhbGwocHJvbWlzZS5fYm91bmRWYWx1ZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2N1bSwgdmFsdWUsIHRoaXMuaW5kZXgsIHRoaXMubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgYXJyYXkuX2N1cnJlbnRDYW5jZWxsYWJsZSA9IHJldDtcbiAgICB9XG4gICAgdmFyIHByb21pc2VDcmVhdGVkID0gcHJvbWlzZS5fcG9wQ29udGV4dCgpO1xuICAgIGRlYnVnLmNoZWNrRm9yZ290dGVuUmV0dXJucyhcbiAgICAgICAgcmV0LFxuICAgICAgICBwcm9taXNlQ3JlYXRlZCxcbiAgICAgICAgYXJyYXkuX2VhY2hWYWx1ZXMgIT09IHVuZGVmaW5lZCA/IFwiUHJvbWlzZS5lYWNoXCIgOiBcIlByb21pc2UucmVkdWNlXCIsXG4gICAgICAgIHByb21pc2VcbiAgICApO1xuICAgIHJldHVybiByZXQ7XG59XG59O1xuXG59LHtcIi4vdXRpbFwiOjM2fV0sMjk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdXRpbCA9IF9kZXJlcV8oXCIuL3V0aWxcIik7XG52YXIgc2NoZWR1bGU7XG52YXIgbm9Bc3luY1NjaGVkdWxlciA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGFzeW5jIHNjaGVkdWxlciBhdmFpbGFibGVcXHUwMDBhXFx1MDAwYSAgICBTZWUgaHR0cDovL2dvby5nbC9NcXJGbVhcXHUwMDBhXCIpO1xufTtcbnZhciBOYXRpdmVQcm9taXNlID0gdXRpbC5nZXROYXRpdmVQcm9taXNlKCk7XG5pZiAodXRpbC5pc05vZGUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgR2xvYmFsU2V0SW1tZWRpYXRlID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICB2YXIgUHJvY2Vzc05leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICBzY2hlZHVsZSA9IHV0aWwuaXNSZWNlbnROb2RlXG4gICAgICAgICAgICAgICAgPyBmdW5jdGlvbihmbikgeyBHbG9iYWxTZXRJbW1lZGlhdGUuY2FsbChnbG9iYWwsIGZuKTsgfVxuICAgICAgICAgICAgICAgIDogZnVuY3Rpb24oZm4pIHsgUHJvY2Vzc05leHRUaWNrLmNhbGwocHJvY2VzcywgZm4pOyB9O1xufSBlbHNlIGlmICh0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgIHR5cGVvZiBOYXRpdmVQcm9taXNlLnJlc29sdmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBuYXRpdmVQcm9taXNlID0gTmF0aXZlUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgc2NoZWR1bGUgPSBmdW5jdGlvbihmbikge1xuICAgICAgICBuYXRpdmVQcm9taXNlLnRoZW4oZm4pO1xuICAgIH07XG59IGVsc2UgaWYgKCh0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gXCJ1bmRlZmluZWRcIikgJiZcbiAgICAgICAgICAhKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgICAgICAgICh3aW5kb3cubmF2aWdhdG9yLnN0YW5kYWxvbmUgfHwgd2luZG93LmNvcmRvdmEpKSAmJlxuICAgICAgICAgIChcImNsYXNzTGlzdFwiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpIHtcbiAgICBzY2hlZHVsZSA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZhciBvcHRzID0ge2F0dHJpYnV0ZXM6IHRydWV9O1xuICAgICAgICB2YXIgdG9nZ2xlU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmFyIG8yID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBkaXYuY2xhc3NMaXN0LnRvZ2dsZShcImZvb1wiKTtcbiAgICAgICAgICAgIHRvZ2dsZVNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgbzIub2JzZXJ2ZShkaXYyLCBvcHRzKTtcblxuICAgICAgICB2YXIgc2NoZWR1bGVUb2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0b2dnbGVTY2hlZHVsZWQpIHJldHVybjtcbiAgICAgICAgICAgIHRvZ2dsZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgICAgICBkaXYyLmNsYXNzTGlzdC50b2dnbGUoXCJmb29cIik7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNjaGVkdWxlKGZuKSB7XG4gICAgICAgICAgICB2YXIgbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIG8uZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG8ub2JzZXJ2ZShkaXYsIG9wdHMpO1xuICAgICAgICAgICAgc2NoZWR1bGVUb2dnbGUoKTtcbiAgICAgICAgfTtcbiAgICB9KSgpO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgc2NoZWR1bGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICB9O1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0VGltZW91dCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHNjaGVkdWxlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG59IGVsc2Uge1xuICAgIHNjaGVkdWxlID0gbm9Bc3luY1NjaGVkdWxlcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gc2NoZWR1bGU7XG5cbn0se1wiLi91dGlsXCI6MzZ9XSwzMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID1cbiAgICBmdW5jdGlvbihQcm9taXNlLCBQcm9taXNlQXJyYXksIGRlYnVnKSB7XG52YXIgUHJvbWlzZUluc3BlY3Rpb24gPSBQcm9taXNlLlByb21pc2VJbnNwZWN0aW9uO1xudmFyIHV0aWwgPSBfZGVyZXFfKFwiLi91dGlsXCIpO1xuXG5mdW5jdGlvbiBTZXR0bGVkUHJvbWlzZUFycmF5KHZhbHVlcykge1xuICAgIHRoaXMuY29uc3RydWN0b3IkKHZhbHVlcyk7XG59XG51dGlsLmluaGVyaXRzKFNldHRsZWRQcm9taXNlQXJyYXksIFByb21pc2VBcnJheSk7XG5cblNldHRsZWRQcm9taXNlQXJyYXkucHJvdG90eXBlLl9wcm9taXNlUmVzb2x2ZWQgPSBmdW5jdGlvbiAoaW5kZXgsIGluc3BlY3Rpb24pIHtcbiAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gaW5zcGVjdGlvbjtcbiAgICB2YXIgdG90YWxSZXNvbHZlZCA9ICsrdGhpcy5fdG90YWxSZXNvbHZlZDtcbiAgICBpZiAodG90YWxSZXNvbHZlZCA+PSB0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZSh0aGlzLl92YWx1ZXMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuU2V0dGxlZFByb21pc2VBcnJheS5wcm90b3R5cGUuX3Byb21pc2VGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgdmFyIHJldCA9IG5ldyBQcm9taXNlSW5zcGVjdGlvbigpO1xuICAgIHJldC5fYml0RmllbGQgPSAzMzU1NDQzMjtcbiAgICByZXQuX3NldHRsZWRWYWx1ZUZpZWxkID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VSZXNvbHZlZChpbmRleCwgcmV0KTtcbn07XG5TZXR0bGVkUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZVJlamVjdGVkID0gZnVuY3Rpb24gKHJlYXNvbiwgaW5kZXgpIHtcbiAgICB2YXIgcmV0ID0gbmV3IFByb21pc2VJbnNwZWN0aW9uKCk7XG4gICAgcmV0Ll9iaXRGaWVsZCA9IDE2Nzc3MjE2O1xuICAgIHJldC5fc2V0dGxlZFZhbHVlRmllbGQgPSByZWFzb247XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VSZXNvbHZlZChpbmRleCwgcmV0KTtcbn07XG5cblByb21pc2Uuc2V0dGxlID0gZnVuY3Rpb24gKHByb21pc2VzKSB7XG4gICAgZGVidWcuZGVwcmVjYXRlZChcIi5zZXR0bGUoKVwiLCBcIi5yZWZsZWN0KClcIik7XG4gICAgcmV0dXJuIG5ldyBTZXR0bGVkUHJvbWlzZUFycmF5KHByb21pc2VzKS5wcm9taXNlKCk7XG59O1xuXG5Qcm9taXNlLmFsbFNldHRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZXMpIHtcbiAgICByZXR1cm4gbmV3IFNldHRsZWRQcm9taXNlQXJyYXkocHJvbWlzZXMpLnByb21pc2UoKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLnNldHRsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5zZXR0bGUodGhpcyk7XG59O1xufTtcblxufSx7XCIuL3V0aWxcIjozNn1dLDMxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPVxuZnVuY3Rpb24oUHJvbWlzZSwgUHJvbWlzZUFycmF5LCBhcGlSZWplY3Rpb24pIHtcbnZhciB1dGlsID0gX2RlcmVxXyhcIi4vdXRpbFwiKTtcbnZhciBSYW5nZUVycm9yID0gX2RlcmVxXyhcIi4vZXJyb3JzXCIpLlJhbmdlRXJyb3I7XG52YXIgQWdncmVnYXRlRXJyb3IgPSBfZGVyZXFfKFwiLi9lcnJvcnNcIikuQWdncmVnYXRlRXJyb3I7XG52YXIgaXNBcnJheSA9IHV0aWwuaXNBcnJheTtcbnZhciBDQU5DRUxMQVRJT04gPSB7fTtcblxuXG5mdW5jdGlvbiBTb21lUHJvbWlzZUFycmF5KHZhbHVlcykge1xuICAgIHRoaXMuY29uc3RydWN0b3IkKHZhbHVlcyk7XG4gICAgdGhpcy5faG93TWFueSA9IDA7XG4gICAgdGhpcy5fdW53cmFwID0gZmFsc2U7XG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcbn1cbnV0aWwuaW5oZXJpdHMoU29tZVByb21pc2VBcnJheSwgUHJvbWlzZUFycmF5KTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9ob3dNYW55ID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUoW10pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2luaXQkKHVuZGVmaW5lZCwgLTUpO1xuICAgIHZhciBpc0FycmF5UmVzb2x2ZWQgPSBpc0FycmF5KHRoaXMuX3ZhbHVlcyk7XG4gICAgaWYgKCF0aGlzLl9pc1Jlc29sdmVkKCkgJiZcbiAgICAgICAgaXNBcnJheVJlc29sdmVkICYmXG4gICAgICAgIHRoaXMuX2hvd01hbnkgPiB0aGlzLl9jYW5Qb3NzaWJseUZ1bGZpbGwoKSkge1xuICAgICAgICB0aGlzLl9yZWplY3QodGhpcy5fZ2V0UmFuZ2VFcnJvcih0aGlzLmxlbmd0aCgpKSk7XG4gICAgfVxufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5faW5pdCgpO1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuc2V0VW53cmFwID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3Vud3JhcCA9IHRydWU7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5ob3dNYW55ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9ob3dNYW55O1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuc2V0SG93TWFueSA9IGZ1bmN0aW9uIChjb3VudCkge1xuICAgIHRoaXMuX2hvd01hbnkgPSBjb3VudDtcbn07XG5cblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLl9wcm9taXNlRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdGhpcy5fYWRkRnVsZmlsbGVkKHZhbHVlKTtcbiAgICBpZiAodGhpcy5fZnVsZmlsbGVkKCkgPT09IHRoaXMuaG93TWFueSgpKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcy5sZW5ndGggPSB0aGlzLmhvd01hbnkoKTtcbiAgICAgICAgaWYgKHRoaXMuaG93TWFueSgpID09PSAxICYmIHRoaXMuX3Vud3JhcCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSh0aGlzLl92YWx1ZXNbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSh0aGlzLl92YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG5cbn07XG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZVJlamVjdGVkID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHRoaXMuX2FkZFJlamVjdGVkKHJlYXNvbik7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrT3V0Y29tZSgpO1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuX3Byb21pc2VDYW5jZWxsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3ZhbHVlcyBpbnN0YW5jZW9mIFByb21pc2UgfHwgdGhpcy5fdmFsdWVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbmNlbCgpO1xuICAgIH1cbiAgICB0aGlzLl9hZGRSZWplY3RlZChDQU5DRUxMQVRJT04pO1xuICAgIHJldHVybiB0aGlzLl9jaGVja091dGNvbWUoKTtcbn07XG5cblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLl9jaGVja091dGNvbWUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5ob3dNYW55KCkgPiB0aGlzLl9jYW5Qb3NzaWJseUZ1bGZpbGwoKSkge1xuICAgICAgICB2YXIgZSA9IG5ldyBBZ2dyZWdhdGVFcnJvcigpO1xuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGgoKTsgaSA8IHRoaXMuX3ZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlc1tpXSAhPT0gQ0FOQ0VMTEFUSU9OKSB7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMuX3ZhbHVlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0KGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLl9mdWxmaWxsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsUmVzb2x2ZWQ7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcmVqZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcy5sZW5ndGggLSB0aGlzLmxlbmd0aCgpO1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuX2FkZFJlamVjdGVkID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHRoaXMuX3ZhbHVlcy5wdXNoKHJlYXNvbik7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fYWRkRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdGhpcy5fdmFsdWVzW3RoaXMuX3RvdGFsUmVzb2x2ZWQrK10gPSB2YWx1ZTtcbn07XG5cblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLl9jYW5Qb3NzaWJseUZ1bGZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoKCkgLSB0aGlzLl9yZWplY3RlZCgpO1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuX2dldFJhbmdlRXJyb3IgPSBmdW5jdGlvbiAoY291bnQpIHtcbiAgICB2YXIgbWVzc2FnZSA9IFwiSW5wdXQgYXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0IFwiICtcbiAgICAgICAgICAgIHRoaXMuX2hvd01hbnkgKyBcIiBpdGVtcyBidXQgY29udGFpbnMgb25seSBcIiArIGNvdW50ICsgXCIgaXRlbXNcIjtcbiAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IobWVzc2FnZSk7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcmVzb2x2ZUVtcHR5QXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fcmVqZWN0KHRoaXMuX2dldFJhbmdlRXJyb3IoMCkpO1xufTtcblxuZnVuY3Rpb24gc29tZShwcm9taXNlcywgaG93TWFueSkge1xuICAgIGlmICgoaG93TWFueSB8IDApICE9PSBob3dNYW55IHx8IGhvd01hbnkgPCAwKSB7XG4gICAgICAgIHJldHVybiBhcGlSZWplY3Rpb24oXCJleHBlY3RpbmcgYSBwb3NpdGl2ZSBpbnRlZ2VyXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbiAgICB9XG4gICAgdmFyIHJldCA9IG5ldyBTb21lUHJvbWlzZUFycmF5KHByb21pc2VzKTtcbiAgICB2YXIgcHJvbWlzZSA9IHJldC5wcm9taXNlKCk7XG4gICAgcmV0LnNldEhvd01hbnkoaG93TWFueSk7XG4gICAgcmV0LmluaXQoKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuUHJvbWlzZS5zb21lID0gZnVuY3Rpb24gKHByb21pc2VzLCBob3dNYW55KSB7XG4gICAgcmV0dXJuIHNvbWUocHJvbWlzZXMsIGhvd01hbnkpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuc29tZSA9IGZ1bmN0aW9uIChob3dNYW55KSB7XG4gICAgcmV0dXJuIHNvbWUodGhpcywgaG93TWFueSk7XG59O1xuXG5Qcm9taXNlLl9Tb21lUHJvbWlzZUFycmF5ID0gU29tZVByb21pc2VBcnJheTtcbn07XG5cbn0se1wiLi9lcnJvcnNcIjoxMixcIi4vdXRpbFwiOjM2fV0sMzI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UpIHtcbmZ1bmN0aW9uIFByb21pc2VJbnNwZWN0aW9uKHByb21pc2UpIHtcbiAgICBpZiAocHJvbWlzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLl90YXJnZXQoKTtcbiAgICAgICAgdGhpcy5fYml0RmllbGQgPSBwcm9taXNlLl9iaXRGaWVsZDtcbiAgICAgICAgdGhpcy5fc2V0dGxlZFZhbHVlRmllbGQgPSBwcm9taXNlLl9pc0ZhdGVTZWFsZWQoKVxuICAgICAgICAgICAgPyBwcm9taXNlLl9zZXR0bGVkVmFsdWUoKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2JpdEZpZWxkID0gMDtcbiAgICAgICAgdGhpcy5fc2V0dGxlZFZhbHVlRmllbGQgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5Qcm9taXNlSW5zcGVjdGlvbi5wcm90b3R5cGUuX3NldHRsZWRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXR0bGVkVmFsdWVGaWVsZDtcbn07XG5cbnZhciB2YWx1ZSA9IFByb21pc2VJbnNwZWN0aW9uLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuaXNGdWxmaWxsZWQoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2Fubm90IGdldCBmdWxmaWxsbWVudCB2YWx1ZSBvZiBhIG5vbi1mdWxmaWxsZWQgcHJvbWlzZVxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zZXR0bGVkVmFsdWUoKTtcbn07XG5cbnZhciByZWFzb24gPSBQcm9taXNlSW5zcGVjdGlvbi5wcm90b3R5cGUuZXJyb3IgPVxuUHJvbWlzZUluc3BlY3Rpb24ucHJvdG90eXBlLnJlYXNvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuaXNSZWplY3RlZCgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYW5ub3QgZ2V0IHJlamVjdGlvbiByZWFzb24gb2YgYSBub24tcmVqZWN0ZWQgcHJvbWlzZVxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zZXR0bGVkVmFsdWUoKTtcbn07XG5cbnZhciBpc0Z1bGZpbGxlZCA9IFByb21pc2VJbnNwZWN0aW9uLnByb3RvdHlwZS5pc0Z1bGZpbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiAzMzU1NDQzMikgIT09IDA7XG59O1xuXG52YXIgaXNSZWplY3RlZCA9IFByb21pc2VJbnNwZWN0aW9uLnByb3RvdHlwZS5pc1JlamVjdGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDA7XG59O1xuXG52YXIgaXNQZW5kaW5nID0gUHJvbWlzZUluc3BlY3Rpb24ucHJvdG90eXBlLmlzUGVuZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2JpdEZpZWxkICYgNTAzOTcxODQpID09PSAwO1xufTtcblxudmFyIGlzUmVzb2x2ZWQgPSBQcm9taXNlSW5zcGVjdGlvbi5wcm90b3R5cGUuaXNSZXNvbHZlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKHRoaXMuX2JpdEZpZWxkICYgNTAzMzE2NDgpICE9PSAwO1xufTtcblxuUHJvbWlzZUluc3BlY3Rpb24ucHJvdG90eXBlLmlzQ2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDg0NTQxNDQpICE9PSAwO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX19pc0NhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiA2NTUzNikgPT09IDY1NTM2O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2lzQ2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldCgpLl9faXNDYW5jZWxsZWQoKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmlzQ2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICh0aGlzLl90YXJnZXQoKS5fYml0RmllbGQgJiA4NDU0MTQ0KSAhPT0gMDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBpc1BlbmRpbmcuY2FsbCh0aGlzLl90YXJnZXQoKSk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5pc1JlamVjdGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGlzUmVqZWN0ZWQuY2FsbCh0aGlzLl90YXJnZXQoKSk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5pc0Z1bGZpbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBpc0Z1bGZpbGxlZC5jYWxsKHRoaXMuX3RhcmdldCgpKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmlzUmVzb2x2ZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaXNSZXNvbHZlZC5jYWxsKHRoaXMuX3RhcmdldCgpKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlLmNhbGwodGhpcy5fdGFyZ2V0KCkpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUucmVhc29uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXMuX3RhcmdldCgpO1xuICAgIHRhcmdldC5fdW5zZXRSZWplY3Rpb25Jc1VuaGFuZGxlZCgpO1xuICAgIHJldHVybiByZWFzb24uY2FsbCh0YXJnZXQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3ZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRsZWRWYWx1ZSgpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3JlYXNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3Vuc2V0UmVqZWN0aW9uSXNVbmhhbmRsZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGxlZFZhbHVlKCk7XG59O1xuXG5Qcm9taXNlLlByb21pc2VJbnNwZWN0aW9uID0gUHJvbWlzZUluc3BlY3Rpb247XG59O1xuXG59LHt9XSwzMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgSU5URVJOQUwpIHtcbnZhciB1dGlsID0gX2RlcmVxXyhcIi4vdXRpbFwiKTtcbnZhciBlcnJvck9iaiA9IHV0aWwuZXJyb3JPYmo7XG52YXIgaXNPYmplY3QgPSB1dGlsLmlzT2JqZWN0O1xuXG5mdW5jdGlvbiB0cnlDb252ZXJ0VG9Qcm9taXNlKG9iaiwgY29udGV4dCkge1xuICAgIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBQcm9taXNlKSByZXR1cm4gb2JqO1xuICAgICAgICB2YXIgdGhlbiA9IGdldFRoZW4ob2JqKTtcbiAgICAgICAgaWYgKHRoZW4gPT09IGVycm9yT2JqKSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dCkgY29udGV4dC5fcHVzaENvbnRleHQoKTtcbiAgICAgICAgICAgIHZhciByZXQgPSBQcm9taXNlLnJlamVjdCh0aGVuLmUpO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQpIGNvbnRleHQuX3BvcENvbnRleHQoKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgaWYgKGlzQW55Qmx1ZWJpcmRQcm9taXNlKG9iaikpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgICAgICAgICAgICAgIG9iai5fdGhlbihcbiAgICAgICAgICAgICAgICAgICAgcmV0Ll9mdWxmaWxsLFxuICAgICAgICAgICAgICAgICAgICByZXQuX3JlamVjdCxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICByZXQsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZG9UaGVuYWJsZShvYmosIHRoZW4sIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGRvR2V0VGhlbihvYmopIHtcbiAgICByZXR1cm4gb2JqLnRoZW47XG59XG5cbmZ1bmN0aW9uIGdldFRoZW4ob2JqKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRvR2V0VGhlbihvYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyb3JPYmouZSA9IGU7XG4gICAgICAgIHJldHVybiBlcnJvck9iajtcbiAgICB9XG59XG5cbnZhciBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBpc0FueUJsdWViaXJkUHJvbWlzZShvYmopIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gaGFzUHJvcC5jYWxsKG9iaiwgXCJfcHJvbWlzZTBcIik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb1RoZW5hYmxlKHgsIHRoZW4sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICB2YXIgcmV0ID0gcHJvbWlzZTtcbiAgICBpZiAoY29udGV4dCkgY29udGV4dC5fcHVzaENvbnRleHQoKTtcbiAgICBwcm9taXNlLl9jYXB0dXJlU3RhY2tUcmFjZSgpO1xuICAgIGlmIChjb250ZXh0KSBjb250ZXh0Ll9wb3BDb250ZXh0KCk7XG4gICAgdmFyIHN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICB2YXIgcmVzdWx0ID0gdXRpbC50cnlDYXRjaCh0aGVuKS5jYWxsKHgsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgc3luY2hyb25vdXMgPSBmYWxzZTtcblxuICAgIGlmIChwcm9taXNlICYmIHJlc3VsdCA9PT0gZXJyb3JPYmopIHtcbiAgICAgICAgcHJvbWlzZS5fcmVqZWN0Q2FsbGJhY2socmVzdWx0LmUsIHRydWUsIHRydWUpO1xuICAgICAgICBwcm9taXNlID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIGlmICghcHJvbWlzZSkgcmV0dXJuO1xuICAgICAgICBwcm9taXNlLl9yZXNvbHZlQ2FsbGJhY2sodmFsdWUpO1xuICAgICAgICBwcm9taXNlID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gICAgICAgIGlmICghcHJvbWlzZSkgcmV0dXJuO1xuICAgICAgICBwcm9taXNlLl9yZWplY3RDYWxsYmFjayhyZWFzb24sIHN5bmNocm9ub3VzLCB0cnVlKTtcbiAgICAgICAgcHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbnJldHVybiB0cnlDb252ZXJ0VG9Qcm9taXNlO1xufTtcblxufSx7XCIuL3V0aWxcIjozNn1dLDM0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlLCBJTlRFUk5BTCwgZGVidWcpIHtcbnZhciB1dGlsID0gX2RlcmVxXyhcIi4vdXRpbFwiKTtcbnZhciBUaW1lb3V0RXJyb3IgPSBQcm9taXNlLlRpbWVvdXRFcnJvcjtcblxuZnVuY3Rpb24gSGFuZGxlV3JhcHBlcihoYW5kbGUpICB7XG4gICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7XG59XG5cbkhhbmRsZVdyYXBwZXIucHJvdG90eXBlLl9yZXN1bHRDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5oYW5kbGUpO1xufTtcblxudmFyIGFmdGVyVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gZGVsYXkoK3RoaXMpLnRoZW5SZXR1cm4odmFsdWUpOyB9O1xudmFyIGRlbGF5ID0gUHJvbWlzZS5kZWxheSA9IGZ1bmN0aW9uIChtcywgdmFsdWUpIHtcbiAgICB2YXIgcmV0O1xuICAgIHZhciBoYW5kbGU7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0ID0gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgICAgICAgICAgIC5fdGhlbihhZnRlclZhbHVlLCBudWxsLCBudWxsLCBtcywgdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKGRlYnVnLmNhbmNlbGxhdGlvbigpICYmIHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0Ll9zZXRPbkNhbmNlbCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgICAgIGhhbmRsZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHJldC5fZnVsZmlsbCgpOyB9LCArbXMpO1xuICAgICAgICBpZiAoZGVidWcuY2FuY2VsbGF0aW9uKCkpIHtcbiAgICAgICAgICAgIHJldC5fc2V0T25DYW5jZWwobmV3IEhhbmRsZVdyYXBwZXIoaGFuZGxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0Ll9jYXB0dXJlU3RhY2tUcmFjZSgpO1xuICAgIH1cbiAgICByZXQuX3NldEFzeW5jR3VhcmFudGVlZCgpO1xuICAgIHJldHVybiByZXQ7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5kZWxheSA9IGZ1bmN0aW9uIChtcykge1xuICAgIHJldHVybiBkZWxheShtcywgdGhpcyk7XG59O1xuXG52YXIgYWZ0ZXJUaW1lb3V0ID0gZnVuY3Rpb24gKHByb21pc2UsIG1lc3NhZ2UsIHBhcmVudCkge1xuICAgIHZhciBlcnI7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIGVyciA9IG1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnIgPSBuZXcgVGltZW91dEVycm9yKFwib3BlcmF0aW9uIHRpbWVkIG91dFwiKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVyciA9IG5ldyBUaW1lb3V0RXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHV0aWwubWFya0FzT3JpZ2luYXRpbmdGcm9tUmVqZWN0aW9uKGVycik7XG4gICAgcHJvbWlzZS5fYXR0YWNoRXh0cmFUcmFjZShlcnIpO1xuICAgIHByb21pc2UuX3JlamVjdChlcnIpO1xuXG4gICAgaWYgKHBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmVudC5jYW5jZWwoKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBzdWNjZXNzQ2xlYXIodmFsdWUpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5oYW5kbGUpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZmFpbHVyZUNsZWFyKHJlYXNvbikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmhhbmRsZSk7XG4gICAgdGhyb3cgcmVhc29uO1xufVxuXG5Qcm9taXNlLnByb3RvdHlwZS50aW1lb3V0ID0gZnVuY3Rpb24gKG1zLCBtZXNzYWdlKSB7XG4gICAgbXMgPSArbXM7XG4gICAgdmFyIHJldCwgcGFyZW50O1xuXG4gICAgdmFyIGhhbmRsZVdyYXBwZXIgPSBuZXcgSGFuZGxlV3JhcHBlcihzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRUaW1lb3V0KCkge1xuICAgICAgICBpZiAocmV0LmlzUGVuZGluZygpKSB7XG4gICAgICAgICAgICBhZnRlclRpbWVvdXQocmV0LCBtZXNzYWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfSwgbXMpKTtcblxuICAgIGlmIChkZWJ1Zy5jYW5jZWxsYXRpb24oKSkge1xuICAgICAgICBwYXJlbnQgPSB0aGlzLnRoZW4oKTtcbiAgICAgICAgcmV0ID0gcGFyZW50Ll90aGVuKHN1Y2Nlc3NDbGVhciwgZmFpbHVyZUNsZWFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCwgaGFuZGxlV3JhcHBlciwgdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0Ll9zZXRPbkNhbmNlbChoYW5kbGVXcmFwcGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSB0aGlzLl90aGVuKHN1Y2Nlc3NDbGVhciwgZmFpbHVyZUNsZWFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCwgaGFuZGxlV3JhcHBlciwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxufTtcblxufSx7XCIuL3V0aWxcIjozNn1dLDM1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUHJvbWlzZSwgYXBpUmVqZWN0aW9uLCB0cnlDb252ZXJ0VG9Qcm9taXNlLFxuICAgIGNyZWF0ZUNvbnRleHQsIElOVEVSTkFMLCBkZWJ1Zykge1xuICAgIHZhciB1dGlsID0gX2RlcmVxXyhcIi4vdXRpbFwiKTtcbiAgICB2YXIgVHlwZUVycm9yID0gX2RlcmVxXyhcIi4vZXJyb3JzXCIpLlR5cGVFcnJvcjtcbiAgICB2YXIgaW5oZXJpdHMgPSBfZGVyZXFfKFwiLi91dGlsXCIpLmluaGVyaXRzO1xuICAgIHZhciBlcnJvck9iaiA9IHV0aWwuZXJyb3JPYmo7XG4gICAgdmFyIHRyeUNhdGNoID0gdXRpbC50cnlDYXRjaDtcbiAgICB2YXIgTlVMTCA9IHt9O1xuXG4gICAgZnVuY3Rpb24gdGhyb3dlcihlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlO30sIDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhc3RQcmVzZXJ2aW5nRGlzcG9zYWJsZSh0aGVuYWJsZSkge1xuICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gdHJ5Q29udmVydFRvUHJvbWlzZSh0aGVuYWJsZSk7XG4gICAgICAgIGlmIChtYXliZVByb21pc2UgIT09IHRoZW5hYmxlICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhlbmFibGUuX2lzRGlzcG9zYWJsZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhlbmFibGUuX2dldERpc3Bvc2VyID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIHRoZW5hYmxlLl9pc0Rpc3Bvc2FibGUoKSkge1xuICAgICAgICAgICAgbWF5YmVQcm9taXNlLl9zZXREaXNwb3NhYmxlKHRoZW5hYmxlLl9nZXREaXNwb3NlcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF5YmVQcm9taXNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwb3NlKHJlc291cmNlcywgaW5zcGVjdGlvbikge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHZhciBsZW4gPSByZXNvdXJjZXMubGVuZ3RoO1xuICAgICAgICB2YXIgcmV0ID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRvcigpIHtcbiAgICAgICAgICAgIGlmIChpID49IGxlbikgcmV0dXJuIHJldC5fZnVsZmlsbCgpO1xuICAgICAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IGNhc3RQcmVzZXJ2aW5nRGlzcG9zYWJsZShyZXNvdXJjZXNbaSsrXSk7XG4gICAgICAgICAgICBpZiAobWF5YmVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSAmJlxuICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZS5faXNEaXNwb3NhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBtYXliZVByb21pc2UgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVQcm9taXNlLl9nZXREaXNwb3NlcigpLnRyeURpc3Bvc2UoaW5zcGVjdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMucHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dlcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZS5fdGhlbihpdGVyYXRvciwgdGhyb3dlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcigpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdG9yKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRGlzcG9zZXIoZGF0YSwgcHJvbWlzZSwgY29udGV4dCkge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHByb21pc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICAgIH1cblxuICAgIERpc3Bvc2VyLnByb3RvdHlwZS5kYXRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9O1xuXG4gICAgRGlzcG9zZXIucHJvdG90eXBlLnByb21pc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICAgIH07XG5cbiAgICBEaXNwb3Nlci5wcm90b3R5cGUucmVzb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb21pc2UoKS5pc0Z1bGZpbGxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlKCkudmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTlVMTDtcbiAgICB9O1xuXG4gICAgRGlzcG9zZXIucHJvdG90eXBlLnRyeURpc3Bvc2UgPSBmdW5jdGlvbihpbnNwZWN0aW9uKSB7XG4gICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkKSBjb250ZXh0Ll9wdXNoQ29udGV4dCgpO1xuICAgICAgICB2YXIgcmV0ID0gcmVzb3VyY2UgIT09IE5VTExcbiAgICAgICAgICAgID8gdGhpcy5kb0Rpc3Bvc2UocmVzb3VyY2UsIGluc3BlY3Rpb24pIDogbnVsbDtcbiAgICAgICAgaWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkgY29udGV4dC5fcG9wQ29udGV4dCgpO1xuICAgICAgICB0aGlzLl9wcm9taXNlLl91bnNldERpc3Bvc2FibGUoKTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IG51bGw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcblxuICAgIERpc3Bvc2VyLmlzRGlzcG9zZXIgPSBmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gKGQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBkLnJlc291cmNlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZC50cnlEaXNwb3NlID09PSBcImZ1bmN0aW9uXCIpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBGdW5jdGlvbkRpc3Bvc2VyKGZuLCBwcm9taXNlLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IkKGZuLCBwcm9taXNlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaW5oZXJpdHMoRnVuY3Rpb25EaXNwb3NlciwgRGlzcG9zZXIpO1xuXG4gICAgRnVuY3Rpb25EaXNwb3Nlci5wcm90b3R5cGUuZG9EaXNwb3NlID0gZnVuY3Rpb24gKHJlc291cmNlLCBpbnNwZWN0aW9uKSB7XG4gICAgICAgIHZhciBmbiA9IHRoaXMuZGF0YSgpO1xuICAgICAgICByZXR1cm4gZm4uY2FsbChyZXNvdXJjZSwgcmVzb3VyY2UsIGluc3BlY3Rpb24pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtYXliZVVud3JhcERpc3Bvc2VyKHZhbHVlKSB7XG4gICAgICAgIGlmIChEaXNwb3Nlci5pc0Rpc3Bvc2VyKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNbdGhpcy5pbmRleF0uX3NldERpc3Bvc2FibGUodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnByb21pc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gUmVzb3VyY2VMaXN0KGxlbmd0aCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbnVsbDtcbiAgICAgICAgdGhpc1tsZW5ndGgtMV0gPSBudWxsO1xuICAgIH1cblxuICAgIFJlc291cmNlTGlzdC5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpc1tpXTtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgUHJvbWlzZS51c2luZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPCAyKSByZXR1cm4gYXBpUmVqZWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ5b3UgbXVzdCBwYXNzIGF0IGxlYXN0IDIgYXJndW1lbnRzIHRvIFByb21pc2UudXNpbmdcIik7XG4gICAgICAgIHZhciBmbiA9IGFyZ3VtZW50c1tsZW4gLSAxXTtcbiAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpUmVqZWN0aW9uKFwiZXhwZWN0aW5nIGEgZnVuY3Rpb24gYnV0IGdvdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcoZm4pKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5wdXQ7XG4gICAgICAgIHZhciBzcHJlYWRBcmdzID0gdHJ1ZTtcbiAgICAgICAgaWYgKGxlbiA9PT0gMiAmJiBBcnJheS5pc0FycmF5KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgbGVuID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgc3ByZWFkQXJncyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXQgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICBsZW4tLTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzb3VyY2VzID0gbmV3IFJlc291cmNlTGlzdChsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBpbnB1dFtpXTtcbiAgICAgICAgICAgIGlmIChEaXNwb3Nlci5pc0Rpc3Bvc2VyKHJlc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHZhciBkaXNwb3NlciA9IHJlc291cmNlO1xuICAgICAgICAgICAgICAgIHJlc291cmNlID0gcmVzb3VyY2UucHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLl9zZXREaXNwb3NhYmxlKGRpc3Bvc2VyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZS5fdGhlbihtYXliZVVud3JhcERpc3Bvc2VyLCBudWxsLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvdXJjZXNbaV0gPSByZXNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWZsZWN0ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXkocmVzb3VyY2VzLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVmbGVjdGVkUmVzb3VyY2VzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICByZWZsZWN0ZWRSZXNvdXJjZXNbaV0gPSBQcm9taXNlLnJlc29sdmUocmVzb3VyY2VzW2ldKS5yZWZsZWN0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0UHJvbWlzZSA9IFByb21pc2UuYWxsKHJlZmxlY3RlZFJlc291cmNlcylcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGluc3BlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnNwZWN0aW9ucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5zcGVjdGlvbiA9IGluc3BlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zcGVjdGlvbi5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yT2JqLmUgPSBpbnNwZWN0aW9uLmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JPYmo7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWluc3BlY3Rpb24uaXNGdWxmaWxsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UHJvbWlzZS5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbnNwZWN0aW9uc1tpXSA9IGluc3BlY3Rpb24udmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvbWlzZS5fcHVzaENvbnRleHQoKTtcblxuICAgICAgICAgICAgICAgIGZuID0gdHJ5Q2F0Y2goZm4pO1xuICAgICAgICAgICAgICAgIHZhciByZXQgPSBzcHJlYWRBcmdzXG4gICAgICAgICAgICAgICAgICAgID8gZm4uYXBwbHkodW5kZWZpbmVkLCBpbnNwZWN0aW9ucykgOiBmbihpbnNwZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgdmFyIHByb21pc2VDcmVhdGVkID0gcHJvbWlzZS5fcG9wQ29udGV4dCgpO1xuICAgICAgICAgICAgICAgIGRlYnVnLmNoZWNrRm9yZ290dGVuUmV0dXJucyhcbiAgICAgICAgICAgICAgICAgICAgcmV0LCBwcm9taXNlQ3JlYXRlZCwgXCJQcm9taXNlLnVzaW5nXCIsIHByb21pc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHJlc3VsdFByb21pc2UubGFzdGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGluc3BlY3Rpb24gPSBuZXcgUHJvbWlzZS5Qcm9taXNlSW5zcGVjdGlvbihyZXN1bHRQcm9taXNlKTtcbiAgICAgICAgICAgIHJldHVybiBkaXNwb3NlKHJlc291cmNlcywgaW5zcGVjdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXNvdXJjZXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgICAgIHByb21pc2UuX3NldE9uQ2FuY2VsKHJlc291cmNlcyk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnByb3RvdHlwZS5fc2V0RGlzcG9zYWJsZSA9IGZ1bmN0aW9uIChkaXNwb3Nlcikge1xuICAgICAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkIHwgMTMxMDcyO1xuICAgICAgICB0aGlzLl9kaXNwb3NlciA9IGRpc3Bvc2VyO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnByb3RvdHlwZS5faXNEaXNwb3NhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2JpdEZpZWxkICYgMTMxMDcyKSA+IDA7XG4gICAgfTtcblxuICAgIFByb21pc2UucHJvdG90eXBlLl9nZXREaXNwb3NlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2VyO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnByb3RvdHlwZS5fdW5zZXREaXNwb3NhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkICYgKH4xMzEwNzIpO1xuICAgICAgICB0aGlzLl9kaXNwb3NlciA9IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5wcm90b3R5cGUuZGlzcG9zZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRGlzcG9zZXIoZm4sIHRoaXMsIGNyZWF0ZUNvbnRleHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgIH07XG5cbn07XG5cbn0se1wiLi9lcnJvcnNcIjoxMixcIi4vdXRpbFwiOjM2fV0sMzY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZXM1ID0gX2RlcmVxXyhcIi4vZXM1XCIpO1xudmFyIGNhbkV2YWx1YXRlID0gdHlwZW9mIG5hdmlnYXRvciA9PSBcInVuZGVmaW5lZFwiO1xuXG52YXIgZXJyb3JPYmogPSB7ZToge319O1xudmFyIHRyeUNhdGNoVGFyZ2V0O1xudmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6XG4gICAgdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6XG4gICAgdGhpcyAhPT0gdW5kZWZpbmVkID8gdGhpcyA6IG51bGw7XG5cbmZ1bmN0aW9uIHRyeUNhdGNoZXIoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHRhcmdldCA9IHRyeUNhdGNoVGFyZ2V0O1xuICAgICAgICB0cnlDYXRjaFRhcmdldCA9IG51bGw7XG4gICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGVycm9yT2JqLmUgPSBlO1xuICAgICAgICByZXR1cm4gZXJyb3JPYmo7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJ5Q2F0Y2goZm4pIHtcbiAgICB0cnlDYXRjaFRhcmdldCA9IGZuO1xuICAgIHJldHVybiB0cnlDYXRjaGVyO1xufVxuXG52YXIgaW5oZXJpdHMgPSBmdW5jdGlvbihDaGlsZCwgUGFyZW50KSB7XG4gICAgdmFyIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgIGZ1bmN0aW9uIFQoKSB7XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBDaGlsZDtcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciQgPSBQYXJlbnQ7XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBQYXJlbnQucHJvdG90eXBlKSB7XG4gICAgICAgICAgICBpZiAoaGFzUHJvcC5jYWxsKFBhcmVudC5wcm90b3R5cGUsIHByb3BlcnR5TmFtZSkgJiZcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuY2hhckF0KHByb3BlcnR5TmFtZS5sZW5ndGgtMSkgIT09IFwiJFwiXG4gICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydHlOYW1lICsgXCIkXCJdID0gUGFyZW50LnByb3RvdHlwZVtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIFQucHJvdG90eXBlID0gUGFyZW50LnByb3RvdHlwZTtcbiAgICBDaGlsZC5wcm90b3R5cGUgPSBuZXcgVCgpO1xuICAgIHJldHVybiBDaGlsZC5wcm90b3R5cGU7XG59O1xuXG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbCkge1xuICAgIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IHRydWUgfHwgdmFsID09PSBmYWxzZSB8fFxuICAgICAgICB0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCI7XG5cbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBtYXliZVdyYXBBc0Vycm9yKG1heWJlRXJyb3IpIHtcbiAgICBpZiAoIWlzUHJpbWl0aXZlKG1heWJlRXJyb3IpKSByZXR1cm4gbWF5YmVFcnJvcjtcblxuICAgIHJldHVybiBuZXcgRXJyb3Ioc2FmZVRvU3RyaW5nKG1heWJlRXJyb3IpKTtcbn1cblxuZnVuY3Rpb24gd2l0aEFwcGVuZGVkKHRhcmdldCwgYXBwZW5kZWUpIHtcbiAgICB2YXIgbGVuID0gdGFyZ2V0Lmxlbmd0aDtcbiAgICB2YXIgcmV0ID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICByZXRbaV0gPSB0YXJnZXRbaV07XG4gICAgfVxuICAgIHJldFtpXSA9IGFwcGVuZGVlO1xuICAgIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGdldERhdGFQcm9wZXJ0eU9yRGVmYXVsdChvYmosIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKGVzNS5pc0VTNSkge1xuICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuXG4gICAgICAgIGlmIChkZXNjICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBkZXNjLmdldCA9PSBudWxsICYmIGRlc2Muc2V0ID09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgPyBkZXNjLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHt9Lmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpID8gb2JqW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3RFbnVtZXJhYmxlUHJvcChvYmosIG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKGlzUHJpbWl0aXZlKG9iaikpIHJldHVybiBvYmo7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9O1xuICAgIGVzNS5kZWZpbmVQcm9wZXJ0eShvYmosIG5hbWUsIGRlc2NyaXB0b3IpO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIHRocm93ZXIocikge1xuICAgIHRocm93IHI7XG59XG5cbnZhciBpbmhlcml0ZWREYXRhS2V5cyA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgZXhjbHVkZWRQcm90b3R5cGVzID0gW1xuICAgICAgICBBcnJheS5wcm90b3R5cGUsXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZVxuICAgIF07XG5cbiAgICB2YXIgaXNFeGNsdWRlZFByb3RvID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhjbHVkZWRQcm90b3R5cGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoZXhjbHVkZWRQcm90b3R5cGVzW2ldID09PSB2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGlmIChlczUuaXNFUzUpIHtcbiAgICAgICAgdmFyIGdldEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgdmFyIHJldCA9IFtdO1xuICAgICAgICAgICAgdmFyIHZpc2l0ZWRLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIHdoaWxlIChvYmogIT0gbnVsbCAmJiAhaXNFeGNsdWRlZFByb3RvKG9iaikpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5cztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzID0gZ2V0S2V5cyhvYmopO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRlZEtleXNba2V5XSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRLZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzYyAhPSBudWxsICYmIGRlc2MuZ2V0ID09IG51bGwgJiYgZGVzYy5zZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmogPSBlczUuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgaWYgKGlzRXhjbHVkZWRQcm90byhvYmopKSByZXR1cm4gW107XG4gICAgICAgICAgICB2YXIgcmV0ID0gW107XG5cbiAgICAgICAgICAgIC8qanNoaW50IGZvcmluOmZhbHNlICovXG4gICAgICAgICAgICBlbnVtZXJhdGlvbjogZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNQcm9wLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleGNsdWRlZFByb3RvdHlwZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQcm9wLmNhbGwoZXhjbHVkZWRQcm90b3R5cGVzW2ldLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgZW51bWVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9O1xuICAgIH1cblxufSkoKTtcblxudmFyIHRoaXNBc3NpZ25tZW50UGF0dGVybiA9IC90aGlzXFxzKlxcLlxccypcXFMrXFxzKj0vO1xuZnVuY3Rpb24gaXNDbGFzcyhmbikge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBlczUubmFtZXMoZm4ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgdmFyIGhhc01ldGhvZHMgPSBlczUuaXNFUzUgJiYga2V5cy5sZW5ndGggPiAxO1xuICAgICAgICAgICAgdmFyIGhhc01ldGhvZHNPdGhlclRoYW5Db25zdHJ1Y3RvciA9IGtleXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICEoa2V5cy5sZW5ndGggPT09IDEgJiYga2V5c1swXSA9PT0gXCJjb25zdHJ1Y3RvclwiKTtcbiAgICAgICAgICAgIHZhciBoYXNUaGlzQXNzaWdubWVudEFuZFN0YXRpY01ldGhvZHMgPVxuICAgICAgICAgICAgICAgIHRoaXNBc3NpZ25tZW50UGF0dGVybi50ZXN0KGZuICsgXCJcIikgJiYgZXM1Lm5hbWVzKGZuKS5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBpZiAoaGFzTWV0aG9kcyB8fCBoYXNNZXRob2RzT3RoZXJUaGFuQ29uc3RydWN0b3IgfHxcbiAgICAgICAgICAgICAgICBoYXNUaGlzQXNzaWdubWVudEFuZFN0YXRpY01ldGhvZHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0b0Zhc3RQcm9wZXJ0aWVzKG9iaikge1xuICAgIC8qanNoaW50IC1XMDI3LC1XMDU1LC1XMDMxKi9cbiAgICBmdW5jdGlvbiBGYWtlQ29uc3RydWN0b3IoKSB7fVxuICAgIEZha2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBvYmo7XG4gICAgdmFyIHJlY2VpdmVyID0gbmV3IEZha2VDb25zdHJ1Y3RvcigpO1xuICAgIGZ1bmN0aW9uIGljKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJlY2VpdmVyLmZvbztcbiAgICB9XG4gICAgaWMoKTtcbiAgICBpYygpO1xuICAgIHJldHVybiBvYmo7XG4gICAgZXZhbChvYmopO1xufVxuXG52YXIgcmlkZW50ID0gL15bYS16JF9dW2EteiRfMC05XSokL2k7XG5mdW5jdGlvbiBpc0lkZW50aWZpZXIoc3RyKSB7XG4gICAgcmV0dXJuIHJpZGVudC50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIGZpbGxlZFJhbmdlKGNvdW50LCBwcmVmaXgsIHN1ZmZpeCkge1xuICAgIHZhciByZXQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgIHJldFtpXSA9IHByZWZpeCArIGkgKyBzdWZmaXg7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHNhZmVUb1N0cmluZyhvYmopIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gb2JqICsgXCJcIjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBcIltubyBzdHJpbmcgcmVwcmVzZW50YXRpb25dXCI7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yKG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBFcnJvciB8fFxuICAgICAgICAob2JqICE9PSBudWxsICYmXG4gICAgICAgICAgIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgdHlwZW9mIG9iai5tZXNzYWdlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgIHR5cGVvZiBvYmoubmFtZSA9PT0gXCJzdHJpbmdcIik7XG59XG5cbmZ1bmN0aW9uIG1hcmtBc09yaWdpbmF0aW5nRnJvbVJlamVjdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgbm90RW51bWVyYWJsZVByb3AoZSwgXCJpc09wZXJhdGlvbmFsXCIsIHRydWUpO1xuICAgIH1cbiAgICBjYXRjaChpZ25vcmUpIHt9XG59XG5cbmZ1bmN0aW9uIG9yaWdpbmF0ZXNGcm9tUmVqZWN0aW9uKGUpIHtcbiAgICBpZiAoZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICgoZSBpbnN0YW5jZW9mIEVycm9yW1wiX19CbHVlYmlyZEVycm9yVHlwZXNfX1wiXS5PcGVyYXRpb25hbEVycm9yKSB8fFxuICAgICAgICBlW1wiaXNPcGVyYXRpb25hbFwiXSA9PT0gdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGNhbkF0dGFjaFRyYWNlKG9iaikge1xuICAgIHJldHVybiBpc0Vycm9yKG9iaikgJiYgZXM1LnByb3BlcnR5SXNXcml0YWJsZShvYmosIFwic3RhY2tcIik7XG59XG5cbnZhciBlbnN1cmVFcnJvck9iamVjdCA9IChmdW5jdGlvbigpIHtcbiAgICBpZiAoIShcInN0YWNrXCIgaW4gbmV3IEVycm9yKCkpKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGNhbkF0dGFjaFRyYWNlKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgdHJ5IHt0aHJvdyBuZXcgRXJyb3Ioc2FmZVRvU3RyaW5nKHZhbHVlKSk7fVxuICAgICAgICAgICAgY2F0Y2goZXJyKSB7cmV0dXJuIGVycjt9XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoY2FuQXR0YWNoVHJhY2UodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKHNhZmVUb1N0cmluZyh2YWx1ZSkpO1xuICAgICAgICB9O1xuICAgIH1cbn0pKCk7XG5cbmZ1bmN0aW9uIGNsYXNzU3RyaW5nKG9iaikge1xuICAgIHJldHVybiB7fS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5cbmZ1bmN0aW9uIGNvcHlEZXNjcmlwdG9ycyhmcm9tLCB0bywgZmlsdGVyKSB7XG4gICAgdmFyIGtleXMgPSBlczUubmFtZXMoZnJvbSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoZmlsdGVyKGtleSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXM1LmRlZmluZVByb3BlcnR5KHRvLCBrZXksIGVzNS5nZXREZXNjcmlwdG9yKGZyb20sIGtleSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgYXNBcnJheSA9IGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAoZXM1LmlzQXJyYXkodikpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgdmFyIEFycmF5RnJvbSA9IHR5cGVvZiBBcnJheS5mcm9tID09PSBcImZ1bmN0aW9uXCIgPyBmdW5jdGlvbih2KSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHYpO1xuICAgIH0gOiBmdW5jdGlvbih2KSB7XG4gICAgICAgIHZhciByZXQgPSBbXTtcbiAgICAgICAgdmFyIGl0ID0gdltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIHZhciBpdFJlc3VsdDtcbiAgICAgICAgd2hpbGUgKCEoKGl0UmVzdWx0ID0gaXQubmV4dCgpKS5kb25lKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goaXRSZXN1bHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcblxuICAgIGFzQXJyYXkgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgIGlmIChlczUuaXNBcnJheSh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH0gZWxzZSBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2W1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5RnJvbSh2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xufVxuXG52YXIgaXNOb2RlID0gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgY2xhc3NTdHJpbmcocHJvY2VzcykudG9Mb3dlckNhc2UoKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCI7XG5cbnZhciBoYXNFbnZWYXJpYWJsZXMgPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmVudiAhPT0gXCJ1bmRlZmluZWRcIjtcblxuZnVuY3Rpb24gZW52KGtleSkge1xuICAgIHJldHVybiBoYXNFbnZWYXJpYWJsZXMgPyBwcm9jZXNzLmVudltrZXldIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXROYXRpdmVQcm9taXNlKCkge1xuICAgIGlmICh0eXBlb2YgUHJvbWlzZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7fSk7XG4gICAgICAgICAgICBpZiAoY2xhc3NTdHJpbmcocHJvbWlzZSkgPT09IFwiW29iamVjdCBQcm9taXNlXVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxufVxuXG52YXIgcmVmbGVjdEhhbmRsZXI7XG5mdW5jdGlvbiBjb250ZXh0QmluZChjdHgsIGNiKSB7XG4gICAgaWYgKGN0eCA9PT0gbnVsbCB8fFxuICAgICAgICB0eXBlb2YgY2IgIT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICBjYiA9PT0gcmVmbGVjdEhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIGNiO1xuICAgIH1cblxuICAgIGlmIChjdHguZG9tYWluICE9PSBudWxsKSB7XG4gICAgICAgIGNiID0gY3R4LmRvbWFpbi5iaW5kKGNiKTtcbiAgICB9XG5cbiAgICB2YXIgYXN5bmMgPSBjdHguYXN5bmM7XG4gICAgaWYgKGFzeW5jICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBvbGQgPSBjYjtcbiAgICAgICAgY2IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gKG5ldyBBcnJheSgyKSkuY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7O1xuICAgICAgICAgICAgYXJnc1swXSA9IG9sZDtcbiAgICAgICAgICAgIGFyZ3NbMV0gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnJ1bkluQXN5bmNTY29wZS5hcHBseShhc3luYywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBjYjtcbn1cblxudmFyIHJldCA9IHtcbiAgICBzZXRSZWZsZWN0SGFuZGxlcjogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgcmVmbGVjdEhhbmRsZXIgPSBmbjtcbiAgICB9LFxuICAgIGlzQ2xhc3M6IGlzQ2xhc3MsXG4gICAgaXNJZGVudGlmaWVyOiBpc0lkZW50aWZpZXIsXG4gICAgaW5oZXJpdGVkRGF0YUtleXM6IGluaGVyaXRlZERhdGFLZXlzLFxuICAgIGdldERhdGFQcm9wZXJ0eU9yRGVmYXVsdDogZ2V0RGF0YVByb3BlcnR5T3JEZWZhdWx0LFxuICAgIHRocm93ZXI6IHRocm93ZXIsXG4gICAgaXNBcnJheTogZXM1LmlzQXJyYXksXG4gICAgYXNBcnJheTogYXNBcnJheSxcbiAgICBub3RFbnVtZXJhYmxlUHJvcDogbm90RW51bWVyYWJsZVByb3AsXG4gICAgaXNQcmltaXRpdmU6IGlzUHJpbWl0aXZlLFxuICAgIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgICBpc0Vycm9yOiBpc0Vycm9yLFxuICAgIGNhbkV2YWx1YXRlOiBjYW5FdmFsdWF0ZSxcbiAgICBlcnJvck9iajogZXJyb3JPYmosXG4gICAgdHJ5Q2F0Y2g6IHRyeUNhdGNoLFxuICAgIGluaGVyaXRzOiBpbmhlcml0cyxcbiAgICB3aXRoQXBwZW5kZWQ6IHdpdGhBcHBlbmRlZCxcbiAgICBtYXliZVdyYXBBc0Vycm9yOiBtYXliZVdyYXBBc0Vycm9yLFxuICAgIHRvRmFzdFByb3BlcnRpZXM6IHRvRmFzdFByb3BlcnRpZXMsXG4gICAgZmlsbGVkUmFuZ2U6IGZpbGxlZFJhbmdlLFxuICAgIHRvU3RyaW5nOiBzYWZlVG9TdHJpbmcsXG4gICAgY2FuQXR0YWNoVHJhY2U6IGNhbkF0dGFjaFRyYWNlLFxuICAgIGVuc3VyZUVycm9yT2JqZWN0OiBlbnN1cmVFcnJvck9iamVjdCxcbiAgICBvcmlnaW5hdGVzRnJvbVJlamVjdGlvbjogb3JpZ2luYXRlc0Zyb21SZWplY3Rpb24sXG4gICAgbWFya0FzT3JpZ2luYXRpbmdGcm9tUmVqZWN0aW9uOiBtYXJrQXNPcmlnaW5hdGluZ0Zyb21SZWplY3Rpb24sXG4gICAgY2xhc3NTdHJpbmc6IGNsYXNzU3RyaW5nLFxuICAgIGNvcHlEZXNjcmlwdG9yczogY29weURlc2NyaXB0b3JzLFxuICAgIGlzTm9kZTogaXNOb2RlLFxuICAgIGhhc0VudlZhcmlhYmxlczogaGFzRW52VmFyaWFibGVzLFxuICAgIGVudjogZW52LFxuICAgIGdsb2JhbDogZ2xvYmFsT2JqZWN0LFxuICAgIGdldE5hdGl2ZVByb21pc2U6IGdldE5hdGl2ZVByb21pc2UsXG4gICAgY29udGV4dEJpbmQ6IGNvbnRleHRCaW5kXG59O1xucmV0LmlzUmVjZW50Tm9kZSA9IHJldC5pc05vZGUgJiYgKGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ZXJzaW9uO1xuICAgIGlmIChwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkge1xuICAgICAgICB2ZXJzaW9uID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MudmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gcHJvY2Vzcy52ZXJzaW9uLnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbiAgICB9XG4gICAgcmV0dXJuICh2ZXJzaW9uWzBdID09PSAwICYmIHZlcnNpb25bMV0gPiAxMCkgfHwgKHZlcnNpb25bMF0gPiAwKTtcbn0pKCk7XG5yZXQubm9kZVN1cHBvcnRzQXN5bmNSZXNvdXJjZSA9IHJldC5pc05vZGUgJiYgKGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdXBwb3J0c0FzeW5jID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IF9kZXJlcV8oXCJhc3luY19ob29rc1wiKS5Bc3luY1Jlc291cmNlO1xuICAgICAgICBzdXBwb3J0c0FzeW5jID0gdHlwZW9mIHJlcy5wcm90b3R5cGUucnVuSW5Bc3luY1Njb3BlID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdXBwb3J0c0FzeW5jID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdXBwb3J0c0FzeW5jO1xufSkoKTtcblxuaWYgKHJldC5pc05vZGUpIHJldC50b0Zhc3RQcm9wZXJ0aWVzKHByb2Nlc3MpO1xuXG50cnkge3Rocm93IG5ldyBFcnJvcigpOyB9IGNhdGNoIChlKSB7cmV0Lmxhc3RMaW5lRXJyb3IgPSBlO31cbm1vZHVsZS5leHBvcnRzID0gcmV0O1xuXG59LHtcIi4vZXM1XCI6MTMsXCJhc3luY19ob29rc1wiOnVuZGVmaW5lZH1dfSx7fSxbNF0pKDQpXG59KTsgICAgICAgICAgICAgICAgICAgIDtpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93ICE9PSBudWxsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5QID0gd2luZG93LlByb21pc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmICE9PSBudWxsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlAgPSBzZWxmLlByb21pc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFtREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUhBa0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUdBMENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1HQXdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bluebird/js/browser/bluebird.js\n"); /***/ }), /***/ "./node_modules/bluebird/js/browser/bluebird.js-exposed": /*!**************************************************************!*\ !*** ./node_modules/bluebird/js/browser/bluebird.js-exposed ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("/* WEBPACK VAR INJECTION */(function(global) {module.exports = global[\"Promise\"] = __webpack_require__(/*! -!./bluebird.js */ \"./node_modules/bluebird/js/browser/bluebird.js\");\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmx1ZWJpcmQvanMvYnJvd3Nlci9ibHVlYmlyZC5qcy1leHBvc2VkLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JsdWViaXJkL2pzL2Jyb3dzZXIvYmx1ZWJpcmQuanMtZXhwb3NlZD9mYTg5Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiUHJvbWlzZVwiXSA9IHJlcXVpcmUoXCItIS4vYmx1ZWJpcmQuanNcIik7Il0sIm1hcHBpbmdzIjoiQUFBQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bluebird/js/browser/bluebird.js-exposed\n"); /***/ }), /***/ "./node_modules/core-js/modules/_a-function.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_a-function.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_a-function.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_add-to-unscopables.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/_add-to-unscopables.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanM/OWM2YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_add-to-unscopables.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_advance-string-index.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/_advance-string-index.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar at = __webpack_require__(/*! ./_string-at */ \"./node_modules/core-js/modules/_string-at.js\")(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzPzAzOTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_advance-string-index.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_an-instance.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_an-instance.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzP2Y2MDUiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_an-instance.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_an-object.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_an-object.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanM/Y2I3YyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_an-object.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_array-copy-within.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/_array-copy-within.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzP2JhOTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-copy-within.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_array-fill.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_array-fill.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-fill.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_array-includes.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/_array-includes.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzP2MzNjYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-includes.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_array-methods.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/_array-methods.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/modules/_iobject.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar asc = __webpack_require__(/*! ./_array-species-create */ \"./node_modules/core-js/modules/_array-species-create.js\");\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-methods.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_array-species-constructor.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/modules/_array-species-constructor.js ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar isArray = __webpack_require__(/*! ./_is-array */ \"./node_modules/core-js/modules/_is-array.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-species-constructor.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_array-species-create.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/_array-species-create.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(/*! ./_array-species-constructor */ \"./node_modules/core-js/modules/_array-species-constructor.js\");\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzP2NkMWMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-species-create.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_bind.js": /*!***********************************************!*\ !*** ./node_modules/core-js/modules/_bind.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar invoke = __webpack_require__(/*! ./_invoke */ \"./node_modules/core-js/modules/_invoke.js\");\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_bind.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_classof.js": /*!**************************************************!*\ !*** ./node_modules/core-js/modules/_classof.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_classof.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_cof.js": /*!**********************************************!*\ !*** ./node_modules/core-js/modules/_cof.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanM/MmQ5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_cof.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_collection-strong.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/_collection-strong.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/modules/_object-create.js\");\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/core-js/modules/_redefine-all.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/core-js/modules/_an-instance.js\");\nvar forOf = __webpack_require__(/*! ./_for-of */ \"./node_modules/core-js/modules/_for-of.js\");\nvar $iterDefine = __webpack_require__(/*! ./_iter-define */ \"./node_modules/core-js/modules/_iter-define.js\");\nvar step = __webpack_require__(/*! ./_iter-step */ \"./node_modules/core-js/modules/_iter-step.js\");\nvar setSpecies = __webpack_require__(/*! ./_set-species */ \"./node_modules/core-js/modules/_set-species.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\");\nvar fastKey = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/modules/_meta.js\").fastKey;\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"./node_modules/core-js/modules/_validate-collection.js\");\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzP2MyNmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_collection-strong.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_collection-weak.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/_collection-weak.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/core-js/modules/_redefine-all.js\");\nvar getWeak = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/modules/_meta.js\").getWeak;\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/core-js/modules/_an-instance.js\");\nvar forOf = __webpack_require__(/*! ./_for-of */ \"./node_modules/core-js/modules/_for-of.js\");\nvar createArrayMethod = __webpack_require__(/*! ./_array-methods */ \"./node_modules/core-js/modules/_array-methods.js\");\nvar $has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"./node_modules/core-js/modules/_validate-collection.js\");\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanM/NjQzZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_collection-weak.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_collection.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_collection.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/core-js/modules/_redefine-all.js\");\nvar meta = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/modules/_meta.js\");\nvar forOf = __webpack_require__(/*! ./_for-of */ \"./node_modules/core-js/modules/_for-of.js\");\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/core-js/modules/_an-instance.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar $iterDetect = __webpack_require__(/*! ./_iter-detect */ \"./node_modules/core-js/modules/_iter-detect.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/modules/_set-to-string-tag.js\");\nvar inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ \"./node_modules/core-js/modules/_inherit-if-required.js\");\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_collection.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_core.js": /*!***********************************************!*\ !*** ./node_modules/core-js/modules/_core.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuMTInIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_core.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_create-property.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/_create-property.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanM/ZjFhZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_create-property.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_ctx.js": /*!**********************************************!*\ !*** ./node_modules/core-js/modules/_ctx.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanM/OWI0MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_ctx.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_defined.js": /*!**************************************************!*\ !*** ./node_modules/core-js/modules/_defined.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_defined.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_descriptors.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_descriptors.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzPzllMWUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_descriptors.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_dom-create.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_dom-create.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_dom-create.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_enum-bug-keys.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/_enum-bug-keys.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_enum-bug-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_enum-keys.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_enum-keys.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/modules/_object-pie.js\");\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanM/ZDRjMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_enum-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_export.js": /*!*************************************************!*\ !*** ./node_modules/core-js/modules/_export.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanM/NWNhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_export.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_fails-is-regexp.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/_fails-is-regexp.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var MATCH = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy1pcy1yZWdleHAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy1pcy1yZWdleHAuanM/NTE0NyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_fails-is-regexp.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_fails.js": /*!************************************************!*\ !*** ./node_modules/core-js/modules/_fails.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzPzc5ZTUiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_fails.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_fix-re-wks.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_fix-re-wks.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n__webpack_require__(/*! ./es6.regexp.exec */ \"./node_modules/core-js/modules/es6.regexp.exec.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\");\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/core-js/modules/_regexp-exec.js\");\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_fix-re-wks.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_flags.js": /*!************************************************!*\ !*** ./node_modules/core-js/modules/_flags.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzPzBiZmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_flags.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_for-of.js": /*!*************************************************!*\ !*** ./node_modules/core-js/modules/_for-of.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar call = __webpack_require__(/*! ./_iter-call */ \"./node_modules/core-js/modules/_iter-call.js\");\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"./node_modules/core-js/modules/_is-array-iter.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"./node_modules/core-js/modules/core.get-iterator-method.js\");\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanM/NGE1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_for-of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_function-to-string.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/_function-to-string.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("module.exports = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanM/ZmE1YiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_function-to-string.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_global.js": /*!*************************************************!*\ !*** ./node_modules/core-js/modules/_global.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanM/NzcyNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_global.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_has.js": /*!**********************************************!*\ !*** ./node_modules/core-js/modules/_has.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanM/NjlhOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_has.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_hide.js": /*!***********************************************!*\ !*** ./node_modules/core-js/modules/_hide.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_hide.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_html.js": /*!***********************************************!*\ !*** ./node_modules/core-js/modules/_html.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_html.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_ie8-dom-define.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/_ie8-dom-define.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/modules/_dom-create.js\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzP2M2OWEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_ie8-dom-define.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_inherit-if-required.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/_inherit-if-required.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar setPrototypeOf = __webpack_require__(/*! ./_set-proto */ \"./node_modules/core-js/modules/_set-proto.js\").set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_inherit-if-required.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_invoke.js": /*!*************************************************!*\ !*** ./node_modules/core-js/modules/_invoke.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanM/MzFmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_invoke.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_iobject.js": /*!**************************************************!*\ !*** ./node_modules/core-js/modules/_iobject.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iobject.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_is-array-iter.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/_is-array-iter.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// check on default Array iterator\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-array-iter.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_is-array.js": /*!***************************************************!*\ !*** ./node_modules/core-js/modules/_is-array.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LmpzPzExNjkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_is-integer.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_is-integer.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1pbnRlZ2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-integer.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_is-object.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_is-object.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanM/ZDNmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-object.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_is-regexp.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_is-regexp.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\nvar MATCH = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanM/YWFlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-regexp.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_iter-call.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_iter-call.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanM/MWZhOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-call.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_iter-create.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_iter-create.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/modules/_object-create.js\");\nvar descriptor = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/modules/_set-to-string-tag.js\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\")(IteratorPrototype, __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzPzQxYTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-create.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_iter-define.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_iter-define.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar $iterCreate = __webpack_require__(/*! ./_iter-create */ \"./node_modules/core-js/modules/_iter-create.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/modules/_set-to-string-tag.js\");\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/modules/_object-gpo.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzPzAxZjkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-define.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_iter-detect.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_iter-detect.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzPzVjYzUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-detect.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_iter-step.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_iter-step.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanM/ZDUzYiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-step.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_iterators.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_iterators.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanM/ODRmMiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iterators.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_library.js": /*!**************************************************!*\ !*** ./node_modules/core-js/modules/_library.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_library.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_math-expm1.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_math-expm1.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_math-expm1.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_math-fround.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_math-fround.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(/*! ./_math-sign */ \"./node_modules/core-js/modules/_math-sign.js\");\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZnJvdW5kLmpzPzkxY2EiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_math-fround.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_math-log1p.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_math-log1p.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_math-log1p.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_math-sign.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_math-sign.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNpZ24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNpZ24uanM/OTZmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_math-sign.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_meta.js": /*!***********************************************!*\ !*** ./node_modules/core-js/modules/_meta.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var META = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\")('meta');\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar setDesc = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_meta.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_microtask.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_microtask.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar macrotask = __webpack_require__(/*! ./_task */ \"./node_modules/core-js/modules/_task.js\").set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\")(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19taWNyb3Rhc2suanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19taWNyb3Rhc2suanM/ODA3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_microtask.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_new-promise-capability.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/_new-promise-capability.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_new-promise-capability.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-assign.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/_object-assign.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/modules/_object-pie.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/modules/_iobject.js\");\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-assign.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-create.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/_object-create.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar dPs = __webpack_require__(/*! ./_object-dps */ \"./node_modules/core-js/modules/_object-dps.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/modules/_enum-bug-keys.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/modules/_dom-create.js\")('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(/*! ./_html */ \"./node_modules/core-js/modules/_html.js\").appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-create.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-dp.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_object-dp.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/core-js/modules/_ie8-dom-define.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/modules/_to-primitive.js\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanM/ODZjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-dp.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-dps.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_object-dps.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-dps.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-gopd.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_object-gopd.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/modules/_object-pie.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/modules/_to-primitive.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/core-js/modules/_ie8-dom-define.js\");\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzPzExZTkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-gopd.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-gopn-ext.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/_object-gopn-ext.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/core-js/modules/_object-gopn.js\").f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanM/N2JiYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-gopn-ext.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-gopn.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_object-gopn.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/core-js/modules/_object-keys-internal.js\");\nvar hiddenKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/modules/_enum-bug-keys.js\").concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLmpzPzkwOTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-gopn.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-gops.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_object-gops.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzPzI2MjEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-gops.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-gpo.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_object-gpo.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-gpo.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-keys-internal.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/_object-keys-internal.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar arrayIndexOf = __webpack_require__(/*! ./_array-includes */ \"./node_modules/core-js/modules/_array-includes.js\")(false);\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzP2NlMTAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-keys-internal.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-keys.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_object-keys.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/core-js/modules/_object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzPzBkNTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-pie.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_object-pie.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-pie.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-sap.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_object-sap.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-sap.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_object-to-array.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/_object-to-array.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar isEnum = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/modules/_object-pie.js\").f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanM/NTA0YyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-to-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_own-keys.js": /*!***************************************************!*\ !*** ./node_modules/core-js/modules/_own-keys.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/core-js/modules/_object-gopn.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/modules/_object-gops.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar Reflect = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzPzk5MGIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgUmVmbGVjdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlZmxlY3QgJiYgUmVmbGVjdC5vd25LZXlzIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnT1BOLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHJldHVybiBnZXRTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_own-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_perform.js": /*!**************************************************!*\ !*** ./node_modules/core-js/modules/_perform.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_perform.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_promise-resolve.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/_promise-resolve.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/core-js/modules/_new-promise-capability.js\");\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanM/YmNhYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_promise-resolve.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_property-desc.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/_property-desc.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_property-desc.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_redefine-all.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/_redefine-all.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanM/ZGNiYyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_redefine-all.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_redefine.js": /*!***************************************************!*\ !*** ./node_modules/core-js/modules/_redefine.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar SRC = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\")('src');\nvar $toString = __webpack_require__(/*! ./_function-to-string */ \"./node_modules/core-js/modules/_function-to-string.js\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\").inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzPzJhYmEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_redefine.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_regexp-exec-abstract.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/_regexp-exec-abstract.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/modules/_classof.js\");\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzPzVmMWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_regexp-exec-abstract.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_regexp-exec.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_regexp-exec.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n\nvar regexpFlags = __webpack_require__(/*! ./_flags */ \"./node_modules/core-js/modules/_flags.js\");\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzPzUyMGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_regexp-exec.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_same-value.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_same-value.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_same-value.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_set-proto.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_set-proto.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\")(Function.call, __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\").f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanM/OGI5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_set-proto.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_set-species.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_set-species.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1zcGVjaWVzLmpzPzdhNTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_set-species.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_set-to-string-tag.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/_set-to-string-tag.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var def = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzPzdmMjAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_set-to-string-tag.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_shared-key.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_shared-key.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var shared = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('keys');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_shared-key.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_shared.js": /*!*************************************************!*\ !*** ./node_modules/core-js/modules/_shared.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\") ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanM/NTUzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjAgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_shared.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_species-constructor.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/_species-constructor.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_species-constructor.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_string-at.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_string-at.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanM/MDJmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-at.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_string-context.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/_string-context.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"./node_modules/core-js/modules/_is-regexp.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzP2QyYzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-context.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_string-pad.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_string-pad.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar repeat = __webpack_require__(/*! ./_string-repeat */ \"./node_modules/core-js/modules/_string-repeat.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcGFkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-pad.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_string-repeat.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/_string-repeat.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-repeat.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_task.js": /*!***********************************************!*\ !*** ./node_modules/core-js/modules/_task.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar invoke = __webpack_require__(/*! ./_invoke */ \"./node_modules/core-js/modules/_invoke.js\");\nvar html = __webpack_require__(/*! ./_html */ \"./node_modules/core-js/modules/_html.js\");\nvar cel = __webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/modules/_dom-create.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\")(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_task.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_to-absolute-index.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/_to-absolute-index.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzPzc3ZjEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-absolute-index.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_to-index.js": /*!***************************************************!*\ !*** ./node_modules/core-js/modules/_to-index.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzPzA5ZmEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-index.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_to-integer.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_to-integer.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-integer.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_to-iobject.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_to-iobject.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/modules/_iobject.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-iobject.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_to-length.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_to-length.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanM/OWRlZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-length.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_to-object.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/_to-object.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanM/NGJmOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-object.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_to-primitive.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/_to-primitive.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanM/NmE5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-primitive.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_typed-array.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/_typed-array.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nif (__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\")) {\n var LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\");\n var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\n var fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\n var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n var $typed = __webpack_require__(/*! ./_typed */ \"./node_modules/core-js/modules/_typed.js\");\n var $buffer = __webpack_require__(/*! ./_typed-buffer */ \"./node_modules/core-js/modules/_typed-buffer.js\");\n var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\n var anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/core-js/modules/_an-instance.js\");\n var propertyDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\n var hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\n var redefineAll = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/core-js/modules/_redefine-all.js\");\n var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\n var toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\n var toIndex = __webpack_require__(/*! ./_to-index */ \"./node_modules/core-js/modules/_to-index.js\");\n var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\n var toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/modules/_to-primitive.js\");\n var has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\n var classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/modules/_classof.js\");\n var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\n var toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\n var isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"./node_modules/core-js/modules/_is-array-iter.js\");\n var create = __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/modules/_object-create.js\");\n var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/modules/_object-gpo.js\");\n var gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/core-js/modules/_object-gopn.js\").f;\n var getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"./node_modules/core-js/modules/core.get-iterator-method.js\");\n var uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\n var wks = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\");\n var createArrayMethod = __webpack_require__(/*! ./_array-methods */ \"./node_modules/core-js/modules/_array-methods.js\");\n var createArrayIncludes = __webpack_require__(/*! ./_array-includes */ \"./node_modules/core-js/modules/_array-includes.js\");\n var speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/core-js/modules/_species-constructor.js\");\n var ArrayIterators = __webpack_require__(/*! ./es6.array.iterator */ \"./node_modules/core-js/modules/es6.array.iterator.js\");\n var Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\n var $iterDetect = __webpack_require__(/*! ./_iter-detect */ \"./node_modules/core-js/modules/_iter-detect.js\");\n var setSpecies = __webpack_require__(/*! ./_set-species */ \"./node_modules/core-js/modules/_set-species.js\");\n var arrayFill = __webpack_require__(/*! ./_array-fill */ \"./node_modules/core-js/modules/_array-fill.js\");\n var arrayCopyWithin = __webpack_require__(/*! ./_array-copy-within */ \"./node_modules/core-js/modules/_array-copy-within.js\");\n var $DP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\n var $GOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\");\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWFycmF5LmpzP2VjMzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_typed-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_typed-buffer.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/_typed-buffer.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\");\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\");\nvar $typed = __webpack_require__(/*! ./_typed */ \"./node_modules/core-js/modules/_typed.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/core-js/modules/_redefine-all.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/core-js/modules/_an-instance.js\");\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar toIndex = __webpack_require__(/*! ./_to-index */ \"./node_modules/core-js/modules/_to-index.js\");\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/core-js/modules/_object-gopn.js\").f;\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar arrayFill = __webpack_require__(/*! ./_array-fill */ \"./node_modules/core-js/modules/_array-fill.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/modules/_set-to-string-tag.js\");\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanM/ZWQwYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_typed-buffer.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_typed.js": /*!************************************************!*\ !*** ./node_modules/core-js/modules/_typed.js ***! \************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLmpzPzBmODgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_typed.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_uid.js": /*!**********************************************!*\ !*** ./node_modules/core-js/modules/_uid.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanM/Y2E1YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_uid.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_user-agent.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_user-agent.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191c2VyLWFnZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_user-agent.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_validate-collection.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/_validate-collection.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_validate-collection.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_wks-define.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_wks-define.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\");\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"./node_modules/core-js/modules/_wks-ext.js\");\nvar defineProperty = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_wks-define.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_wks-ext.js": /*!**************************************************!*\ !*** ./node_modules/core-js/modules/_wks-ext.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("exports.f = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_wks-ext.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_wks.js": /*!**********************************************!*\ !*** ./node_modules/core-js/modules/_wks.js ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var store = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('wks');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nvar Symbol = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanM/MmI0YyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_wks.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/core.get-iterator-method.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/modules/core.get-iterator-method.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/modules/_classof.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nmodule.exports = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\").getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzPzI3ZWUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/core.get-iterator-method.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.array.copy-within.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/es6.array.copy-within.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(/*! ./_array-copy-within */ \"./node_modules/core-js/modules/_array-copy-within.js\") });\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/modules/_add-to-unscopables.js\")('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzPzc0NGYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.copy-within.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.array.fill.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.array.fill.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Array', { fill: __webpack_require__(/*! ./_array-fill */ \"./node_modules/core-js/modules/_array-fill.js\") });\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/modules/_add-to-unscopables.js\")('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.fill.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.array.find-index.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/es6.array.find-index.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $find = __webpack_require__(/*! ./_array-methods */ \"./node_modules/core-js/modules/_array-methods.js\")(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/modules/_add-to-unscopables.js\")(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.find-index.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.array.find.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.array.find.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $find = __webpack_require__(/*! ./_array-methods */ \"./node_modules/core-js/modules/_array-methods.js\")(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/modules/_add-to-unscopables.js\")(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.find.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.array.from.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.array.from.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar call = __webpack_require__(/*! ./_iter-call */ \"./node_modules/core-js/modules/_iter-call.js\");\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"./node_modules/core-js/modules/_is-array-iter.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"./node_modules/core-js/modules/_create-property.js\");\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"./node_modules/core-js/modules/core.get-iterator-method.js\");\n\n$export($export.S + $export.F * !__webpack_require__(/*! ./_iter-detect */ \"./node_modules/core-js/modules/_iter-detect.js\")(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.from.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.array.iterator.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/es6.array.iterator.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/modules/_add-to-unscopables.js\");\nvar step = __webpack_require__(/*! ./_iter-step */ \"./node_modules/core-js/modules/_iter-step.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(/*! ./_iter-define */ \"./node_modules/core-js/modules/_iter-define.js\")(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzP2NhZGYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.iterator.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.array.of.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/es6.array.of.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"./node_modules/core-js/modules/_create-property.js\");\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm9mLmpzP2U4MDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.function.name.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es6.function.name.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgRlByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyAxOS4yLjQuMiBuYW1lXG5OQU1FIGluIEZQcm90byB8fCByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIGRQKEZQcm90bywgTkFNRSwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKCcnICsgdGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.function.name.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.map.js": /*!*************************************************!*\ !*** ./node_modules/core-js/modules/es6.map.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar strong = __webpack_require__(/*! ./_collection-strong */ \"./node_modules/core-js/modules/_collection-strong.js\");\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"./node_modules/core-js/modules/_validate-collection.js\");\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(/*! ./_collection */ \"./node_modules/core-js/modules/_collection.js\")(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanM/ZjQwMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.map.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.acosh.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.acosh.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar log1p = __webpack_require__(/*! ./_math-log1p */ \"./node_modules/core-js/modules/_math-log1p.js\");\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.acosh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.asinh.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.asinh.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.asinh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.atanh.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.atanh.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi43IE1hdGguYXRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0YW5oID0gTWF0aC5hdGFuaDtcblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmF0YW5oKC0wKSAtPiAwXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGF0YW5oICYmIDEgLyAkYXRhbmgoLTApIDwgMCksICdNYXRoJywge1xuICBhdGFuaDogZnVuY3Rpb24gYXRhbmgoeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IE1hdGgubG9nKCgxICsgeCkgLyAoMSAtIHgpKSAvIDI7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.atanh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.cbrt.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.cbrt.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar sign = __webpack_require__(/*! ./_math-sign */ \"./node_modules/core-js/modules/_math-sign.js\");\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNicnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNicnQuanM/ZjlhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.cbrt.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.clz32.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.clz32.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.clz32.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.cosh.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.cosh.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNvc2guanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNvc2guanM/MjVjOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTIgTWF0aC5jb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNvc2g6IGZ1bmN0aW9uIGNvc2goeCkge1xuICAgIHJldHVybiAoZXhwKHggPSAreCkgKyBleHAoLXgpKSAvIDI7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.cosh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.expm1.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.expm1.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $expm1 = __webpack_require__(/*! ./_math-expm1 */ \"./node_modules/core-js/modules/_math-expm1.js\");\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.expm1.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.fround.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.fround.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', { fround: __webpack_require__(/*! ./_math-fround */ \"./node_modules/core-js/modules/_math-fround.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzPzA0MmUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.fround.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.hypot.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.hypot.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmh5cG90LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4xNyBNYXRoLmh5cG90KFt2YWx1ZTFbLCB2YWx1ZTJbLCDigKYgXV1dKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBoeXBvdDogZnVuY3Rpb24gaHlwb3QodmFsdWUxLCB2YWx1ZTIpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogTWF0aC5zcXJ0KHN1bSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.hypot.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.log10.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.log10.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMSBNYXRoLmxvZzEwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzEwOiBmdW5jdGlvbiBsb2cxMCh4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpICogTWF0aC5MT0cxMEU7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.log10.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.log1p.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.log1p.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', { log1p: __webpack_require__(/*! ./_math-log1p */ \"./node_modules/core-js/modules/_math-log1p.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.log1p.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.log2.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.log2.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanM/YTY5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.log2.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.sign.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.sign.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', { sign: __webpack_require__(/*! ./_math-sign */ \"./node_modules/core-js/modules/_math-sign.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanM/MGIyMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.sign.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.sinh.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.sinh.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar expm1 = __webpack_require__(/*! ./_math-expm1 */ \"./node_modules/core-js/modules/_math-expm1.js\");\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpbmguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpbmguanM/NmMxYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.sinh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.tanh.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.tanh.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar expm1 = __webpack_require__(/*! ./_math-expm1 */ \"./node_modules/core-js/modules/_math-expm1.js\");\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanM/YzdjNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzMgTWF0aC50YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHRhbmg6IGZ1bmN0aW9uIHRhbmgoeCkge1xuICAgIHZhciBhID0gZXhwbTEoeCA9ICt4KTtcbiAgICB2YXIgYiA9IGV4cG0xKC14KTtcbiAgICByZXR1cm4gYSA9PSBJbmZpbml0eSA/IDEgOiBiID09IEluZmluaXR5ID8gLTEgOiAoYSAtIGIpIC8gKGV4cCh4KSArIGV4cCgteCkpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.tanh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.math.trunc.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.math.trunc.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zNCBNYXRoLnRydW5jKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHRydW5jOiBmdW5jdGlvbiB0cnVuYyhpdCkge1xuICAgIHJldHVybiAoaXQgPiAwID8gTWF0aC5mbG9vciA6IE1hdGguY2VpbCkoaXQpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.math.trunc.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.number.epsilon.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/es6.number.epsilon.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uLmpzPzJlMzciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.number.epsilon.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.number.is-integer.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/es6.number.is-integer.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(/*! ./_is-integer */ \"./node_modules/core-js/modules/_is-integer.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzPzdjZGYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.number.is-integer.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.number.is-safe-integer.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.number.is-safe-integer.js ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar isInteger = __webpack_require__(/*! ./_is-integer */ \"./node_modules/core-js/modules/_is-integer.js\");\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi41IE51bWJlci5pc1NhZmVJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNJbnRlZ2VyID0gcmVxdWlyZSgnLi9faXMtaW50ZWdlcicpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNTYWZlSW50ZWdlcjogZnVuY3Rpb24gaXNTYWZlSW50ZWdlcihudW1iZXIpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKG51bWJlcikgJiYgYWJzKG51bWJlcikgPD0gMHgxZmZmZmZmZmZmZmZmZjtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.number.is-safe-integer.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.number.max-safe-integer.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.number.max-safe-integer.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyLmpzPzg3ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.number.max-safe-integer.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.number.min-safe-integer.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.number.min-safe-integer.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyLmpzPzkyNzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.number.min-safe-integer.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.assign.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.assign.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(/*! ./_object-assign */ \"./node_modules/core-js/modules/_object-assign.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJykgfSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.assign.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.freeze.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.freeze.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar meta = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.freeze.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js": /*!********************************************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar $getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\").f;\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSU9iamVjdChpdCksIGtleSk7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.get-own-property-names.js": /*!***************************************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.get-own-property-names.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('getOwnPropertyNames', function () {\n return __webpack_require__(/*! ./_object-gopn-ext */ \"./node_modules/core-js/modules/_object-gopn-ext.js\").f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzPzI1ZGIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.get-own-property-names.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.get-prototype-of.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.get-prototype-of.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar $getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/modules/_object-gpo.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzP2U0ZjciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.get-prototype-of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.is-extensible.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.is-extensible.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzPzE2NWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.is-extensible.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.is-frozen.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.is-frozen.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.is-frozen.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.is-sealed.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.is-sealed.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.is-sealed.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.keys.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.keys.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzPzQ1NmQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.keys.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.prevent-extensions.js": /*!***********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.prevent-extensions.js ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar meta = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.prevent-extensions.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.seal.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.seal.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar meta = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/modules/_meta.js\").onFreeze;\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/modules/_object-sap.js\")('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzP2NmNmEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.seal.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.object.set-prototype-of.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.object.set-prototype-of.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(/*! ./_set-proto */ \"./node_modules/core-js/modules/_set-proto.js\").set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzP2ZkMjQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.object.set-prototype-of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.promise.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/es6.promise.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/modules/_classof.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/core-js/modules/_an-instance.js\");\nvar forOf = __webpack_require__(/*! ./_for-of */ \"./node_modules/core-js/modules/_for-of.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/core-js/modules/_species-constructor.js\");\nvar task = __webpack_require__(/*! ./_task */ \"./node_modules/core-js/modules/_task.js\").set;\nvar microtask = __webpack_require__(/*! ./_microtask */ \"./node_modules/core-js/modules/_microtask.js\")();\nvar newPromiseCapabilityModule = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/core-js/modules/_new-promise-capability.js\");\nvar perform = __webpack_require__(/*! ./_perform */ \"./node_modules/core-js/modules/_perform.js\");\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"./node_modules/core-js/modules/_user-agent.js\");\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"./node_modules/core-js/modules/_promise-resolve.js\");\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/core-js/modules/_redefine-all.js\")($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/modules/_set-to-string-tag.js\")($Promise, PROMISE);\n__webpack_require__(/*! ./_set-species */ \"./node_modules/core-js/modules/_set-species.js\")(PROMISE);\nWrapper = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\")[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(/*! ./_iter-detect */ \"./node_modules/core-js/modules/_iter-detect.js\")(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.promise.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.apply.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.apply.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar rApply = (__webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMSBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciByQXBwbHkgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuYXBwbHk7XG52YXIgZkFwcGx5ID0gRnVuY3Rpb24uYXBwbHk7XG4vLyBNUyBFZGdlIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByQXBwbHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgYXBwbHk6IGZ1bmN0aW9uIGFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KSB7XG4gICAgdmFyIFQgPSBhRnVuY3Rpb24odGFyZ2V0KTtcbiAgICB2YXIgTCA9IGFuT2JqZWN0KGFyZ3VtZW50c0xpc3QpO1xuICAgIHJldHVybiByQXBwbHkgPyByQXBwbHkoVCwgdGhpc0FyZ3VtZW50LCBMKSA6IGZBcHBseS5jYWxsKFQsIHRoaXNBcmd1bWVudCwgTCk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.apply.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.construct.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.construct.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/modules/_object-create.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar bind = __webpack_require__(/*! ./_bind */ \"./node_modules/core-js/modules/_bind.js\");\nvar rConstruct = (__webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0LmpzPzIzOTciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.construct.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.define-property.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.define-property.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/modules/_to-primitive.js\");\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzPzg4Y2EiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4zIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcylcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbi8vIE1TIEVkZ2UgaGFzIGJyb2tlbiBSZWZsZWN0LmRlZmluZVByb3BlcnR5IC0gdGhyb3dpbmcgaW5zdGVhZCBvZiByZXR1cm5pbmcgZmFsc2VcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGRQLmYoe30sIDEsIHsgdmFsdWU6IDEgfSksIDEsIHsgdmFsdWU6IDIgfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKHByb3BlcnR5S2V5LCB0cnVlKTtcbiAgICBhbk9iamVjdChhdHRyaWJ1dGVzKTtcbiAgICB0cnkge1xuICAgICAgZFAuZih0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.define-property.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.delete-property.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.delete-property.js ***! \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\").f;\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzP2JhMTYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.delete-property.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js": /*!*********************************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzP2ViZGUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.get-prototype-of.js": /*!**********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.get-prototype-of.js ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar getProto = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/modules/_object-gpo.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanM/MmQzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.get-prototype-of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.get.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.get.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\");\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/modules/_object-gpo.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzP2QxODUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS42IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgWywgcmVjZWl2ZXJdKVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjLCBwcm90bztcbiAgaWYgKGFuT2JqZWN0KHRhcmdldCkgPT09IHJlY2VpdmVyKSByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgaWYgKGRlc2MgPSBnT1BELmYodGFyZ2V0LCBwcm9wZXJ0eUtleSkpIHJldHVybiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICA/IGRlc2MudmFsdWVcbiAgICA6IGRlc2MuZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVzYy5nZXQuY2FsbChyZWNlaXZlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkgcmV0dXJuIGdldChwcm90bywgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBnZXQ6IGdldCB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.get.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.has.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.has.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzP2Y2YjMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.has.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.is-extensible.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.is-extensible.js ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanM/MjI1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.is-extensible.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.own-keys.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.own-keys.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(/*! ./_own-keys */ \"./node_modules/core-js/modules/_own-keys.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.own-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.prevent-extensions.js": /*!************************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.prevent-extensions.js ***! \************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzP2ExOWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.prevent-extensions.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.set-prototype-of.js": /*!**********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.set-prototype-of.js ***! \**********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar setProto = __webpack_require__(/*! ./_set-proto */ \"./node_modules/core-js/modules/_set-proto.js\");\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanM/OTI3NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.set-prototype-of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.reflect.set.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es6.reflect.set.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\");\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/modules/_object-gpo.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzPzkyNTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.reflect.set.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.regexp.exec.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es6.regexp.exec.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/core-js/modules/_regexp-exec.js\");\n__webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\")({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjLmpzP2IwYzUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xucmVxdWlyZSgnLi9fZXhwb3J0Jykoe1xuICB0YXJnZXQ6ICdSZWdFeHAnLFxuICBwcm90bzogdHJ1ZSxcbiAgZm9yY2VkOiByZWdleHBFeGVjICE9PSAvLi8uZXhlY1xufSwge1xuICBleGVjOiByZWdleHBFeGVjXG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.exec.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.regexp.flags.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/es6.regexp.flags.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") && /./g.flags != 'g') __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(/*! ./_flags */ \"./node_modules/core-js/modules/_flags.js\")\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanM/Mzg0NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.flags.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.regexp.match.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/es6.regexp.match.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/core-js/modules/_advance-string-index.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/core-js/modules/_regexp-exec-abstract.js\");\n\n// @@match logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/core-js/modules/_fix-re-wks.js\")('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanM/NDkxNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.match.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.regexp.replace.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/es6.regexp.replace.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/core-js/modules/_advance-string-index.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/core-js/modules/_regexp-exec-abstract.js\");\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/core-js/modules/_fix-re-wks.js\")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzP2E0ODEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.replace.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.regexp.search.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es6.regexp.search.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar sameValue = __webpack_require__(/*! ./_same-value */ \"./node_modules/core-js/modules/_same-value.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/core-js/modules/_regexp-exec-abstract.js\");\n\n// @@search logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/core-js/modules/_fix-re-wks.js\")('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.search.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.regexp.split.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/es6.regexp.split.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"./node_modules/core-js/modules/_is-regexp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/core-js/modules/_species-constructor.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/core-js/modules/_advance-string-index.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar callRegExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/core-js/modules/_regexp-exec-abstract.js\");\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/core-js/modules/_regexp-exec.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/core-js/modules/_fix-re-wks.js\")('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanM/MjhhNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.regexp.split.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.set.js": /*!*************************************************!*\ !*** ./node_modules/core-js/modules/es6.set.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar strong = __webpack_require__(/*! ./_collection-strong */ \"./node_modules/core-js/modules/_collection-strong.js\");\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"./node_modules/core-js/modules/_validate-collection.js\");\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(/*! ./_collection */ \"./node_modules/core-js/modules/_collection.js\")(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanM/NGY3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTRVQgPSAnU2V0JztcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBTRVQpLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.set.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.string.code-point-at.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/modules/es6.string.code-point-at.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $at = __webpack_require__(/*! ./_string-at */ \"./node_modules/core-js/modules/_string-at.js\")(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzP2EwMzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.string.code-point-at.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.string.ends-with.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/es6.string.ends-with.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar context = __webpack_require__(/*! ./_string-context */ \"./node_modules/core-js/modules/_string-context.js\");\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ \"./node_modules/core-js/modules/_fails-is-regexp.js\")(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy42IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgoc2VhcmNoU3RyaW5nIFssIGVuZFBvc2l0aW9uXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xudmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIGVuZFBvc2l0aW9uID0gQGxlbmd0aCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIEVORFNfV0lUSCk7XG4gICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICB2YXIgZW5kID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IE1hdGgubWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRlbmRzV2l0aFxuICAgICAgPyAkZW5kc1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.string.ends-with.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.string.from-code-point.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.string.from-code-point.js ***! \********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.string.from-code-point.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.string.includes.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/es6.string.includes.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar context = __webpack_require__(/*! ./_string-context */ \"./node_modules/core-js/modules/_string-context.js\");\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ \"./node_modules/core-js/modules/_fails-is-regexp.js\")(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanM/MmZkYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.string.includes.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.string.raw.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.string.raw.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.string.raw.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.string.repeat.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es6.string.repeat.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(/*! ./_string-repeat */ \"./node_modules/core-js/modules/_string-repeat.js\")\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQoY291bnQpXG4gIHJlcGVhdDogcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpXG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.string.repeat.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.string.starts-with.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/modules/es6.string.starts-with.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar context = __webpack_require__(/*! ./_string-context */ \"./node_modules/core-js/modules/_string-context.js\");\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ \"./node_modules/core-js/modules/_fails-is-regexp.js\")(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanM/ZjU1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.string.starts-with.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.symbol.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/es6.symbol.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar META = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/modules/_meta.js\").KEY;\nvar $fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar shared = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/modules/_set-to-string-tag.js\");\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\");\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"./node_modules/core-js/modules/_wks-ext.js\");\nvar wksDefine = __webpack_require__(/*! ./_wks-define */ \"./node_modules/core-js/modules/_wks-define.js\");\nvar enumKeys = __webpack_require__(/*! ./_enum-keys */ \"./node_modules/core-js/modules/_enum-keys.js\");\nvar isArray = __webpack_require__(/*! ./_is-array */ \"./node_modules/core-js/modules/_is-array.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/modules/_to-primitive.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\nvar _create = __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/modules/_object-create.js\");\nvar gOPNExt = __webpack_require__(/*! ./_object-gopn-ext */ \"./node_modules/core-js/modules/_object-gopn-ext.js\");\nvar $GOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\");\nvar $GOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/modules/_object-gops.js\");\nvar $DP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(/*! ./_object-gopn */ \"./node_modules/core-js/modules/_object-gopn.js\").f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/modules/_object-pie.js\").f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\")) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\")($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanM/OGE4MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.symbol.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.array-buffer.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.array-buffer.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $typed = __webpack_require__(/*! ./_typed */ \"./node_modules/core-js/modules/_typed.js\");\nvar buffer = __webpack_require__(/*! ./_typed-buffer */ \"./node_modules/core-js/modules/_typed-buffer.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar ArrayBuffer = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").ArrayBuffer;\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/core-js/modules/_species-constructor.js\");\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(/*! ./_set-species */ \"./node_modules/core-js/modules/_set-species.js\")(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanM/YzY2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.array-buffer.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.float32-array.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.float32-array.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.float32-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.float64-array.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.float64-array.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0NjQnLCA4LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.float64-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.int16-array.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.int16-array.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzPzE1YWMiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.int16-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.int32-array.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.int32-array.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzP2I2ZTQiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.int32-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.int8-array.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.int8-array.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.int8-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.uint16-array.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.uint16-array.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanM/YWY1NiJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.uint16-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.uint32-array.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.uint32-array.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanM/OWMyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.uint32-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.uint8-array.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.uint8-array.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzPzM0ZWYiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.uint8-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js": /*!***********************************************************************!*\ !*** ./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js ***! \***********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules/_typed-array.js\")('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59LCB0cnVlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.weak-map.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/es6.weak-map.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar each = __webpack_require__(/*! ./_array-methods */ \"./node_modules/core-js/modules/_array-methods.js\")(0);\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar meta = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/modules/_meta.js\");\nvar assign = __webpack_require__(/*! ./_object-assign */ \"./node_modules/core-js/modules/_object-assign.js\");\nvar weak = __webpack_require__(/*! ./_collection-weak */ \"./node_modules/core-js/modules/_collection-weak.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"./node_modules/core-js/modules/_validate-collection.js\");\nvar NATIVE_WEAK_MAP = __webpack_require__(/*! ./_validate-collection */ \"./node_modules/core-js/modules/_validate-collection.js\");\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(/*! ./_collection */ \"./node_modules/core-js/modules/_collection.js\")(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzPzEwYWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.weak-map.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.weak-set.js": /*!******************************************************!*\ !*** ./node_modules/core-js/modules/es6.weak-set.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\nvar weak = __webpack_require__(/*! ./_collection-weak */ \"./node_modules/core-js/modules/_collection-weak.js\");\nvar validate = __webpack_require__(/*! ./_validate-collection */ \"./node_modules/core-js/modules/_validate-collection.js\");\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(/*! ./_collection */ \"./node_modules/core-js/modules/_collection.js\")(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzP2MwMmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.weak-set.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es7.array.includes.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/es7.array.includes.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $includes = __webpack_require__(/*! ./_array-includes */ \"./node_modules/core-js/modules/_array-includes.js\")(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/modules/_add-to-unscopables.js\")('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzLmpzPzY3NjIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnaW5jbHVkZXMnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es7.array.includes.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es7.object.entries.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/es7.object.entries.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $entries = __webpack_require__(/*! ./_object-to-array */ \"./node_modules/core-js/modules/_object-to-array.js\")(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzP2ZmYzEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es7.object.entries.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js": /*!*********************************************************************************!*\ !*** ./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar ownKeys = __webpack_require__(/*! ./_own-keys */ \"./node_modules/core-js/modules/_own-keys.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\");\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"./node_modules/core-js/modules/_create-property.js\");\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzPzhlNmUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es7.object.values.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es7.object.values.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $values = __webpack_require__(/*! ./_object-to-array */ \"./node_modules/core-js/modules/_object-to-array.js\")(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es7.object.values.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es7.string.pad-end.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/es7.string.pad-end.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $pad = __webpack_require__(/*! ./_string-pad */ \"./node_modules/core-js/modules/_string-pad.js\");\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"./node_modules/core-js/modules/_user-agent.js\");\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzP2VkNTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es7.string.pad-end.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es7.string.pad-start.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/es7.string.pad-start.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $pad = __webpack_require__(/*! ./_string-pad */ \"./node_modules/core-js/modules/_string-pad.js\");\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"./node_modules/core-js/modules/_user-agent.js\");\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZFN0YXJ0OiBmdW5jdGlvbiBwYWRTdGFydChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es7.string.pad-start.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/web.dom.iterable.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/web.dom.iterable.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var $iterators = __webpack_require__(/*! ./es6.array.iterator */ \"./node_modules/core-js/modules/es6.array.iterator.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\");\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanM/YWM2YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/web.dom.iterable.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/web.immediate.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/web.immediate.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar $task = __webpack_require__(/*! ./_task */ \"./node_modules/core-js/modules/_task.js\");\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanM/MTMwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/web.immediate.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/web.timers.js": /*!****************************************************!*\ !*** ./node_modules/core-js/modules/web.timers.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"./node_modules/core-js/modules/_user-agent.js\");\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanM/NDc5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/web.timers.js\n"); /***/ }), /***/ "./node_modules/css-loader/lib/css-base.js": /*!*************************************************!*\ !*** ./node_modules/css-loader/lib/css-base.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanM/MjM1MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odXNlU291cmNlTWFwKSB7XG5cdHZhciBsaXN0ID0gW107XG5cblx0Ly8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXHRsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHR2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblx0XHRcdGlmKGl0ZW1bMl0pIHtcblx0XHRcdFx0cmV0dXJuIFwiQG1lZGlhIFwiICsgaXRlbVsyXSArIFwie1wiICsgY29udGVudCArIFwifVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fTtcblxuXHQvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXHRsaXN0LmkgPSBmdW5jdGlvbihtb2R1bGVzLCBtZWRpYVF1ZXJ5KSB7XG5cdFx0aWYodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG5cdFx0dmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGlkID0gdGhpc1tpXVswXTtcblx0XHRcdGlmKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIilcblx0XHRcdFx0YWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuXHRcdH1cblx0XHRmb3IoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IG1vZHVsZXNbaV07XG5cdFx0XHQvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxlXG5cdFx0XHQvLyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCAxMDAlIHBlcmZlY3QgZm9yIHdlaXJkIG1lZGlhIHF1ZXJ5IGNvbWJpbmF0aW9uc1xuXHRcdFx0Ly8gIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cblx0XHRcdC8vICBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cdFx0XHRpZih0eXBlb2YgaXRlbVswXSAhPT0gXCJudW1iZXJcIiB8fCAhYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuXHRcdFx0XHRpZihtZWRpYVF1ZXJ5ICYmICFpdGVtWzJdKSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IG1lZGlhUXVlcnk7XG5cdFx0XHRcdH0gZWxzZSBpZihtZWRpYVF1ZXJ5KSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IFwiKFwiICsgaXRlbVsyXSArIFwiKSBhbmQgKFwiICsgbWVkaWFRdWVyeSArIFwiKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3QucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBsaXN0O1xufTtcblxuZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApIHtcblx0dmFyIGNvbnRlbnQgPSBpdGVtWzFdIHx8ICcnO1xuXHR2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cdGlmICghY3NzTWFwcGluZykge1xuXHRcdHJldHVybiBjb250ZW50O1xuXHR9XG5cblx0aWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuXHRcdHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG5cdFx0XHRyZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcblx0fVxuXG5cdHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59XG5cbi8vIEFkYXB0ZWQgZnJvbSBjb252ZXJ0LXNvdXJjZS1tYXAgKE1JVClcbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5cdHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuXHR2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuXG5cdHJldHVybiAnLyojICcgKyBkYXRhICsgJyAqLyc7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/lib/css-base.js\n"); /***/ }), /***/ "./node_modules/process/browser.js": /*!*****************************************!*\ !*** ./node_modules/process/browser.js ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcz9mMjhjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/process/browser.js\n"); /***/ }), /***/ "./node_modules/regenerator-runtime/runtime.js": /*!*****************************************************!*\ !*** ./node_modules/regenerator-runtime/runtime.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("/* WEBPACK VAR INJECTION */(function(global, Promise) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! bluebird */ \"./node_modules/bluebird/js/browser/bluebird.js-exposed\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcz85NmNmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgZ2xvYmFsLnByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBnbG9iYWwucHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/regenerator-runtime/runtime.js\n"); /***/ }), /***/ "./node_modules/setimmediate/setImmediate.js": /*!***************************************************!*\ !*** ./node_modules/setimmediate/setImmediate.js ***! \***************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a