| /******/ (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 = 1); |
| /******/ }) |
| /************************************************************************/ |
| /******/ ({ |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js ***! |
| \*******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/array/is-array */ "../node_modules/core-js-pure/stable/array/is-array.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js": |
| /*!********************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js ***! |
| \********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ "../node_modules/core-js-pure/stable/instance/concat.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/every.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/every.js ***! |
| \*******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/every */ "../node_modules/core-js-pure/stable/instance/every.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js": |
| /*!********************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js ***! |
| \********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ "../node_modules/core-js-pure/stable/instance/filter.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/flat-map.js": |
| /*!**********************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/flat-map.js ***! |
| \**********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/flat-map */ "../node_modules/core-js-pure/stable/instance/flat-map.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js": |
| /*!**********************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js ***! |
| \**********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/for-each */ "../node_modules/core-js-pure/stable/instance/for-each.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js": |
| /*!**********************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js ***! |
| \**********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of */ "../node_modules/core-js-pure/stable/instance/index-of.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js": |
| /*!*****************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js ***! |
| \*****************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ "../node_modules/core-js-pure/stable/instance/map.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js ***! |
| \*******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/slice */ "../node_modules/core-js-pure/stable/instance/slice.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/some.js": |
| /*!******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/some.js ***! |
| \******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/some */ "../node_modules/core-js-pure/stable/instance/some.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js": |
| /*!******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js ***! |
| \******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/instance/sort */ "../node_modules/core-js-pure/stable/instance/sort.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js ***! |
| \*******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/json/stringify */ "../node_modules/core-js-pure/stable/json/stringify.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js": |
| /*!****************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js ***! |
| \****************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/object/keys */ "../node_modules/core-js-pure/stable/object/keys.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/promise.js": |
| /*!************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/promise.js ***! |
| \************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/promise */ "../node_modules/core-js-pure/stable/promise/index.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/symbol/async-iterator.js": |
| /*!**************************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/symbol/async-iterator.js ***! |
| \**************************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/symbol/async-iterator */ "../node_modules/core-js-pure/stable/symbol/async-iterator.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js-stable/url.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js-stable/url.js ***! |
| \********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/stable/url */ "../node_modules/core-js-pure/stable/url/index.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/array/from.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/array/from.js ***! |
| \********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/array/from */ "../node_modules/core-js-pure/features/array/from.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/array/is-array.js": |
| /*!************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/array/is-array.js ***! |
| \************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/array/is-array */ "../node_modules/core-js-pure/features/array/is-array.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js": |
| /*!*****************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js ***! |
| \*****************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/get-iterator-method */ "../node_modules/core-js-pure/features/get-iterator-method.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/get-iterator.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/get-iterator.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/get-iterator */ "../node_modules/core-js-pure/features/get-iterator.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/is-iterable.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/is-iterable.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/is-iterable */ "../node_modules/core-js-pure/features/is-iterable.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/promise.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/promise.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/promise */ "../node_modules/core-js-pure/features/promise/index.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/symbol.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/symbol.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/symbol */ "../node_modules/core-js-pure/features/symbol/index.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/symbol/async-iterator.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/symbol/async-iterator.js ***! |
| \*******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/symbol/async-iterator */ "../node_modules/core-js-pure/features/symbol/async-iterator.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/core-js/symbol/iterator.js": |
| /*!*************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/core-js/symbol/iterator.js ***! |
| \*************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! core-js-pure/features/symbol/iterator */ "../node_modules/core-js-pure/features/symbol/iterator.js"); |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/AsyncGenerator.js": |
| /*!****************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/AsyncGenerator.js ***! |
| \****************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AsyncGenerator; }); |
| /* harmony import */ var _core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/symbol/async-iterator */ "../node_modules/@babel/runtime-corejs3/core-js/symbol/async-iterator.js"); |
| /* harmony import */ var _core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _core_js_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/symbol */ "../node_modules/@babel/runtime-corejs3/core-js/symbol.js"); |
| /* harmony import */ var _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol__WEBPACK_IMPORTED_MODULE_1__); |
| /* harmony import */ var _core_js_promise__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/promise */ "../node_modules/@babel/runtime-corejs3/core-js/promise.js"); |
| /* harmony import */ var _core_js_promise__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_core_js_promise__WEBPACK_IMPORTED_MODULE_2__); |
| /* harmony import */ var _AwaitValue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AwaitValue */ "../node_modules/@babel/runtime-corejs3/helpers/esm/AwaitValue.js"); |
| |
| |
| |
| |
| function AsyncGenerator(gen) { |
| var front, back; |
| |
| function send(key, arg) { |
| return new _core_js_promise__WEBPACK_IMPORTED_MODULE_2___default.a(function (resolve, reject) { |
| var request = { |
| key: key, |
| arg: arg, |
| resolve: resolve, |
| reject: reject, |
| next: null |
| }; |
| |
| if (back) { |
| back = back.next = request; |
| } else { |
| front = back = request; |
| resume(key, arg); |
| } |
| }); |
| } |
| |
| function resume(key, arg) { |
| try { |
| var result = gen[key](arg); |
| var value = result.value; |
| var wrappedAwait = value instanceof _AwaitValue__WEBPACK_IMPORTED_MODULE_3__["default"]; |
| |
| _core_js_promise__WEBPACK_IMPORTED_MODULE_2___default.a.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) { |
| if (wrappedAwait) { |
| resume(key === "return" ? "return" : "next", arg); |
| return; |
| } |
| |
| settle(result.done ? "return" : "normal", arg); |
| }, function (err) { |
| resume("throw", err); |
| }); |
| } catch (err) { |
| settle("throw", err); |
| } |
| } |
| |
| function settle(type, value) { |
| switch (type) { |
| case "return": |
| front.resolve({ |
| value: value, |
| done: true |
| }); |
| break; |
| |
| case "throw": |
| front.reject(value); |
| break; |
| |
| default: |
| front.resolve({ |
| value: value, |
| done: false |
| }); |
| break; |
| } |
| |
| front = front.next; |
| |
| if (front) { |
| resume(front.key, front.arg); |
| } else { |
| back = null; |
| } |
| } |
| |
| this._invoke = send; |
| |
| if (typeof gen["return"] !== "function") { |
| this["return"] = undefined; |
| } |
| } |
| |
| if (typeof _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default.a === "function" && _core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_0___default.a) { |
| AsyncGenerator.prototype[_core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_0___default.a] = function () { |
| return this; |
| }; |
| } |
| |
| AsyncGenerator.prototype.next = function (arg) { |
| return this._invoke("next", arg); |
| }; |
| |
| AsyncGenerator.prototype["throw"] = function (arg) { |
| return this._invoke("throw", arg); |
| }; |
| |
| AsyncGenerator.prototype["return"] = function (arg) { |
| return this._invoke("return", arg); |
| }; |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/AwaitValue.js": |
| /*!************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/AwaitValue.js ***! |
| \************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _AwaitValue; }); |
| function _AwaitValue(value) { |
| this.wrapped = value; |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithHoles.js": |
| /*!****************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithHoles.js ***! |
| \****************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _arrayWithHoles; }); |
| /* harmony import */ var _core_js_array_is_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/array/is-array */ "../node_modules/@babel/runtime-corejs3/core-js/array/is-array.js"); |
| /* harmony import */ var _core_js_array_is_array__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_array_is_array__WEBPACK_IMPORTED_MODULE_0__); |
| |
| function _arrayWithHoles(arr) { |
| if (_core_js_array_is_array__WEBPACK_IMPORTED_MODULE_0___default()(arr)) return arr; |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithoutHoles.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithoutHoles.js ***! |
| \*******************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _arrayWithoutHoles; }); |
| /* harmony import */ var _core_js_array_is_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/array/is-array */ "../node_modules/@babel/runtime-corejs3/core-js/array/is-array.js"); |
| /* harmony import */ var _core_js_array_is_array__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_array_is_array__WEBPACK_IMPORTED_MODULE_0__); |
| |
| function _arrayWithoutHoles(arr) { |
| if (_core_js_array_is_array__WEBPACK_IMPORTED_MODULE_0___default()(arr)) { |
| for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { |
| arr2[i] = arr[i]; |
| } |
| |
| return arr2; |
| } |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncGeneratorDelegate.js": |
| /*!************************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/asyncGeneratorDelegate.js ***! |
| \************************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _asyncGeneratorDelegate; }); |
| /* harmony import */ var _core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/symbol/iterator */ "../node_modules/@babel/runtime-corejs3/core-js/symbol/iterator.js"); |
| /* harmony import */ var _core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _core_js_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/symbol */ "../node_modules/@babel/runtime-corejs3/core-js/symbol.js"); |
| /* harmony import */ var _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol__WEBPACK_IMPORTED_MODULE_1__); |
| /* harmony import */ var _core_js_promise__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/promise */ "../node_modules/@babel/runtime-corejs3/core-js/promise.js"); |
| /* harmony import */ var _core_js_promise__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_core_js_promise__WEBPACK_IMPORTED_MODULE_2__); |
| |
| |
| |
| function _asyncGeneratorDelegate(inner, awaitWrap) { |
| var iter = {}, |
| waiting = false; |
| |
| function pump(key, value) { |
| waiting = true; |
| value = new _core_js_promise__WEBPACK_IMPORTED_MODULE_2___default.a(function (resolve) { |
| resolve(inner[key](value)); |
| }); |
| return { |
| done: false, |
| value: awaitWrap(value) |
| }; |
| } |
| |
| ; |
| |
| if (typeof _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default.a === "function" && _core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0___default.a) { |
| iter[_core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0___default.a] = function () { |
| return this; |
| }; |
| } |
| |
| iter.next = function (value) { |
| if (waiting) { |
| waiting = false; |
| return value; |
| } |
| |
| return pump("next", value); |
| }; |
| |
| if (typeof inner["throw"] === "function") { |
| iter["throw"] = function (value) { |
| if (waiting) { |
| waiting = false; |
| throw value; |
| } |
| |
| return pump("throw", value); |
| }; |
| } |
| |
| if (typeof inner["return"] === "function") { |
| iter["return"] = function (value) { |
| if (waiting) { |
| waiting = false; |
| return value; |
| } |
| |
| return pump("return", value); |
| }; |
| } |
| |
| return iter; |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncIterator.js": |
| /*!***************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/asyncIterator.js ***! |
| \***************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _asyncIterator; }); |
| /* harmony import */ var _core_js_get_iterator_method__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/get-iterator-method */ "../node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js"); |
| /* harmony import */ var _core_js_get_iterator_method__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_get_iterator_method__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/symbol/iterator */ "../node_modules/@babel/runtime-corejs3/core-js/symbol/iterator.js"); |
| /* harmony import */ var _core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_1__); |
| /* harmony import */ var _core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/symbol/async-iterator */ "../node_modules/@babel/runtime-corejs3/core-js/symbol/async-iterator.js"); |
| /* harmony import */ var _core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_2__); |
| /* harmony import */ var _core_js_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core-js/symbol */ "../node_modules/@babel/runtime-corejs3/core-js/symbol.js"); |
| /* harmony import */ var _core_js_symbol__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol__WEBPACK_IMPORTED_MODULE_3__); |
| |
| |
| |
| |
| function _asyncIterator(iterable) { |
| var method; |
| |
| if (typeof _core_js_symbol__WEBPACK_IMPORTED_MODULE_3___default.a !== "undefined") { |
| if (_core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_2___default.a) { |
| method = iterable[_core_js_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_2___default.a]; |
| if (method != null) return method.call(iterable); |
| } |
| |
| if (_core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_1___default.a) { |
| method = _core_js_get_iterator_method__WEBPACK_IMPORTED_MODULE_0___default()(iterable); |
| if (method != null) return method.call(iterable); |
| } |
| } |
| |
| throw new TypeError("Object is not async iterable"); |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncToGenerator.js": |
| /*!******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/asyncToGenerator.js ***! |
| \******************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _asyncToGenerator; }); |
| /* harmony import */ var _core_js_promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/promise */ "../node_modules/@babel/runtime-corejs3/core-js/promise.js"); |
| /* harmony import */ var _core_js_promise__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_promise__WEBPACK_IMPORTED_MODULE_0__); |
| |
| |
| function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { |
| try { |
| var info = gen[key](arg); |
| var value = info.value; |
| } catch (error) { |
| reject(error); |
| return; |
| } |
| |
| if (info.done) { |
| resolve(value); |
| } else { |
| _core_js_promise__WEBPACK_IMPORTED_MODULE_0___default.a.resolve(value).then(_next, _throw); |
| } |
| } |
| |
| function _asyncToGenerator(fn) { |
| return function () { |
| var self = this, |
| args = arguments; |
| return new _core_js_promise__WEBPACK_IMPORTED_MODULE_0___default.a(function (resolve, reject) { |
| var gen = fn.apply(self, args); |
| |
| function _next(value) { |
| asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); |
| } |
| |
| function _throw(err) { |
| asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); |
| } |
| |
| _next(undefined); |
| }); |
| }; |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator.js": |
| /*!*********************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator.js ***! |
| \*********************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _awaitAsyncGenerator; }); |
| /* harmony import */ var _AwaitValue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AwaitValue */ "../node_modules/@babel/runtime-corejs3/helpers/esm/AwaitValue.js"); |
| |
| function _awaitAsyncGenerator(value) { |
| return new _AwaitValue__WEBPACK_IMPORTED_MODULE_0__["default"](value); |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArray.js": |
| /*!*****************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArray.js ***! |
| \*****************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _iterableToArray; }); |
| /* harmony import */ var _core_js_array_from__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/array/from */ "../node_modules/@babel/runtime-corejs3/core-js/array/from.js"); |
| /* harmony import */ var _core_js_array_from__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_array_from__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _core_js_is_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/is-iterable */ "../node_modules/@babel/runtime-corejs3/core-js/is-iterable.js"); |
| /* harmony import */ var _core_js_is_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_is_iterable__WEBPACK_IMPORTED_MODULE_1__); |
| |
| |
| function _iterableToArray(iter) { |
| if (_core_js_is_iterable__WEBPACK_IMPORTED_MODULE_1___default()(Object(iter)) || Object.prototype.toString.call(iter) === "[object Arguments]") return _core_js_array_from__WEBPACK_IMPORTED_MODULE_0___default()(iter); |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArrayLimit.js": |
| /*!**********************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArrayLimit.js ***! |
| \**********************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _iterableToArrayLimit; }); |
| /* harmony import */ var _core_js_get_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/get-iterator */ "../node_modules/@babel/runtime-corejs3/core-js/get-iterator.js"); |
| /* harmony import */ var _core_js_get_iterator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _core_js_is_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/is-iterable */ "../node_modules/@babel/runtime-corejs3/core-js/is-iterable.js"); |
| /* harmony import */ var _core_js_is_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_is_iterable__WEBPACK_IMPORTED_MODULE_1__); |
| |
| |
| function _iterableToArrayLimit(arr, i) { |
| if (!(_core_js_is_iterable__WEBPACK_IMPORTED_MODULE_1___default()(Object(arr)) || Object.prototype.toString.call(arr) === "[object Arguments]")) { |
| return; |
| } |
| |
| var _arr = []; |
| var _n = true; |
| var _d = false; |
| var _e = undefined; |
| |
| try { |
| for (var _i = _core_js_get_iterator__WEBPACK_IMPORTED_MODULE_0___default()(arr), _s; !(_n = (_s = _i.next()).done); _n = true) { |
| _arr.push(_s.value); |
| |
| if (i && _arr.length === i) break; |
| } |
| } catch (err) { |
| _d = true; |
| _e = err; |
| } finally { |
| try { |
| if (!_n && _i["return"] != null) _i["return"](); |
| } finally { |
| if (_d) throw _e; |
| } |
| } |
| |
| return _arr; |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableRest.js": |
| /*!*****************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableRest.js ***! |
| \*****************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _nonIterableRest; }); |
| function _nonIterableRest() { |
| throw new TypeError("Invalid attempt to destructure non-iterable instance"); |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableSpread.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableSpread.js ***! |
| \*******************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _nonIterableSpread; }); |
| function _nonIterableSpread() { |
| throw new TypeError("Invalid attempt to spread non-iterable instance"); |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js": |
| /*!***************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js ***! |
| \***************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _slicedToArray; }); |
| /* harmony import */ var _arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles */ "../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithHoles.js"); |
| /* harmony import */ var _iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit */ "../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArrayLimit.js"); |
| /* harmony import */ var _nonIterableRest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nonIterableRest */ "../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableRest.js"); |
| |
| |
| |
| function _slicedToArray(arr, i) { |
| return Object(_arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || Object(_iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__["default"])(arr, i) || Object(_nonIterableRest__WEBPACK_IMPORTED_MODULE_2__["default"])(); |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js ***! |
| \*******************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _toConsumableArray; }); |
| /* harmony import */ var _arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithoutHoles */ "../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithoutHoles.js"); |
| /* harmony import */ var _iterableToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray */ "../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArray.js"); |
| /* harmony import */ var _nonIterableSpread__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nonIterableSpread */ "../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableSpread.js"); |
| |
| |
| |
| function _toConsumableArray(arr) { |
| return Object(_arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || Object(_iterableToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(arr) || Object(_nonIterableSpread__WEBPACK_IMPORTED_MODULE_2__["default"])(); |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js ***! |
| \********************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _typeof; }); |
| /* harmony import */ var _core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/symbol/iterator */ "../node_modules/@babel/runtime-corejs3/core-js/symbol/iterator.js"); |
| /* harmony import */ var _core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _core_js_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/symbol */ "../node_modules/@babel/runtime-corejs3/core-js/symbol.js"); |
| /* harmony import */ var _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_symbol__WEBPACK_IMPORTED_MODULE_1__); |
| |
| |
| function _typeof(obj) { |
| "@babel/helpers - typeof"; |
| |
| if (typeof _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default.a === "function" && typeof _core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0___default.a === "symbol") { |
| _typeof = function _typeof(obj) { |
| return typeof obj; |
| }; |
| } else { |
| _typeof = function _typeof(obj) { |
| return obj && typeof _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default.a === "function" && obj.constructor === _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default.a && obj !== _core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default.a.prototype ? "symbol" : typeof obj; |
| }; |
| } |
| |
| return _typeof(obj); |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator.js": |
| /*!********************************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator.js ***! |
| \********************************************************************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _wrapAsyncGenerator; }); |
| /* harmony import */ var _AsyncGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/AsyncGenerator.js"); |
| |
| function _wrapAsyncGenerator(fn) { |
| return function () { |
| return new _AsyncGenerator__WEBPACK_IMPORTED_MODULE_0__["default"](fn.apply(this, arguments)); |
| }; |
| } |
| |
| /***/ }), |
| |
| /***/ "../node_modules/@babel/runtime-corejs3/regenerator/index.js": |
| /*!*******************************************************************!*\ |
| !*** ../node_modules/@babel/runtime-corejs3/regenerator/index.js ***! |
| \*******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! regenerator-runtime */ "../node_modules/regenerator-runtime/runtime.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/ancestors/index.js": |
| /*!******************************************!*\ |
| !*** ../node_modules/ancestors/index.js ***! |
| \******************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = parents |
| |
| function parents(node, filter) { |
| var out = [] |
| |
| filter = filter || noop |
| |
| do { |
| out.push(node) |
| node = node.parentNode |
| } while(node && node.tagName && filter(node)) |
| |
| return out.slice(1) |
| } |
| |
| function noop(n) { |
| return true |
| } |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/cartesian/index.js": |
| /*!******************************************!*\ |
| !*** ../node_modules/cartesian/index.js ***! |
| \******************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var extend = __webpack_require__(/*! xtend/immutable */ "../node_modules/xtend/immutable.js"); |
| |
| // Public API |
| module.exports = cartesian; |
| |
| /** |
| * Creates cartesian product of the provided properties |
| * |
| * @param {object|array} list - list of (array) properties or array of arrays |
| * @returns {array} all the combinations of the properties |
| */ |
| function cartesian(list) |
| { |
| var last, init, keys, product = []; |
| |
| if (Array.isArray(list)) |
| { |
| init = []; |
| last = list.length - 1; |
| } |
| else if (typeof list == 'object' && list !== null) |
| { |
| init = {}; |
| keys = Object.keys(list); |
| last = keys.length - 1; |
| } |
| else |
| { |
| throw new TypeError('Expecting an Array or an Object, but `' + (list === null ? 'null' : typeof list) + '` provided.'); |
| } |
| |
| function add(row, i) |
| { |
| var j, k, r; |
| |
| k = keys ? keys[i] : i; |
| |
| // either array or not, not expecting objects here |
| Array.isArray(list[k]) || (typeof list[k] == 'undefined' ? list[k] = [] : list[k] = [list[k]]); |
| |
| for (j=0; j < list[k].length; j++) |
| { |
| r = clone(row); |
| store(r, list[k][j], k); |
| |
| if (i >= last) |
| { |
| product.push(r); |
| } |
| else |
| { |
| add(r, i + 1); |
| } |
| } |
| } |
| |
| add(init, 0); |
| |
| return product; |
| } |
| |
| /** |
| * Clones (shallow copy) provided object or array |
| * |
| * @param {object|array} obj - object or array to clone |
| * @returns {object|array} - shallow copy of the provided object or array |
| */ |
| function clone(obj) |
| { |
| return Array.isArray(obj) ? [].concat(obj) : extend(obj); |
| } |
| |
| /** |
| * Stores provided element in the provided object or array |
| * |
| * @param {object|array} obj - object or array to add to |
| * @param {mixed} elem - element to add |
| * @param {string|number} key - object's property key to add to |
| * @returns {void} |
| */ |
| function store(obj, elem, key) |
| { |
| Array.isArray(obj) ? obj.push(elem) : (obj[key] = elem); |
| } |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/from.js": |
| /*!*****************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/from.js ***! |
| \*****************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../modules/es.string.iterator */ "../node_modules/core-js-pure/modules/es.string.iterator.js"); |
| __webpack_require__(/*! ../../modules/es.array.from */ "../node_modules/core-js-pure/modules/es.array.from.js"); |
| var path = __webpack_require__(/*! ../../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| |
| module.exports = path.Array.from; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/is-array.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/is-array.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../modules/es.array.is-array */ "../node_modules/core-js-pure/modules/es.array.is-array.js"); |
| var path = __webpack_require__(/*! ../../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| |
| module.exports = path.Array.isArray; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/concat.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/concat.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.concat */ "../node_modules/core-js-pure/modules/es.array.concat.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').concat; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/every.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/every.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.every */ "../node_modules/core-js-pure/modules/es.array.every.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').every; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/filter.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/filter.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.filter */ "../node_modules/core-js-pure/modules/es.array.filter.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').filter; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/flat-map.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/flat-map.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.flat-map */ "../node_modules/core-js-pure/modules/es.array.flat-map.js"); |
| __webpack_require__(/*! ../../../modules/es.array.unscopables.flat-map */ "../node_modules/core-js-pure/modules/es.array.unscopables.flat-map.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').flatMap; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/for-each.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/for-each.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.for-each */ "../node_modules/core-js-pure/modules/es.array.for-each.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').forEach; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/index-of.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/index-of.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.index-of */ "../node_modules/core-js-pure/modules/es.array.index-of.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').indexOf; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/map.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/map.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.map */ "../node_modules/core-js-pure/modules/es.array.map.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').map; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/slice.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/slice.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.slice */ "../node_modules/core-js-pure/modules/es.array.slice.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').slice; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/some.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/some.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.some */ "../node_modules/core-js-pure/modules/es.array.some.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').some; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/array/virtual/sort.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/array/virtual/sort.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../../modules/es.array.sort */ "../node_modules/core-js-pure/modules/es.array.sort.js"); |
| var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ "../node_modules/core-js-pure/internals/entry-virtual.js"); |
| |
| module.exports = entryVirtual('Array').sort; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/concat.js": |
| /*!**********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/concat.js ***! |
| \**********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var concat = __webpack_require__(/*! ../array/virtual/concat */ "../node_modules/core-js-pure/es/array/virtual/concat.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.concat; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.concat) ? concat : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/every.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/every.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var every = __webpack_require__(/*! ../array/virtual/every */ "../node_modules/core-js-pure/es/array/virtual/every.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.every; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.every) ? every : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/filter.js": |
| /*!**********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/filter.js ***! |
| \**********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var filter = __webpack_require__(/*! ../array/virtual/filter */ "../node_modules/core-js-pure/es/array/virtual/filter.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.filter; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filter) ? filter : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/flat-map.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/flat-map.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var flatMap = __webpack_require__(/*! ../array/virtual/flat-map */ "../node_modules/core-js-pure/es/array/virtual/flat-map.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.flatMap; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.flatMap) ? flatMap : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/index-of.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/index-of.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var indexOf = __webpack_require__(/*! ../array/virtual/index-of */ "../node_modules/core-js-pure/es/array/virtual/index-of.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.indexOf; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.indexOf) ? indexOf : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/map.js": |
| /*!*******************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/map.js ***! |
| \*******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var map = __webpack_require__(/*! ../array/virtual/map */ "../node_modules/core-js-pure/es/array/virtual/map.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.map; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/slice.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/slice.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var slice = __webpack_require__(/*! ../array/virtual/slice */ "../node_modules/core-js-pure/es/array/virtual/slice.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.slice; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/some.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/some.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var some = __webpack_require__(/*! ../array/virtual/some */ "../node_modules/core-js-pure/es/array/virtual/some.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.some; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.some) ? some : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/instance/sort.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/instance/sort.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var sort = __webpack_require__(/*! ../array/virtual/sort */ "../node_modules/core-js-pure/es/array/virtual/sort.js"); |
| |
| var ArrayPrototype = Array.prototype; |
| |
| module.exports = function (it) { |
| var own = it.sort; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.sort) ? sort : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/json/stringify.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/json/stringify.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var core = __webpack_require__(/*! ../../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify }); |
| |
| module.exports = function stringify(it) { // eslint-disable-line no-unused-vars |
| return $JSON.stringify.apply($JSON, arguments); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/object/keys.js": |
| /*!******************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/object/keys.js ***! |
| \******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../modules/es.object.keys */ "../node_modules/core-js-pure/modules/es.object.keys.js"); |
| var path = __webpack_require__(/*! ../../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| |
| module.exports = path.Object.keys; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/promise/index.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/promise/index.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../modules/es.object.to-string */ "../node_modules/core-js-pure/modules/es.object.to-string.js"); |
| __webpack_require__(/*! ../../modules/es.string.iterator */ "../node_modules/core-js-pure/modules/es.string.iterator.js"); |
| __webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "../node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); |
| __webpack_require__(/*! ../../modules/es.promise */ "../node_modules/core-js-pure/modules/es.promise.js"); |
| __webpack_require__(/*! ../../modules/es.promise.all-settled */ "../node_modules/core-js-pure/modules/es.promise.all-settled.js"); |
| __webpack_require__(/*! ../../modules/es.promise.finally */ "../node_modules/core-js-pure/modules/es.promise.finally.js"); |
| var path = __webpack_require__(/*! ../../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| |
| module.exports = path.Promise; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/symbol/async-iterator.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/symbol/async-iterator.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../modules/es.symbol.async-iterator */ "../node_modules/core-js-pure/modules/es.symbol.async-iterator.js"); |
| var WrappedWellKnownSymbolModule = __webpack_require__(/*! ../../internals/wrapped-well-known-symbol */ "../node_modules/core-js-pure/internals/wrapped-well-known-symbol.js"); |
| |
| module.exports = WrappedWellKnownSymbolModule.f('asyncIterator'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/symbol/index.js": |
| /*!*******************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/symbol/index.js ***! |
| \*******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../modules/es.array.concat */ "../node_modules/core-js-pure/modules/es.array.concat.js"); |
| __webpack_require__(/*! ../../modules/es.object.to-string */ "../node_modules/core-js-pure/modules/es.object.to-string.js"); |
| __webpack_require__(/*! ../../modules/es.symbol */ "../node_modules/core-js-pure/modules/es.symbol.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.async-iterator */ "../node_modules/core-js-pure/modules/es.symbol.async-iterator.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.description */ "../node_modules/core-js-pure/modules/es.symbol.description.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.has-instance */ "../node_modules/core-js-pure/modules/es.symbol.has-instance.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.is-concat-spreadable */ "../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.iterator */ "../node_modules/core-js-pure/modules/es.symbol.iterator.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.match */ "../node_modules/core-js-pure/modules/es.symbol.match.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.match-all */ "../node_modules/core-js-pure/modules/es.symbol.match-all.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.replace */ "../node_modules/core-js-pure/modules/es.symbol.replace.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.search */ "../node_modules/core-js-pure/modules/es.symbol.search.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.species */ "../node_modules/core-js-pure/modules/es.symbol.species.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.split */ "../node_modules/core-js-pure/modules/es.symbol.split.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.to-primitive */ "../node_modules/core-js-pure/modules/es.symbol.to-primitive.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.to-string-tag */ "../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js"); |
| __webpack_require__(/*! ../../modules/es.symbol.unscopables */ "../node_modules/core-js-pure/modules/es.symbol.unscopables.js"); |
| __webpack_require__(/*! ../../modules/es.math.to-string-tag */ "../node_modules/core-js-pure/modules/es.math.to-string-tag.js"); |
| __webpack_require__(/*! ../../modules/es.json.to-string-tag */ "../node_modules/core-js-pure/modules/es.json.to-string-tag.js"); |
| var path = __webpack_require__(/*! ../../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| |
| module.exports = path.Symbol; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/es/symbol/iterator.js": |
| /*!**********************************************************!*\ |
| !*** ../node_modules/core-js-pure/es/symbol/iterator.js ***! |
| \**********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../modules/es.symbol.iterator */ "../node_modules/core-js-pure/modules/es.symbol.iterator.js"); |
| __webpack_require__(/*! ../../modules/es.string.iterator */ "../node_modules/core-js-pure/modules/es.string.iterator.js"); |
| __webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "../node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); |
| var WrappedWellKnownSymbolModule = __webpack_require__(/*! ../../internals/wrapped-well-known-symbol */ "../node_modules/core-js-pure/internals/wrapped-well-known-symbol.js"); |
| |
| module.exports = WrappedWellKnownSymbolModule.f('iterator'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/array/from.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/array/from.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/array/from */ "../node_modules/core-js-pure/es/array/from.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/array/is-array.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/array/is-array.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/array/is-array */ "../node_modules/core-js-pure/es/array/is-array.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/get-iterator-method.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/get-iterator-method.js ***! |
| \********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../modules/web.dom-collections.iterator */ "../node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); |
| __webpack_require__(/*! ../modules/es.string.iterator */ "../node_modules/core-js-pure/modules/es.string.iterator.js"); |
| |
| module.exports = __webpack_require__(/*! ../internals/get-iterator-method */ "../node_modules/core-js-pure/internals/get-iterator-method.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/get-iterator.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/get-iterator.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../modules/web.dom-collections.iterator */ "../node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); |
| __webpack_require__(/*! ../modules/es.string.iterator */ "../node_modules/core-js-pure/modules/es.string.iterator.js"); |
| |
| module.exports = __webpack_require__(/*! ../internals/get-iterator */ "../node_modules/core-js-pure/internals/get-iterator.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/is-iterable.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/is-iterable.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../modules/web.dom-collections.iterator */ "../node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); |
| __webpack_require__(/*! ../modules/es.string.iterator */ "../node_modules/core-js-pure/modules/es.string.iterator.js"); |
| |
| module.exports = __webpack_require__(/*! ../internals/is-iterable */ "../node_modules/core-js-pure/internals/is-iterable.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/promise/index.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/promise/index.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/promise */ "../node_modules/core-js-pure/es/promise/index.js"); |
| |
| __webpack_require__(/*! ../../modules/esnext.aggregate-error */ "../node_modules/core-js-pure/modules/esnext.aggregate-error.js"); |
| // TODO: Remove from `core-js@4` |
| __webpack_require__(/*! ../../modules/esnext.promise.all-settled */ "../node_modules/core-js-pure/modules/esnext.promise.all-settled.js"); |
| __webpack_require__(/*! ../../modules/esnext.promise.try */ "../node_modules/core-js-pure/modules/esnext.promise.try.js"); |
| __webpack_require__(/*! ../../modules/esnext.promise.any */ "../node_modules/core-js-pure/modules/esnext.promise.any.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/symbol/async-iterator.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/symbol/async-iterator.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/symbol/async-iterator */ "../node_modules/core-js-pure/es/symbol/async-iterator.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/symbol/index.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/symbol/index.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/symbol */ "../node_modules/core-js-pure/es/symbol/index.js"); |
| |
| __webpack_require__(/*! ../../modules/esnext.symbol.async-dispose */ "../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js"); |
| __webpack_require__(/*! ../../modules/esnext.symbol.dispose */ "../node_modules/core-js-pure/modules/esnext.symbol.dispose.js"); |
| __webpack_require__(/*! ../../modules/esnext.symbol.observable */ "../node_modules/core-js-pure/modules/esnext.symbol.observable.js"); |
| __webpack_require__(/*! ../../modules/esnext.symbol.pattern-match */ "../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js"); |
| __webpack_require__(/*! ../../modules/esnext.symbol.replace-all */ "../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/features/symbol/iterator.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/features/symbol/iterator.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/symbol/iterator */ "../node_modules/core-js-pure/es/symbol/iterator.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/a-function.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/a-function.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = function (it) { |
| if (typeof it != 'function') { |
| throw TypeError(String(it) + ' is not a function'); |
| } return it; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/a-possible-prototype.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/a-possible-prototype.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| |
| module.exports = function (it) { |
| if (!isObject(it) && it !== null) { |
| throw TypeError("Can't set " + String(it) + ' as a prototype'); |
| } return it; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/add-to-unscopables.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/add-to-unscopables.js ***! |
| \********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = function () { /* empty */ }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/an-instance.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/an-instance.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = function (it, Constructor, name) { |
| if (!(it instanceof Constructor)) { |
| throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); |
| } return it; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/an-object.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/an-object.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| |
| module.exports = function (it) { |
| if (!isObject(it)) { |
| throw TypeError(String(it) + ' is not an object'); |
| } return it; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/array-for-each.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/array-for-each.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $forEach = __webpack_require__(/*! ../internals/array-iteration */ "../node_modules/core-js-pure/internals/array-iteration.js").forEach; |
| var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ "../node_modules/core-js-pure/internals/sloppy-array-method.js"); |
| |
| // `Array.prototype.forEach` method implementation |
| // https://tc39.github.io/ecma262/#sec-array.prototype.foreach |
| module.exports = sloppyArrayMethod('forEach') ? function forEach(callbackfn /* , thisArg */) { |
| return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); |
| } : [].forEach; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/array-from.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/array-from.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var bind = __webpack_require__(/*! ../internals/bind-context */ "../node_modules/core-js-pure/internals/bind-context.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ "../node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js"); |
| var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "../node_modules/core-js-pure/internals/is-array-iterator-method.js"); |
| var toLength = __webpack_require__(/*! ../internals/to-length */ "../node_modules/core-js-pure/internals/to-length.js"); |
| var createProperty = __webpack_require__(/*! ../internals/create-property */ "../node_modules/core-js-pure/internals/create-property.js"); |
| var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../node_modules/core-js-pure/internals/get-iterator-method.js"); |
| |
| // `Array.from` method implementation |
| // https://tc39.github.io/ecma262/#sec-array.from |
| module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { |
| var O = toObject(arrayLike); |
| var C = typeof this == 'function' ? this : Array; |
| var argumentsLength = arguments.length; |
| var mapfn = argumentsLength > 1 ? arguments[1] : undefined; |
| var mapping = mapfn !== undefined; |
| var index = 0; |
| var iteratorMethod = getIteratorMethod(O); |
| var length, result, step, iterator, next; |
| if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); |
| // if the target is not iterable or it's an array with the default iterator - use a simple case |
| if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { |
| iterator = iteratorMethod.call(O); |
| next = iterator.next; |
| result = new C(); |
| for (;!(step = next.call(iterator)).done; index++) { |
| createProperty(result, index, mapping |
| ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) |
| : step.value |
| ); |
| } |
| } else { |
| length = toLength(O.length); |
| result = new C(length); |
| for (;length > index; index++) { |
| createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); |
| } |
| } |
| result.length = index; |
| return result; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/array-includes.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/array-includes.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../node_modules/core-js-pure/internals/to-indexed-object.js"); |
| var toLength = __webpack_require__(/*! ../internals/to-length */ "../node_modules/core-js-pure/internals/to-length.js"); |
| var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "../node_modules/core-js-pure/internals/to-absolute-index.js"); |
| |
| // `Array.prototype.{ indexOf, includes }` methods implementation |
| var createMethod = function (IS_INCLUDES) { |
| return function ($this, el, fromIndex) { |
| var O = toIndexedObject($this); |
| var length = toLength(O.length); |
| var index = toAbsoluteIndex(fromIndex, length); |
| var value; |
| // Array#includes uses SameValueZero equality algorithm |
| // eslint-disable-next-line no-self-compare |
| if (IS_INCLUDES && el != el) while (length > index) { |
| value = O[index++]; |
| // eslint-disable-next-line no-self-compare |
| if (value != value) return true; |
| // Array#indexOf ignores holes, Array#includes - not |
| } else for (;length > index; index++) { |
| if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; |
| } return !IS_INCLUDES && -1; |
| }; |
| }; |
| |
| module.exports = { |
| // `Array.prototype.includes` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.includes |
| includes: createMethod(true), |
| // `Array.prototype.indexOf` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.indexof |
| indexOf: createMethod(false) |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/array-iteration.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/array-iteration.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var bind = __webpack_require__(/*! ../internals/bind-context */ "../node_modules/core-js-pure/internals/bind-context.js"); |
| var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../node_modules/core-js-pure/internals/indexed-object.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var toLength = __webpack_require__(/*! ../internals/to-length */ "../node_modules/core-js-pure/internals/to-length.js"); |
| var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "../node_modules/core-js-pure/internals/array-species-create.js"); |
| |
| var push = [].push; |
| |
| // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation |
| var createMethod = function (TYPE) { |
| var IS_MAP = TYPE == 1; |
| var IS_FILTER = TYPE == 2; |
| var IS_SOME = TYPE == 3; |
| var IS_EVERY = TYPE == 4; |
| var IS_FIND_INDEX = TYPE == 6; |
| var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; |
| return function ($this, callbackfn, that, specificCreate) { |
| var O = toObject($this); |
| var self = IndexedObject(O); |
| var boundFunction = bind(callbackfn, that, 3); |
| var length = toLength(self.length); |
| var index = 0; |
| var create = specificCreate || arraySpeciesCreate; |
| var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; |
| var value, result; |
| for (;length > index; index++) if (NO_HOLES || index in self) { |
| value = self[index]; |
| result = boundFunction(value, index, O); |
| if (TYPE) { |
| if (IS_MAP) target[index] = result; // map |
| else if (result) switch (TYPE) { |
| case 3: return true; // some |
| case 5: return value; // find |
| case 6: return index; // findIndex |
| case 2: push.call(target, value); // filter |
| } else if (IS_EVERY) return false; // every |
| } |
| } |
| return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; |
| }; |
| }; |
| |
| module.exports = { |
| // `Array.prototype.forEach` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.foreach |
| forEach: createMethod(0), |
| // `Array.prototype.map` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.map |
| map: createMethod(1), |
| // `Array.prototype.filter` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.filter |
| filter: createMethod(2), |
| // `Array.prototype.some` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.some |
| some: createMethod(3), |
| // `Array.prototype.every` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.every |
| every: createMethod(4), |
| // `Array.prototype.find` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.find |
| find: createMethod(5), |
| // `Array.prototype.findIndex` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex |
| findIndex: createMethod(6) |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/array-method-has-species-support.js": |
| /*!**********************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/array-method-has-species-support.js ***! |
| \**********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var V8_VERSION = __webpack_require__(/*! ../internals/v8-version */ "../node_modules/core-js-pure/internals/v8-version.js"); |
| |
| var SPECIES = wellKnownSymbol('species'); |
| |
| module.exports = function (METHOD_NAME) { |
| // We can't use this feature detection in V8 since it causes |
| // deoptimization and serious performance degradation |
| // https://github.com/zloirock/core-js/issues/677 |
| return V8_VERSION >= 51 || !fails(function () { |
| var array = []; |
| var constructor = array.constructor = {}; |
| constructor[SPECIES] = function () { |
| return { foo: 1 }; |
| }; |
| return array[METHOD_NAME](Boolean).foo !== 1; |
| }); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/array-species-create.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/array-species-create.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| var isArray = __webpack_require__(/*! ../internals/is-array */ "../node_modules/core-js-pure/internals/is-array.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var SPECIES = wellKnownSymbol('species'); |
| |
| // `ArraySpeciesCreate` abstract operation |
| // https://tc39.github.io/ecma262/#sec-arrayspeciescreate |
| module.exports = function (originalArray, length) { |
| var C; |
| if (isArray(originalArray)) { |
| C = originalArray.constructor; |
| // cross-realm fallback |
| if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; |
| else if (isObject(C)) { |
| C = C[SPECIES]; |
| if (C === null) C = undefined; |
| } |
| } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/bind-context.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/bind-context.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var aFunction = __webpack_require__(/*! ../internals/a-function */ "../node_modules/core-js-pure/internals/a-function.js"); |
| |
| // optional / simple context binding |
| module.exports = function (fn, that, length) { |
| aFunction(fn); |
| if (that === undefined) return fn; |
| switch (length) { |
| case 0: return function () { |
| return fn.call(that); |
| }; |
| case 1: return function (a) { |
| return fn.call(that, a); |
| }; |
| case 2: return function (a, b) { |
| return fn.call(that, a, b); |
| }; |
| case 3: return function (a, b, c) { |
| return fn.call(that, a, b, c); |
| }; |
| } |
| return function (/* ...args */) { |
| return fn.apply(that, arguments); |
| }; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js": |
| /*!**********************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js ***! |
| \**********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| |
| // call something on iterator step with safe closing on error |
| module.exports = function (iterator, fn, value, ENTRIES) { |
| try { |
| return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); |
| // 7.4.6 IteratorClose(iterator, completion) |
| } catch (error) { |
| var returnMethod = iterator['return']; |
| if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); |
| throw error; |
| } |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/check-correctness-of-iteration.js": |
| /*!********************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/check-correctness-of-iteration.js ***! |
| \********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var ITERATOR = wellKnownSymbol('iterator'); |
| var SAFE_CLOSING = false; |
| |
| try { |
| var called = 0; |
| var iteratorWithReturn = { |
| next: function () { |
| return { done: !!called++ }; |
| }, |
| 'return': function () { |
| SAFE_CLOSING = true; |
| } |
| }; |
| iteratorWithReturn[ITERATOR] = function () { |
| return this; |
| }; |
| // eslint-disable-next-line no-throw-literal |
| Array.from(iteratorWithReturn, function () { throw 2; }); |
| } catch (error) { /* empty */ } |
| |
| module.exports = function (exec, SKIP_CLOSING) { |
| if (!SKIP_CLOSING && !SAFE_CLOSING) return false; |
| var ITERATION_SUPPORT = false; |
| try { |
| var object = {}; |
| object[ITERATOR] = function () { |
| return { |
| next: function () { |
| return { done: ITERATION_SUPPORT = true }; |
| } |
| }; |
| }; |
| exec(object); |
| } catch (error) { /* empty */ } |
| return ITERATION_SUPPORT; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/classof-raw.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/classof-raw.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| var toString = {}.toString; |
| |
| module.exports = function (it) { |
| return toString.call(it).slice(8, -1); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/classof.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/classof.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "../node_modules/core-js-pure/internals/classof-raw.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var TO_STRING_TAG = wellKnownSymbol('toStringTag'); |
| // ES3 wrong here |
| var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; |
| |
| // fallback for IE11 Script Access Denied error |
| var tryGet = function (it, key) { |
| try { |
| return it[key]; |
| } catch (error) { /* empty */ } |
| }; |
| |
| // getting tag from ES6+ `Object.prototype.toString` |
| module.exports = function (it) { |
| var O, tag, result; |
| return it === undefined ? 'Undefined' : it === null ? 'Null' |
| // @@toStringTag case |
| : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag |
| // builtinTag case |
| : CORRECT_ARGUMENTS ? classofRaw(O) |
| // ES3 arguments fallback |
| : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/correct-prototype-getter.js": |
| /*!**************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/correct-prototype-getter.js ***! |
| \**************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| |
| module.exports = !fails(function () { |
| function F() { /* empty */ } |
| F.prototype.constructor = null; |
| return Object.getPrototypeOf(new F()) !== F.prototype; |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/create-iterator-constructor.js": |
| /*!*****************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/create-iterator-constructor.js ***! |
| \*****************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ "../node_modules/core-js-pure/internals/iterators-core.js").IteratorPrototype; |
| var create = __webpack_require__(/*! ../internals/object-create */ "../node_modules/core-js-pure/internals/object-create.js"); |
| var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js-pure/internals/create-property-descriptor.js"); |
| var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../node_modules/core-js-pure/internals/set-to-string-tag.js"); |
| var Iterators = __webpack_require__(/*! ../internals/iterators */ "../node_modules/core-js-pure/internals/iterators.js"); |
| |
| var returnThis = function () { return this; }; |
| |
| module.exports = function (IteratorConstructor, NAME, next) { |
| var TO_STRING_TAG = NAME + ' Iterator'; |
| IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); |
| setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); |
| Iterators[TO_STRING_TAG] = returnThis; |
| return IteratorConstructor; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js": |
| /*!********************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/create-non-enumerable-property.js ***! |
| \********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js-pure/internals/object-define-property.js"); |
| var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js-pure/internals/create-property-descriptor.js"); |
| |
| module.exports = DESCRIPTORS ? function (object, key, value) { |
| return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); |
| } : function (object, key, value) { |
| object[key] = value; |
| return object; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/create-property-descriptor.js": |
| /*!****************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/create-property-descriptor.js ***! |
| \****************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = function (bitmap, value) { |
| return { |
| enumerable: !(bitmap & 1), |
| configurable: !(bitmap & 2), |
| writable: !(bitmap & 4), |
| value: value |
| }; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/create-property.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/create-property.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "../node_modules/core-js-pure/internals/to-primitive.js"); |
| var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js-pure/internals/object-define-property.js"); |
| var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js-pure/internals/create-property-descriptor.js"); |
| |
| module.exports = function (object, key, value) { |
| var propertyKey = toPrimitive(key); |
| if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); |
| else object[propertyKey] = value; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/define-iterator.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/define-iterator.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ "../node_modules/core-js-pure/internals/create-iterator-constructor.js"); |
| var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../node_modules/core-js-pure/internals/object-get-prototype-of.js"); |
| var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../node_modules/core-js-pure/internals/object-set-prototype-of.js"); |
| var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../node_modules/core-js-pure/internals/set-to-string-tag.js"); |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| var redefine = __webpack_require__(/*! ../internals/redefine */ "../node_modules/core-js-pure/internals/redefine.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js-pure/internals/is-pure.js"); |
| var Iterators = __webpack_require__(/*! ../internals/iterators */ "../node_modules/core-js-pure/internals/iterators.js"); |
| var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ "../node_modules/core-js-pure/internals/iterators-core.js"); |
| |
| var IteratorPrototype = IteratorsCore.IteratorPrototype; |
| var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; |
| var ITERATOR = wellKnownSymbol('iterator'); |
| var KEYS = 'keys'; |
| var VALUES = 'values'; |
| var ENTRIES = 'entries'; |
| |
| var returnThis = function () { return this; }; |
| |
| module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { |
| createIteratorConstructor(IteratorConstructor, NAME, next); |
| |
| var getIterationMethod = function (KIND) { |
| if (KIND === DEFAULT && defaultIterator) return defaultIterator; |
| if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; |
| switch (KIND) { |
| case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; |
| case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; |
| case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; |
| } return function () { return new IteratorConstructor(this); }; |
| }; |
| |
| var TO_STRING_TAG = NAME + ' Iterator'; |
| var INCORRECT_VALUES_NAME = false; |
| var IterablePrototype = Iterable.prototype; |
| var nativeIterator = IterablePrototype[ITERATOR] |
| || IterablePrototype['@@iterator'] |
| || DEFAULT && IterablePrototype[DEFAULT]; |
| var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); |
| var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; |
| var CurrentIteratorPrototype, methods, KEY; |
| |
| // fix native |
| if (anyNativeIterator) { |
| CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); |
| if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { |
| if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { |
| if (setPrototypeOf) { |
| setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); |
| } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { |
| createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); |
| } |
| } |
| // Set @@toStringTag to native iterators |
| setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); |
| if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; |
| } |
| } |
| |
| // fix Array#{values, @@iterator}.name in V8 / FF |
| if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { |
| INCORRECT_VALUES_NAME = true; |
| defaultIterator = function values() { return nativeIterator.call(this); }; |
| } |
| |
| // define iterator |
| if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { |
| createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); |
| } |
| Iterators[NAME] = defaultIterator; |
| |
| // export additional methods |
| if (DEFAULT) { |
| methods = { |
| values: getIterationMethod(VALUES), |
| keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), |
| entries: getIterationMethod(ENTRIES) |
| }; |
| if (FORCED) for (KEY in methods) { |
| if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { |
| redefine(IterablePrototype, KEY, methods[KEY]); |
| } |
| } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); |
| } |
| |
| return methods; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/define-well-known-symbol.js": |
| /*!**************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/define-well-known-symbol.js ***! |
| \**************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var path = __webpack_require__(/*! ../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var wrappedWellKnownSymbolModule = __webpack_require__(/*! ../internals/wrapped-well-known-symbol */ "../node_modules/core-js-pure/internals/wrapped-well-known-symbol.js"); |
| var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js-pure/internals/object-define-property.js").f; |
| |
| module.exports = function (NAME) { |
| var Symbol = path.Symbol || (path.Symbol = {}); |
| if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, { |
| value: wrappedWellKnownSymbolModule.f(NAME) |
| }); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/descriptors.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/descriptors.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| |
| // Thank's IE8 for his funny defineProperty |
| module.exports = !fails(function () { |
| return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/document-create-element.js": |
| /*!*************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/document-create-element.js ***! |
| \*************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| |
| var document = global.document; |
| // typeof document.createElement is 'object' in old IE |
| var EXISTS = isObject(document) && isObject(document.createElement); |
| |
| module.exports = function (it) { |
| return EXISTS ? document.createElement(it) : {}; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/dom-iterables.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/dom-iterables.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| // iterable DOM collections |
| // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods |
| module.exports = { |
| CSSRuleList: 0, |
| CSSStyleDeclaration: 0, |
| CSSValueList: 0, |
| ClientRectList: 0, |
| DOMRectList: 0, |
| DOMStringList: 0, |
| DOMTokenList: 1, |
| DataTransferItemList: 0, |
| FileList: 0, |
| HTMLAllCollection: 0, |
| HTMLCollection: 0, |
| HTMLFormElement: 0, |
| HTMLSelectElement: 0, |
| MediaList: 0, |
| MimeTypeArray: 0, |
| NamedNodeMap: 0, |
| NodeList: 1, |
| PaintRequestList: 0, |
| Plugin: 0, |
| PluginArray: 0, |
| SVGLengthList: 0, |
| SVGNumberList: 0, |
| SVGPathSegList: 0, |
| SVGPointList: 0, |
| SVGStringList: 0, |
| SVGTransformList: 0, |
| SourceBufferList: 0, |
| StyleSheetList: 0, |
| TextTrackCueList: 0, |
| TextTrackList: 0, |
| TouchList: 0 |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/entry-virtual.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/entry-virtual.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var path = __webpack_require__(/*! ../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| |
| module.exports = function (CONSTRUCTOR) { |
| return path[CONSTRUCTOR + 'Prototype']; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/enum-bug-keys.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/enum-bug-keys.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| // IE8- don't enum bug keys |
| module.exports = [ |
| 'constructor', |
| 'hasOwnProperty', |
| 'isPrototypeOf', |
| 'propertyIsEnumerable', |
| 'toLocaleString', |
| 'toString', |
| 'valueOf' |
| ]; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/export.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/export.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js").f; |
| var isForced = __webpack_require__(/*! ../internals/is-forced */ "../node_modules/core-js-pure/internals/is-forced.js"); |
| var path = __webpack_require__(/*! ../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| var bind = __webpack_require__(/*! ../internals/bind-context */ "../node_modules/core-js-pure/internals/bind-context.js"); |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| |
| var wrapConstructor = function (NativeConstructor) { |
| var Wrapper = function (a, b, c) { |
| if (this instanceof NativeConstructor) { |
| switch (arguments.length) { |
| case 0: return new NativeConstructor(); |
| case 1: return new NativeConstructor(a); |
| case 2: return new NativeConstructor(a, b); |
| } return new NativeConstructor(a, b, c); |
| } return NativeConstructor.apply(this, arguments); |
| }; |
| Wrapper.prototype = NativeConstructor.prototype; |
| return Wrapper; |
| }; |
| |
| /* |
| options.target - name of the target object |
| options.global - target is the global object |
| options.stat - export as static methods of target |
| options.proto - export as prototype methods of target |
| options.real - real prototype method for the `pure` version |
| options.forced - export even if the native feature is available |
| options.bind - bind methods to the target, required for the `pure` version |
| options.wrap - wrap constructors to preventing global pollution, required for the `pure` version |
| options.unsafe - use the simple assignment of property instead of delete + defineProperty |
| options.sham - add a flag to not completely full polyfills |
| options.enumerable - export as enumerable property |
| options.noTargetGet - prevent calling a getter on target |
| */ |
| module.exports = function (options, source) { |
| var TARGET = options.target; |
| var GLOBAL = options.global; |
| var STATIC = options.stat; |
| var PROTO = options.proto; |
| |
| var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype; |
| |
| var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {}); |
| var targetPrototype = target.prototype; |
| |
| var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE; |
| var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor; |
| |
| for (key in source) { |
| FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); |
| // contains in native |
| USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key); |
| |
| targetProperty = target[key]; |
| |
| if (USE_NATIVE) if (options.noTargetGet) { |
| descriptor = getOwnPropertyDescriptor(nativeSource, key); |
| nativeProperty = descriptor && descriptor.value; |
| } else nativeProperty = nativeSource[key]; |
| |
| // export native or implementation |
| sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key]; |
| |
| if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue; |
| |
| // bind timers to global for call from export context |
| if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global); |
| // wrap global constructors for prevent changs in this version |
| else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty); |
| // make static versions for prototype methods |
| else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty); |
| // default case |
| else resultProperty = sourceProperty; |
| |
| // add a flag to not completely full polyfills |
| if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) { |
| createNonEnumerableProperty(resultProperty, 'sham', true); |
| } |
| |
| target[key] = resultProperty; |
| |
| if (PROTO) { |
| VIRTUAL_PROTOTYPE = TARGET + 'Prototype'; |
| if (!has(path, VIRTUAL_PROTOTYPE)) { |
| createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); |
| } |
| // export virtual prototype methods |
| path[VIRTUAL_PROTOTYPE][key] = sourceProperty; |
| // export real prototype methods |
| if (options.real && targetPrototype && !targetPrototype[key]) { |
| createNonEnumerableProperty(targetPrototype, key, sourceProperty); |
| } |
| } |
| } |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/fails.js": |
| /*!*******************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/fails.js ***! |
| \*******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = function (exec) { |
| try { |
| return !!exec(); |
| } catch (error) { |
| return true; |
| } |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/flatten-into-array.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/flatten-into-array.js ***! |
| \********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var isArray = __webpack_require__(/*! ../internals/is-array */ "../node_modules/core-js-pure/internals/is-array.js"); |
| var toLength = __webpack_require__(/*! ../internals/to-length */ "../node_modules/core-js-pure/internals/to-length.js"); |
| var bind = __webpack_require__(/*! ../internals/bind-context */ "../node_modules/core-js-pure/internals/bind-context.js"); |
| |
| // `FlattenIntoArray` abstract operation |
| // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray |
| var flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) { |
| var targetIndex = start; |
| var sourceIndex = 0; |
| var mapFn = mapper ? bind(mapper, thisArg, 3) : false; |
| var element; |
| |
| while (sourceIndex < sourceLen) { |
| if (sourceIndex in source) { |
| element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex]; |
| |
| if (depth > 0 && isArray(element)) { |
| targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1; |
| } else { |
| if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length'); |
| target[targetIndex] = element; |
| } |
| |
| targetIndex++; |
| } |
| sourceIndex++; |
| } |
| return targetIndex; |
| }; |
| |
| module.exports = flattenIntoArray; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/function-to-string.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/function-to-string.js ***! |
| \********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var shared = __webpack_require__(/*! ../internals/shared */ "../node_modules/core-js-pure/internals/shared.js"); |
| |
| module.exports = shared('native-function-to-string', Function.toString); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/get-built-in.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/get-built-in.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var path = __webpack_require__(/*! ../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| |
| var aFunction = function (variable) { |
| return typeof variable == 'function' ? variable : undefined; |
| }; |
| |
| module.exports = function (namespace, method) { |
| return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) |
| : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/get-iterator-method.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/get-iterator-method.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var classof = __webpack_require__(/*! ../internals/classof */ "../node_modules/core-js-pure/internals/classof.js"); |
| var Iterators = __webpack_require__(/*! ../internals/iterators */ "../node_modules/core-js-pure/internals/iterators.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var ITERATOR = wellKnownSymbol('iterator'); |
| |
| module.exports = function (it) { |
| if (it != undefined) return it[ITERATOR] |
| || it['@@iterator'] |
| || Iterators[classof(it)]; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/get-iterator.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/get-iterator.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../node_modules/core-js-pure/internals/get-iterator-method.js"); |
| |
| module.exports = function (it) { |
| var iteratorMethod = getIteratorMethod(it); |
| if (typeof iteratorMethod != 'function') { |
| throw TypeError(String(it) + ' is not iterable'); |
| } return anObject(iteratorMethod.call(it)); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/global.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/global.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| /* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { |
| return it && it.Math == Math && it; |
| }; |
| |
| // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 |
| module.exports = |
| // eslint-disable-next-line no-undef |
| check(typeof globalThis == 'object' && globalThis) || |
| check(typeof window == 'object' && window) || |
| check(typeof self == 'object' && self) || |
| check(typeof global == 'object' && global) || |
| // eslint-disable-next-line no-new-func |
| Function('return this')(); |
| |
| /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "../node_modules/webpack/buildin/global.js"))) |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/has.js": |
| /*!*****************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/has.js ***! |
| \*****************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| var hasOwnProperty = {}.hasOwnProperty; |
| |
| module.exports = function (it, key) { |
| return hasOwnProperty.call(it, key); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/hidden-keys.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/hidden-keys.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = {}; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/host-report-errors.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/host-report-errors.js ***! |
| \********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| |
| module.exports = function (a, b) { |
| var console = global.console; |
| if (console && console.error) { |
| arguments.length === 1 ? console.error(a) : console.error(a, b); |
| } |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/html.js": |
| /*!******************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/html.js ***! |
| \******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js-pure/internals/get-built-in.js"); |
| |
| module.exports = getBuiltIn('document', 'documentElement'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/ie8-dom-define.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/ie8-dom-define.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var createElement = __webpack_require__(/*! ../internals/document-create-element */ "../node_modules/core-js-pure/internals/document-create-element.js"); |
| |
| // Thank's IE8 for his funny defineProperty |
| module.exports = !DESCRIPTORS && !fails(function () { |
| return Object.defineProperty(createElement('div'), 'a', { |
| get: function () { return 7; } |
| }).a != 7; |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/indexed-object.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/indexed-object.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var classof = __webpack_require__(/*! ../internals/classof-raw */ "../node_modules/core-js-pure/internals/classof-raw.js"); |
| |
| var split = ''.split; |
| |
| // fallback for non-array-like ES3 and non-enumerable old V8 strings |
| module.exports = fails(function () { |
| // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 |
| // eslint-disable-next-line no-prototype-builtins |
| return !Object('z').propertyIsEnumerable(0); |
| }) ? function (it) { |
| return classof(it) == 'String' ? split.call(it, '') : Object(it); |
| } : Object; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/internal-state.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/internal-state.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ "../node_modules/core-js-pure/internals/native-weak-map.js"); |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| var objectHas = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../node_modules/core-js-pure/internals/shared-key.js"); |
| var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../node_modules/core-js-pure/internals/hidden-keys.js"); |
| |
| var WeakMap = global.WeakMap; |
| var set, get, has; |
| |
| var enforce = function (it) { |
| return has(it) ? get(it) : set(it, {}); |
| }; |
| |
| var getterFor = function (TYPE) { |
| return function (it) { |
| var state; |
| if (!isObject(it) || (state = get(it)).type !== TYPE) { |
| throw TypeError('Incompatible receiver, ' + TYPE + ' required'); |
| } return state; |
| }; |
| }; |
| |
| if (NATIVE_WEAK_MAP) { |
| var store = new WeakMap(); |
| var wmget = store.get; |
| var wmhas = store.has; |
| var wmset = store.set; |
| set = function (it, metadata) { |
| wmset.call(store, it, metadata); |
| return metadata; |
| }; |
| get = function (it) { |
| return wmget.call(store, it) || {}; |
| }; |
| has = function (it) { |
| return wmhas.call(store, it); |
| }; |
| } else { |
| var STATE = sharedKey('state'); |
| hiddenKeys[STATE] = true; |
| set = function (it, metadata) { |
| createNonEnumerableProperty(it, STATE, metadata); |
| return metadata; |
| }; |
| get = function (it) { |
| return objectHas(it, STATE) ? it[STATE] : {}; |
| }; |
| has = function (it) { |
| return objectHas(it, STATE); |
| }; |
| } |
| |
| module.exports = { |
| set: set, |
| get: get, |
| has: has, |
| enforce: enforce, |
| getterFor: getterFor |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/is-array-iterator-method.js": |
| /*!**************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/is-array-iterator-method.js ***! |
| \**************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var Iterators = __webpack_require__(/*! ../internals/iterators */ "../node_modules/core-js-pure/internals/iterators.js"); |
| |
| var ITERATOR = wellKnownSymbol('iterator'); |
| var ArrayPrototype = Array.prototype; |
| |
| // check on default Array iterator |
| module.exports = function (it) { |
| return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/is-array.js": |
| /*!**********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/is-array.js ***! |
| \**********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var classof = __webpack_require__(/*! ../internals/classof-raw */ "../node_modules/core-js-pure/internals/classof-raw.js"); |
| |
| // `IsArray` abstract operation |
| // https://tc39.github.io/ecma262/#sec-isarray |
| module.exports = Array.isArray || function isArray(arg) { |
| return classof(arg) == 'Array'; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/is-forced.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/is-forced.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| |
| var replacement = /#|\.prototype\./; |
| |
| var isForced = function (feature, detection) { |
| var value = data[normalize(feature)]; |
| return value == POLYFILL ? true |
| : value == NATIVE ? false |
| : typeof detection == 'function' ? fails(detection) |
| : !!detection; |
| }; |
| |
| var normalize = isForced.normalize = function (string) { |
| return String(string).replace(replacement, '.').toLowerCase(); |
| }; |
| |
| var data = isForced.data = {}; |
| var NATIVE = isForced.NATIVE = 'N'; |
| var POLYFILL = isForced.POLYFILL = 'P'; |
| |
| module.exports = isForced; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/is-iterable.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/is-iterable.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var classof = __webpack_require__(/*! ../internals/classof */ "../node_modules/core-js-pure/internals/classof.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var Iterators = __webpack_require__(/*! ../internals/iterators */ "../node_modules/core-js-pure/internals/iterators.js"); |
| |
| var ITERATOR = wellKnownSymbol('iterator'); |
| |
| module.exports = function (it) { |
| var O = Object(it); |
| return O[ITERATOR] !== undefined |
| || '@@iterator' in O |
| // eslint-disable-next-line no-prototype-builtins |
| || Iterators.hasOwnProperty(classof(O)); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/is-object.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/is-object.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = function (it) { |
| return typeof it === 'object' ? it !== null : typeof it === 'function'; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/is-pure.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/is-pure.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = true; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/iterate.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/iterate.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "../node_modules/core-js-pure/internals/is-array-iterator-method.js"); |
| var toLength = __webpack_require__(/*! ../internals/to-length */ "../node_modules/core-js-pure/internals/to-length.js"); |
| var bind = __webpack_require__(/*! ../internals/bind-context */ "../node_modules/core-js-pure/internals/bind-context.js"); |
| var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../node_modules/core-js-pure/internals/get-iterator-method.js"); |
| var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ "../node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js"); |
| |
| var Result = function (stopped, result) { |
| this.stopped = stopped; |
| this.result = result; |
| }; |
| |
| var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { |
| var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); |
| var iterator, iterFn, index, length, result, next, step; |
| |
| if (IS_ITERATOR) { |
| iterator = iterable; |
| } else { |
| iterFn = getIteratorMethod(iterable); |
| if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); |
| // optimisation for array iterators |
| if (isArrayIteratorMethod(iterFn)) { |
| for (index = 0, length = toLength(iterable.length); length > index; index++) { |
| result = AS_ENTRIES |
| ? boundFunction(anObject(step = iterable[index])[0], step[1]) |
| : boundFunction(iterable[index]); |
| if (result && result instanceof Result) return result; |
| } return new Result(false); |
| } |
| iterator = iterFn.call(iterable); |
| } |
| |
| next = iterator.next; |
| while (!(step = next.call(iterator)).done) { |
| result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); |
| if (typeof result == 'object' && result && result instanceof Result) return result; |
| } return new Result(false); |
| }; |
| |
| iterate.stop = function (result) { |
| return new Result(true, result); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/iterators-core.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/iterators-core.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../node_modules/core-js-pure/internals/object-get-prototype-of.js"); |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js-pure/internals/is-pure.js"); |
| |
| var ITERATOR = wellKnownSymbol('iterator'); |
| var BUGGY_SAFARI_ITERATORS = false; |
| |
| var returnThis = function () { return this; }; |
| |
| // `%IteratorPrototype%` object |
| // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object |
| var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; |
| |
| if ([].keys) { |
| arrayIterator = [].keys(); |
| // Safari 8 has buggy iterators w/o `next` |
| if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; |
| else { |
| PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); |
| if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; |
| } |
| } |
| |
| if (IteratorPrototype == undefined) IteratorPrototype = {}; |
| |
| // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() |
| if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { |
| createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); |
| } |
| |
| module.exports = { |
| IteratorPrototype: IteratorPrototype, |
| BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/iterators.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/iterators.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = {}; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/microtask.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/microtask.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js").f; |
| var classof = __webpack_require__(/*! ../internals/classof-raw */ "../node_modules/core-js-pure/internals/classof-raw.js"); |
| var macrotask = __webpack_require__(/*! ../internals/task */ "../node_modules/core-js-pure/internals/task.js").set; |
| var userAgent = __webpack_require__(/*! ../internals/user-agent */ "../node_modules/core-js-pure/internals/user-agent.js"); |
| |
| var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; |
| var process = global.process; |
| var Promise = global.Promise; |
| var IS_NODE = classof(process) == 'process'; |
| // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` |
| var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); |
| var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; |
| |
| var flush, head, last, notify, toggle, node, promise, then; |
| |
| // modern engines have queueMicrotask method |
| if (!queueMicrotask) { |
| flush = function () { |
| var parent, fn; |
| if (IS_NODE && (parent = process.domain)) parent.exit(); |
| while (head) { |
| fn = head.fn; |
| head = head.next; |
| try { |
| fn(); |
| } catch (error) { |
| if (head) notify(); |
| else last = undefined; |
| throw error; |
| } |
| } last = undefined; |
| if (parent) parent.enter(); |
| }; |
| |
| // Node.js |
| if (IS_NODE) { |
| notify = function () { |
| process.nextTick(flush); |
| }; |
| // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 |
| } else if (MutationObserver && !/(iphone|ipod|ipad).*applewebkit/i.test(userAgent)) { |
| toggle = true; |
| node = document.createTextNode(''); |
| new MutationObserver(flush).observe(node, { characterData: true }); |
| notify = function () { |
| node.data = toggle = !toggle; |
| }; |
| // environments with maybe non-completely correct, but existent Promise |
| } else if (Promise && Promise.resolve) { |
| // Promise.resolve without an argument throws an error in LG WebOS 2 |
| promise = Promise.resolve(undefined); |
| then = promise.then; |
| notify = function () { |
| then.call(promise, flush); |
| }; |
| // for other environments - macrotask based on: |
| // - setImmediate |
| // - MessageChannel |
| // - window.postMessag |
| // - onreadystatechange |
| // - setTimeout |
| } else { |
| notify = function () { |
| // strange IE + webpack dev server bug - use .call(global) |
| macrotask.call(global, flush); |
| }; |
| } |
| } |
| |
| module.exports = queueMicrotask || function (fn) { |
| var task = { fn: fn, next: undefined }; |
| if (last) last.next = task; |
| if (!head) { |
| head = task; |
| notify(); |
| } last = task; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/native-promise-constructor.js": |
| /*!****************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/native-promise-constructor.js ***! |
| \****************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| |
| module.exports = global.Promise; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/native-symbol.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/native-symbol.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| |
| module.exports = !!Object.getOwnPropertySymbols && !fails(function () { |
| // Chrome 38 Symbol has incorrect toString conversion |
| // eslint-disable-next-line no-undef |
| return !String(Symbol()); |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/native-url.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/native-url.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js-pure/internals/is-pure.js"); |
| |
| var ITERATOR = wellKnownSymbol('iterator'); |
| |
| module.exports = !fails(function () { |
| var url = new URL('b?a=1&b=2&c=3', 'http://a'); |
| var searchParams = url.searchParams; |
| var result = ''; |
| url.pathname = 'c%20d'; |
| searchParams.forEach(function (value, key) { |
| searchParams['delete']('b'); |
| result += key + value; |
| }); |
| return (IS_PURE && !url.toJSON) |
| || !searchParams.sort |
| || url.href !== 'http://a/c%20d?a=1&c=3' |
| || searchParams.get('c') !== '3' |
| || String(new URLSearchParams('?a=1')) !== 'a=1' |
| || !searchParams[ITERATOR] |
| // throws in Edge |
| || new URL('https://a@b').username !== 'a' |
| || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' |
| // not punycoded in Edge |
| || new URL('http://тест').host !== 'xn--e1aybc' |
| // not escaped in Chrome 62- |
| || new URL('http://a#б').hash !== '#%D0%B1' |
| // fails in Chrome 66- |
| || result !== 'a1c3' |
| // throws in Safari |
| || new URL('http://x', undefined).host !== 'x'; |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/native-weak-map.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/native-weak-map.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ "../node_modules/core-js-pure/internals/function-to-string.js"); |
| |
| var WeakMap = global.WeakMap; |
| |
| module.exports = typeof WeakMap === 'function' && /native code/.test(nativeFunctionToString.call(WeakMap)); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/new-promise-capability.js": |
| /*!************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/new-promise-capability.js ***! |
| \************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var aFunction = __webpack_require__(/*! ../internals/a-function */ "../node_modules/core-js-pure/internals/a-function.js"); |
| |
| var PromiseCapability = function (C) { |
| var resolve, reject; |
| this.promise = new C(function ($$resolve, $$reject) { |
| if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); |
| resolve = $$resolve; |
| reject = $$reject; |
| }); |
| this.resolve = aFunction(resolve); |
| this.reject = aFunction(reject); |
| }; |
| |
| // 25.4.1.5 NewPromiseCapability(C) |
| module.exports.f = function (C) { |
| return new PromiseCapability(C); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-assign.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-assign.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../node_modules/core-js-pure/internals/object-keys.js"); |
| var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "../node_modules/core-js-pure/internals/object-get-own-property-symbols.js"); |
| var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../node_modules/core-js-pure/internals/object-property-is-enumerable.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../node_modules/core-js-pure/internals/indexed-object.js"); |
| |
| var nativeAssign = Object.assign; |
| |
| // `Object.assign` method |
| // https://tc39.github.io/ecma262/#sec-object.assign |
| // should work with symbols and should have deterministic property order (V8 bug) |
| module.exports = !nativeAssign || fails(function () { |
| var A = {}; |
| var B = {}; |
| // eslint-disable-next-line no-undef |
| var symbol = Symbol(); |
| var alphabet = 'abcdefghijklmnopqrst'; |
| A[symbol] = 7; |
| alphabet.split('').forEach(function (chr) { B[chr] = chr; }); |
| return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet; |
| }) ? function assign(target, source) { // eslint-disable-line no-unused-vars |
| var T = toObject(target); |
| var argumentsLength = arguments.length; |
| var index = 1; |
| var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; |
| var propertyIsEnumerable = propertyIsEnumerableModule.f; |
| while (argumentsLength > index) { |
| var S = IndexedObject(arguments[index++]); |
| var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); |
| var length = keys.length; |
| var j = 0; |
| var key; |
| while (length > j) { |
| key = keys[j++]; |
| if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key]; |
| } |
| } return T; |
| } : nativeAssign; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-create.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-create.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "../node_modules/core-js-pure/internals/object-define-properties.js"); |
| var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../node_modules/core-js-pure/internals/enum-bug-keys.js"); |
| var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../node_modules/core-js-pure/internals/hidden-keys.js"); |
| var html = __webpack_require__(/*! ../internals/html */ "../node_modules/core-js-pure/internals/html.js"); |
| var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "../node_modules/core-js-pure/internals/document-create-element.js"); |
| var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../node_modules/core-js-pure/internals/shared-key.js"); |
| var IE_PROTO = sharedKey('IE_PROTO'); |
| |
| var PROTOTYPE = 'prototype'; |
| var Empty = function () { /* empty */ }; |
| |
| // Create object with fake `null` prototype: use iframe Object with cleared prototype |
| var createDict = function () { |
| // Thrash, waste and sodomy: IE GC bug |
| var iframe = documentCreateElement('iframe'); |
| var length = enumBugKeys.length; |
| var lt = '<'; |
| var script = 'script'; |
| var gt = '>'; |
| var js = 'java' + script + ':'; |
| var iframeDocument; |
| iframe.style.display = 'none'; |
| html.appendChild(iframe); |
| iframe.src = String(js); |
| iframeDocument = iframe.contentWindow.document; |
| iframeDocument.open(); |
| iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt); |
| iframeDocument.close(); |
| createDict = iframeDocument.F; |
| while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]]; |
| return createDict(); |
| }; |
| |
| // `Object.create` method |
| // https://tc39.github.io/ecma262/#sec-object.create |
| module.exports = Object.create || function create(O, Properties) { |
| var result; |
| if (O !== null) { |
| Empty[PROTOTYPE] = anObject(O); |
| result = new Empty(); |
| Empty[PROTOTYPE] = null; |
| // add "__proto__" for Object.getPrototypeOf polyfill |
| result[IE_PROTO] = O; |
| } else result = createDict(); |
| return Properties === undefined ? result : defineProperties(result, Properties); |
| }; |
| |
| hiddenKeys[IE_PROTO] = true; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-define-properties.js": |
| /*!**************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-define-properties.js ***! |
| \**************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js-pure/internals/object-define-property.js"); |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../node_modules/core-js-pure/internals/object-keys.js"); |
| |
| // `Object.defineProperties` method |
| // https://tc39.github.io/ecma262/#sec-object.defineproperties |
| module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { |
| anObject(O); |
| var keys = objectKeys(Properties); |
| var length = keys.length; |
| var index = 0; |
| var key; |
| while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); |
| return O; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-define-property.js": |
| /*!************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-define-property.js ***! |
| \************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "../node_modules/core-js-pure/internals/ie8-dom-define.js"); |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "../node_modules/core-js-pure/internals/to-primitive.js"); |
| |
| var nativeDefineProperty = Object.defineProperty; |
| |
| // `Object.defineProperty` method |
| // https://tc39.github.io/ecma262/#sec-object.defineproperty |
| exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { |
| anObject(O); |
| P = toPrimitive(P, true); |
| anObject(Attributes); |
| if (IE8_DOM_DEFINE) try { |
| return nativeDefineProperty(O, P, Attributes); |
| } catch (error) { /* empty */ } |
| if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); |
| if ('value' in Attributes) O[P] = Attributes.value; |
| return O; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js": |
| /*!************************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js ***! |
| \************************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../node_modules/core-js-pure/internals/object-property-is-enumerable.js"); |
| var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js-pure/internals/create-property-descriptor.js"); |
| var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../node_modules/core-js-pure/internals/to-indexed-object.js"); |
| var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "../node_modules/core-js-pure/internals/to-primitive.js"); |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "../node_modules/core-js-pure/internals/ie8-dom-define.js"); |
| |
| var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; |
| |
| // `Object.getOwnPropertyDescriptor` method |
| // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor |
| exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { |
| O = toIndexedObject(O); |
| P = toPrimitive(P, true); |
| if (IE8_DOM_DEFINE) try { |
| return nativeGetOwnPropertyDescriptor(O, P); |
| } catch (error) { /* empty */ } |
| if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-get-own-property-names-external.js": |
| /*!****************************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-get-own-property-names-external.js ***! |
| \****************************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../node_modules/core-js-pure/internals/to-indexed-object.js"); |
| var nativeGetOwnPropertyNames = __webpack_require__(/*! ../internals/object-get-own-property-names */ "../node_modules/core-js-pure/internals/object-get-own-property-names.js").f; |
| |
| var toString = {}.toString; |
| |
| var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames |
| ? Object.getOwnPropertyNames(window) : []; |
| |
| var getWindowNames = function (it) { |
| try { |
| return nativeGetOwnPropertyNames(it); |
| } catch (error) { |
| return windowNames.slice(); |
| } |
| }; |
| |
| // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window |
| module.exports.f = function getOwnPropertyNames(it) { |
| return windowNames && toString.call(it) == '[object Window]' |
| ? getWindowNames(it) |
| : nativeGetOwnPropertyNames(toIndexedObject(it)); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-get-own-property-names.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-get-own-property-names.js ***! |
| \*******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "../node_modules/core-js-pure/internals/object-keys-internal.js"); |
| var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../node_modules/core-js-pure/internals/enum-bug-keys.js"); |
| |
| var hiddenKeys = enumBugKeys.concat('length', 'prototype'); |
| |
| // `Object.getOwnPropertyNames` method |
| // https://tc39.github.io/ecma262/#sec-object.getownpropertynames |
| exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { |
| return internalObjectKeys(O, hiddenKeys); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-get-own-property-symbols.js": |
| /*!*********************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-get-own-property-symbols.js ***! |
| \*********************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| exports.f = Object.getOwnPropertySymbols; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-get-prototype-of.js": |
| /*!*************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-get-prototype-of.js ***! |
| \*************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../node_modules/core-js-pure/internals/shared-key.js"); |
| var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ "../node_modules/core-js-pure/internals/correct-prototype-getter.js"); |
| |
| var IE_PROTO = sharedKey('IE_PROTO'); |
| var ObjectPrototype = Object.prototype; |
| |
| // `Object.getPrototypeOf` method |
| // https://tc39.github.io/ecma262/#sec-object.getprototypeof |
| module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { |
| O = toObject(O); |
| if (has(O, IE_PROTO)) return O[IE_PROTO]; |
| if (typeof O.constructor == 'function' && O instanceof O.constructor) { |
| return O.constructor.prototype; |
| } return O instanceof Object ? ObjectPrototype : null; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-keys-internal.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-keys-internal.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../node_modules/core-js-pure/internals/to-indexed-object.js"); |
| var indexOf = __webpack_require__(/*! ../internals/array-includes */ "../node_modules/core-js-pure/internals/array-includes.js").indexOf; |
| var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../node_modules/core-js-pure/internals/hidden-keys.js"); |
| |
| module.exports = function (object, names) { |
| var O = toIndexedObject(object); |
| var i = 0; |
| var result = []; |
| var key; |
| for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); |
| // Don't enum bug & hidden keys |
| while (names.length > i) if (has(O, key = names[i++])) { |
| ~indexOf(result, key) || result.push(key); |
| } |
| return result; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-keys.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-keys.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "../node_modules/core-js-pure/internals/object-keys-internal.js"); |
| var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../node_modules/core-js-pure/internals/enum-bug-keys.js"); |
| |
| // `Object.keys` method |
| // https://tc39.github.io/ecma262/#sec-object.keys |
| module.exports = Object.keys || function keys(O) { |
| return internalObjectKeys(O, enumBugKeys); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-property-is-enumerable.js": |
| /*!*******************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-property-is-enumerable.js ***! |
| \*******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var nativePropertyIsEnumerable = {}.propertyIsEnumerable; |
| var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; |
| |
| // Nashorn ~ JDK8 bug |
| var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); |
| |
| // `Object.prototype.propertyIsEnumerable` method implementation |
| // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable |
| exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { |
| var descriptor = getOwnPropertyDescriptor(this, V); |
| return !!descriptor && descriptor.enumerable; |
| } : nativePropertyIsEnumerable; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-set-prototype-of.js": |
| /*!*************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-set-prototype-of.js ***! |
| \*************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ "../node_modules/core-js-pure/internals/a-possible-prototype.js"); |
| |
| // `Object.setPrototypeOf` method |
| // https://tc39.github.io/ecma262/#sec-object.setprototypeof |
| // Works with __proto__ only. Old v8 can't work with null proto objects. |
| /* eslint-disable no-proto */ |
| module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { |
| var CORRECT_SETTER = false; |
| var test = {}; |
| var setter; |
| try { |
| setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; |
| setter.call(test, []); |
| CORRECT_SETTER = test instanceof Array; |
| } catch (error) { /* empty */ } |
| return function setPrototypeOf(O, proto) { |
| anObject(O); |
| aPossiblePrototype(proto); |
| if (CORRECT_SETTER) setter.call(O, proto); |
| else O.__proto__ = proto; |
| return O; |
| }; |
| }() : undefined); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/object-to-string.js": |
| /*!******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/object-to-string.js ***! |
| \******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var classof = __webpack_require__(/*! ../internals/classof */ "../node_modules/core-js-pure/internals/classof.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var TO_STRING_TAG = wellKnownSymbol('toStringTag'); |
| var test = {}; |
| |
| test[TO_STRING_TAG] = 'z'; |
| |
| // `Object.prototype.toString` method implementation |
| // https://tc39.github.io/ecma262/#sec-object.prototype.tostring |
| module.exports = String(test) !== '[object z]' ? function toString() { |
| return '[object ' + classof(this) + ']'; |
| } : test.toString; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/path.js": |
| /*!******************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/path.js ***! |
| \******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = {}; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/perform.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/perform.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = function (exec) { |
| try { |
| return { error: false, value: exec() }; |
| } catch (error) { |
| return { error: true, value: error }; |
| } |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/promise-resolve.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/promise-resolve.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ "../node_modules/core-js-pure/internals/new-promise-capability.js"); |
| |
| module.exports = function (C, x) { |
| anObject(C); |
| if (isObject(x) && x.constructor === C) return x; |
| var promiseCapability = newPromiseCapability.f(C); |
| var resolve = promiseCapability.resolve; |
| resolve(x); |
| return promiseCapability.promise; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/punycode-to-ascii.js": |
| /*!*******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/punycode-to-ascii.js ***! |
| \*******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| // based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js |
| var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 |
| var base = 36; |
| var tMin = 1; |
| var tMax = 26; |
| var skew = 38; |
| var damp = 700; |
| var initialBias = 72; |
| var initialN = 128; // 0x80 |
| var delimiter = '-'; // '\x2D' |
| var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars |
| var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators |
| var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process'; |
| var baseMinusTMin = base - tMin; |
| var floor = Math.floor; |
| var stringFromCharCode = String.fromCharCode; |
| |
| /** |
| * Creates an array containing the numeric code points of each Unicode |
| * character in the string. While JavaScript uses UCS-2 internally, |
| * this function will convert a pair of surrogate halves (each of which |
| * UCS-2 exposes as separate characters) into a single code point, |
| * matching UTF-16. |
| */ |
| var ucs2decode = function (string) { |
| var output = []; |
| var counter = 0; |
| var length = string.length; |
| while (counter < length) { |
| var value = string.charCodeAt(counter++); |
| if (value >= 0xD800 && value <= 0xDBFF && counter < length) { |
| // It's a high surrogate, and there is a next character. |
| var extra = string.charCodeAt(counter++); |
| if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. |
| output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); |
| } else { |
| // It's an unmatched surrogate; only append this code unit, in case the |
| // next code unit is the high surrogate of a surrogate pair. |
| output.push(value); |
| counter--; |
| } |
| } else { |
| output.push(value); |
| } |
| } |
| return output; |
| }; |
| |
| /** |
| * Converts a digit/integer into a basic code point. |
| */ |
| var digitToBasic = function (digit) { |
| // 0..25 map to ASCII a..z or A..Z |
| // 26..35 map to ASCII 0..9 |
| return digit + 22 + 75 * (digit < 26); |
| }; |
| |
| /** |
| * Bias adaptation function as per section 3.4 of RFC 3492. |
| * https://tools.ietf.org/html/rfc3492#section-3.4 |
| */ |
| var adapt = function (delta, numPoints, firstTime) { |
| var k = 0; |
| delta = firstTime ? floor(delta / damp) : delta >> 1; |
| delta += floor(delta / numPoints); |
| for (; delta > baseMinusTMin * tMax >> 1; k += base) { |
| delta = floor(delta / baseMinusTMin); |
| } |
| return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); |
| }; |
| |
| /** |
| * Converts a string of Unicode symbols (e.g. a domain name label) to a |
| * Punycode string of ASCII-only symbols. |
| */ |
| // eslint-disable-next-line max-statements |
| var encode = function (input) { |
| var output = []; |
| |
| // Convert the input in UCS-2 to an array of Unicode code points. |
| input = ucs2decode(input); |
| |
| // Cache the length. |
| var inputLength = input.length; |
| |
| // Initialize the state. |
| var n = initialN; |
| var delta = 0; |
| var bias = initialBias; |
| var i, currentValue; |
| |
| // Handle the basic code points. |
| for (i = 0; i < input.length; i++) { |
| currentValue = input[i]; |
| if (currentValue < 0x80) { |
| output.push(stringFromCharCode(currentValue)); |
| } |
| } |
| |
| var basicLength = output.length; // number of basic code points. |
| var handledCPCount = basicLength; // number of code points that have been handled; |
| |
| // Finish the basic string with a delimiter unless it's empty. |
| if (basicLength) { |
| output.push(delimiter); |
| } |
| |
| // Main encoding loop: |
| while (handledCPCount < inputLength) { |
| // All non-basic code points < n have been handled already. Find the next larger one: |
| var m = maxInt; |
| for (i = 0; i < input.length; i++) { |
| currentValue = input[i]; |
| if (currentValue >= n && currentValue < m) { |
| m = currentValue; |
| } |
| } |
| |
| // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow. |
| var handledCPCountPlusOne = handledCPCount + 1; |
| if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { |
| throw RangeError(OVERFLOW_ERROR); |
| } |
| |
| delta += (m - n) * handledCPCountPlusOne; |
| n = m; |
| |
| for (i = 0; i < input.length; i++) { |
| currentValue = input[i]; |
| if (currentValue < n && ++delta > maxInt) { |
| throw RangeError(OVERFLOW_ERROR); |
| } |
| if (currentValue == n) { |
| // Represent delta as a generalized variable-length integer. |
| var q = delta; |
| for (var k = base; /* no condition */; k += base) { |
| var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); |
| if (q < t) break; |
| var qMinusT = q - t; |
| var baseMinusT = base - t; |
| output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT))); |
| q = floor(qMinusT / baseMinusT); |
| } |
| |
| output.push(stringFromCharCode(digitToBasic(q))); |
| bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); |
| delta = 0; |
| ++handledCPCount; |
| } |
| } |
| |
| ++delta; |
| ++n; |
| } |
| return output.join(''); |
| }; |
| |
| module.exports = function (input) { |
| var encoded = []; |
| var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.'); |
| var i, label; |
| for (i = 0; i < labels.length; i++) { |
| label = labels[i]; |
| encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label); |
| } |
| return encoded.join('.'); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/redefine-all.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/redefine-all.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var redefine = __webpack_require__(/*! ../internals/redefine */ "../node_modules/core-js-pure/internals/redefine.js"); |
| |
| module.exports = function (target, src, options) { |
| for (var key in src) { |
| if (options && options.unsafe && target[key]) target[key] = src[key]; |
| else redefine(target, key, src[key], options); |
| } return target; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/redefine.js": |
| /*!**********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/redefine.js ***! |
| \**********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| |
| module.exports = function (target, key, value, options) { |
| if (options && options.enumerable) target[key] = value; |
| else createNonEnumerableProperty(target, key, value); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/require-object-coercible.js": |
| /*!**************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/require-object-coercible.js ***! |
| \**************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| // `RequireObjectCoercible` abstract operation |
| // https://tc39.github.io/ecma262/#sec-requireobjectcoercible |
| module.exports = function (it) { |
| if (it == undefined) throw TypeError("Can't call method on " + it); |
| return it; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/set-global.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/set-global.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| |
| module.exports = function (key, value) { |
| try { |
| createNonEnumerableProperty(global, key, value); |
| } catch (error) { |
| global[key] = value; |
| } return value; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/set-species.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/set-species.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js-pure/internals/get-built-in.js"); |
| var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js-pure/internals/object-define-property.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| |
| var SPECIES = wellKnownSymbol('species'); |
| |
| module.exports = function (CONSTRUCTOR_NAME) { |
| var Constructor = getBuiltIn(CONSTRUCTOR_NAME); |
| var defineProperty = definePropertyModule.f; |
| |
| if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { |
| defineProperty(Constructor, SPECIES, { |
| configurable: true, |
| get: function () { return this; } |
| }); |
| } |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/set-to-string-tag.js": |
| /*!*******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/set-to-string-tag.js ***! |
| \*******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js-pure/internals/object-define-property.js").f; |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var toString = __webpack_require__(/*! ../internals/object-to-string */ "../node_modules/core-js-pure/internals/object-to-string.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var TO_STRING_TAG = wellKnownSymbol('toStringTag'); |
| var METHOD_REQUIRED = toString !== ({}).toString; |
| |
| module.exports = function (it, TAG, STATIC, SET_METHOD) { |
| if (it) { |
| var target = STATIC ? it : it.prototype; |
| if (!has(target, TO_STRING_TAG)) { |
| defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); |
| } |
| if (SET_METHOD && METHOD_REQUIRED) { |
| createNonEnumerableProperty(target, 'toString', toString); |
| } |
| } |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/shared-key.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/shared-key.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var shared = __webpack_require__(/*! ../internals/shared */ "../node_modules/core-js-pure/internals/shared.js"); |
| var uid = __webpack_require__(/*! ../internals/uid */ "../node_modules/core-js-pure/internals/uid.js"); |
| |
| var keys = shared('keys'); |
| |
| module.exports = function (key) { |
| return keys[key] || (keys[key] = uid(key)); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/shared-store.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/shared-store.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var setGlobal = __webpack_require__(/*! ../internals/set-global */ "../node_modules/core-js-pure/internals/set-global.js"); |
| |
| var SHARED = '__core-js_shared__'; |
| var store = global[SHARED] || setGlobal(SHARED, {}); |
| |
| module.exports = store; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/shared.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/shared.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js-pure/internals/is-pure.js"); |
| var store = __webpack_require__(/*! ../internals/shared-store */ "../node_modules/core-js-pure/internals/shared-store.js"); |
| |
| (module.exports = function (key, value) { |
| return store[key] || (store[key] = value !== undefined ? value : {}); |
| })('versions', []).push({ |
| version: '3.3.4', |
| mode: IS_PURE ? 'pure' : 'global', |
| copyright: '© 2019 Denis Pushkarev (zloirock.ru)' |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/sloppy-array-method.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/sloppy-array-method.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| |
| module.exports = function (METHOD_NAME, argument) { |
| var method = [][METHOD_NAME]; |
| return !method || !fails(function () { |
| // eslint-disable-next-line no-useless-call,no-throw-literal |
| method.call(null, argument || function () { throw 1; }, 1); |
| }); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/species-constructor.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/species-constructor.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var aFunction = __webpack_require__(/*! ../internals/a-function */ "../node_modules/core-js-pure/internals/a-function.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var SPECIES = wellKnownSymbol('species'); |
| |
| // `SpeciesConstructor` abstract operation |
| // https://tc39.github.io/ecma262/#sec-speciesconstructor |
| module.exports = function (O, defaultConstructor) { |
| var C = anObject(O).constructor; |
| var S; |
| return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/string-multibyte.js": |
| /*!******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/string-multibyte.js ***! |
| \******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var toInteger = __webpack_require__(/*! ../internals/to-integer */ "../node_modules/core-js-pure/internals/to-integer.js"); |
| var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../node_modules/core-js-pure/internals/require-object-coercible.js"); |
| |
| // `String.prototype.{ codePointAt, at }` methods implementation |
| var createMethod = function (CONVERT_TO_STRING) { |
| return function ($this, pos) { |
| var S = String(requireObjectCoercible($this)); |
| var position = toInteger(pos); |
| var size = S.length; |
| var first, second; |
| if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; |
| first = S.charCodeAt(position); |
| return first < 0xD800 || first > 0xDBFF || position + 1 === size |
| || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF |
| ? CONVERT_TO_STRING ? S.charAt(position) : first |
| : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; |
| }; |
| }; |
| |
| module.exports = { |
| // `String.prototype.codePointAt` method |
| // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat |
| codeAt: createMethod(false), |
| // `String.prototype.at` method |
| // https://github.com/mathiasbynens/String.prototype.at |
| charAt: createMethod(true) |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/task.js": |
| /*!******************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/task.js ***! |
| \******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var classof = __webpack_require__(/*! ../internals/classof-raw */ "../node_modules/core-js-pure/internals/classof-raw.js"); |
| var bind = __webpack_require__(/*! ../internals/bind-context */ "../node_modules/core-js-pure/internals/bind-context.js"); |
| var html = __webpack_require__(/*! ../internals/html */ "../node_modules/core-js-pure/internals/html.js"); |
| var createElement = __webpack_require__(/*! ../internals/document-create-element */ "../node_modules/core-js-pure/internals/document-create-element.js"); |
| var userAgent = __webpack_require__(/*! ../internals/user-agent */ "../node_modules/core-js-pure/internals/user-agent.js"); |
| |
| var location = global.location; |
| var set = global.setImmediate; |
| var clear = global.clearImmediate; |
| var process = global.process; |
| var MessageChannel = global.MessageChannel; |
| var Dispatch = global.Dispatch; |
| var counter = 0; |
| var queue = {}; |
| var ONREADYSTATECHANGE = 'onreadystatechange'; |
| var defer, channel, port; |
| |
| var run = function (id) { |
| // eslint-disable-next-line no-prototype-builtins |
| if (queue.hasOwnProperty(id)) { |
| var fn = queue[id]; |
| delete queue[id]; |
| fn(); |
| } |
| }; |
| |
| var runner = function (id) { |
| return function () { |
| run(id); |
| }; |
| }; |
| |
| var listener = function (event) { |
| run(event.data); |
| }; |
| |
| var post = function (id) { |
| // old engines have not location.origin |
| global.postMessage(id + '', location.protocol + '//' + location.host); |
| }; |
| |
| // Node.js 0.9+ & IE10+ has setImmediate, otherwise: |
| if (!set || !clear) { |
| set = function setImmediate(fn) { |
| var args = []; |
| var i = 1; |
| while (arguments.length > i) args.push(arguments[i++]); |
| queue[++counter] = function () { |
| // eslint-disable-next-line no-new-func |
| (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); |
| }; |
| defer(counter); |
| return counter; |
| }; |
| clear = function clearImmediate(id) { |
| delete queue[id]; |
| }; |
| // Node.js 0.8- |
| if (classof(process) == 'process') { |
| defer = function (id) { |
| process.nextTick(runner(id)); |
| }; |
| // Sphere (JS game engine) Dispatch API |
| } else if (Dispatch && Dispatch.now) { |
| defer = function (id) { |
| Dispatch.now(runner(id)); |
| }; |
| // Browsers with MessageChannel, includes WebWorkers |
| // except iOS - https://github.com/zloirock/core-js/issues/624 |
| } else if (MessageChannel && !/(iphone|ipod|ipad).*applewebkit/i.test(userAgent)) { |
| channel = new MessageChannel(); |
| port = channel.port2; |
| channel.port1.onmessage = listener; |
| defer = bind(port.postMessage, port, 1); |
| // Browsers with postMessage, skip WebWorkers |
| // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' |
| } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && !fails(post)) { |
| defer = post; |
| global.addEventListener('message', listener, false); |
| // IE8- |
| } else if (ONREADYSTATECHANGE in createElement('script')) { |
| defer = function (id) { |
| html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { |
| html.removeChild(this); |
| run(id); |
| }; |
| }; |
| // Rest old browsers |
| } else { |
| defer = function (id) { |
| setTimeout(runner(id), 0); |
| }; |
| } |
| } |
| |
| module.exports = { |
| set: set, |
| clear: clear |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/to-absolute-index.js": |
| /*!*******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/to-absolute-index.js ***! |
| \*******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var toInteger = __webpack_require__(/*! ../internals/to-integer */ "../node_modules/core-js-pure/internals/to-integer.js"); |
| |
| var max = Math.max; |
| var min = Math.min; |
| |
| // Helper for a popular repeating case of the spec: |
| // Let integer be ? ToInteger(index). |
| // If integer < 0, let result be max((length + integer), 0); else let result be min(length, length). |
| module.exports = function (index, length) { |
| var integer = toInteger(index); |
| return integer < 0 ? max(integer + length, 0) : min(integer, length); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/to-indexed-object.js": |
| /*!*******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/to-indexed-object.js ***! |
| \*******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| // toObject with fallback for non-array-like ES3 strings |
| var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../node_modules/core-js-pure/internals/indexed-object.js"); |
| var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../node_modules/core-js-pure/internals/require-object-coercible.js"); |
| |
| module.exports = function (it) { |
| return IndexedObject(requireObjectCoercible(it)); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/to-integer.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/to-integer.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| var ceil = Math.ceil; |
| var floor = Math.floor; |
| |
| // `ToInteger` abstract operation |
| // https://tc39.github.io/ecma262/#sec-tointeger |
| module.exports = function (argument) { |
| return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/to-length.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/to-length.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var toInteger = __webpack_require__(/*! ../internals/to-integer */ "../node_modules/core-js-pure/internals/to-integer.js"); |
| |
| var min = Math.min; |
| |
| // `ToLength` abstract operation |
| // https://tc39.github.io/ecma262/#sec-tolength |
| module.exports = function (argument) { |
| return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/to-object.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/to-object.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../node_modules/core-js-pure/internals/require-object-coercible.js"); |
| |
| // `ToObject` abstract operation |
| // https://tc39.github.io/ecma262/#sec-toobject |
| module.exports = function (argument) { |
| return Object(requireObjectCoercible(argument)); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/to-primitive.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/to-primitive.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| |
| // `ToPrimitive` abstract operation |
| // https://tc39.github.io/ecma262/#sec-toprimitive |
| // instead of the ES6 spec version, we didn't implement @@toPrimitive case |
| // and the second argument - flag - preferred type is a string |
| module.exports = function (input, PREFERRED_STRING) { |
| if (!isObject(input)) return input; |
| var fn, val; |
| if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; |
| if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; |
| if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; |
| throw TypeError("Can't convert object to primitive value"); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/uid.js": |
| /*!*****************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/uid.js ***! |
| \*****************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| var id = 0; |
| var postfix = Math.random(); |
| |
| module.exports = function (key) { |
| return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/user-agent.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/user-agent.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js-pure/internals/get-built-in.js"); |
| |
| module.exports = getBuiltIn('navigator', 'userAgent') || ''; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/v8-version.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/v8-version.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var userAgent = __webpack_require__(/*! ../internals/user-agent */ "../node_modules/core-js-pure/internals/user-agent.js"); |
| |
| var process = global.process; |
| var versions = process && process.versions; |
| var v8 = versions && versions.v8; |
| var match, version; |
| |
| if (v8) { |
| match = v8.split('.'); |
| version = match[0] + match[1]; |
| } else if (userAgent) { |
| match = userAgent.match(/Chrome\/(\d+)/); |
| if (match) version = match[1]; |
| } |
| |
| module.exports = version && +version; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/well-known-symbol.js": |
| /*!*******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/well-known-symbol.js ***! |
| \*******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var shared = __webpack_require__(/*! ../internals/shared */ "../node_modules/core-js-pure/internals/shared.js"); |
| var uid = __webpack_require__(/*! ../internals/uid */ "../node_modules/core-js-pure/internals/uid.js"); |
| var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "../node_modules/core-js-pure/internals/native-symbol.js"); |
| |
| var Symbol = global.Symbol; |
| var store = shared('wks'); |
| |
| module.exports = function (name) { |
| return store[name] || (store[name] = NATIVE_SYMBOL && Symbol[name] |
| || (NATIVE_SYMBOL ? Symbol : uid)('Symbol.' + name)); |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/internals/wrapped-well-known-symbol.js": |
| /*!***************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/internals/wrapped-well-known-symbol.js ***! |
| \***************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| exports.f = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.concat.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.concat.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var isArray = __webpack_require__(/*! ../internals/is-array */ "../node_modules/core-js-pure/internals/is-array.js"); |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var toLength = __webpack_require__(/*! ../internals/to-length */ "../node_modules/core-js-pure/internals/to-length.js"); |
| var createProperty = __webpack_require__(/*! ../internals/create-property */ "../node_modules/core-js-pure/internals/create-property.js"); |
| var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "../node_modules/core-js-pure/internals/array-species-create.js"); |
| var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "../node_modules/core-js-pure/internals/array-method-has-species-support.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); |
| var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; |
| var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; |
| |
| var IS_CONCAT_SPREADABLE_SUPPORT = !fails(function () { |
| var array = []; |
| array[IS_CONCAT_SPREADABLE] = false; |
| return array.concat()[0] !== array; |
| }); |
| |
| var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); |
| |
| var isConcatSpreadable = function (O) { |
| if (!isObject(O)) return false; |
| var spreadable = O[IS_CONCAT_SPREADABLE]; |
| return spreadable !== undefined ? !!spreadable : isArray(O); |
| }; |
| |
| var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; |
| |
| // `Array.prototype.concat` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.concat |
| // with adding support of @@isConcatSpreadable and @@species |
| $({ target: 'Array', proto: true, forced: FORCED }, { |
| concat: function concat(arg) { // eslint-disable-line no-unused-vars |
| var O = toObject(this); |
| var A = arraySpeciesCreate(O, 0); |
| var n = 0; |
| var i, k, length, len, E; |
| for (i = -1, length = arguments.length; i < length; i++) { |
| E = i === -1 ? O : arguments[i]; |
| if (isConcatSpreadable(E)) { |
| len = toLength(E.length); |
| if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); |
| for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); |
| } else { |
| if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); |
| createProperty(A, n++, E); |
| } |
| } |
| A.length = n; |
| return A; |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.every.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.every.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var $every = __webpack_require__(/*! ../internals/array-iteration */ "../node_modules/core-js-pure/internals/array-iteration.js").every; |
| var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ "../node_modules/core-js-pure/internals/sloppy-array-method.js"); |
| |
| // `Array.prototype.every` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.every |
| $({ target: 'Array', proto: true, forced: sloppyArrayMethod('every') }, { |
| every: function every(callbackfn /* , thisArg */) { |
| return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.filter.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.filter.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var $filter = __webpack_require__(/*! ../internals/array-iteration */ "../node_modules/core-js-pure/internals/array-iteration.js").filter; |
| var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "../node_modules/core-js-pure/internals/array-method-has-species-support.js"); |
| |
| // `Array.prototype.filter` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.filter |
| // with adding support of @@species |
| $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('filter') }, { |
| filter: function filter(callbackfn /* , thisArg */) { |
| return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.flat-map.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.flat-map.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var flattenIntoArray = __webpack_require__(/*! ../internals/flatten-into-array */ "../node_modules/core-js-pure/internals/flatten-into-array.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var toLength = __webpack_require__(/*! ../internals/to-length */ "../node_modules/core-js-pure/internals/to-length.js"); |
| var aFunction = __webpack_require__(/*! ../internals/a-function */ "../node_modules/core-js-pure/internals/a-function.js"); |
| var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "../node_modules/core-js-pure/internals/array-species-create.js"); |
| |
| // `Array.prototype.flatMap` method |
| // https://github.com/tc39/proposal-flatMap |
| $({ target: 'Array', proto: true }, { |
| flatMap: function flatMap(callbackfn /* , thisArg */) { |
| var O = toObject(this); |
| var sourceLen = toLength(O.length); |
| var A; |
| aFunction(callbackfn); |
| A = arraySpeciesCreate(O, 0); |
| A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined); |
| return A; |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.for-each.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.for-each.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var forEach = __webpack_require__(/*! ../internals/array-for-each */ "../node_modules/core-js-pure/internals/array-for-each.js"); |
| |
| // `Array.prototype.forEach` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.foreach |
| $({ target: 'Array', proto: true, forced: [].forEach != forEach }, { |
| forEach: forEach |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.from.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.from.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var from = __webpack_require__(/*! ../internals/array-from */ "../node_modules/core-js-pure/internals/array-from.js"); |
| var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "../node_modules/core-js-pure/internals/check-correctness-of-iteration.js"); |
| |
| var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { |
| Array.from(iterable); |
| }); |
| |
| // `Array.from` method |
| // https://tc39.github.io/ecma262/#sec-array.from |
| $({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { |
| from: from |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.index-of.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.index-of.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var $indexOf = __webpack_require__(/*! ../internals/array-includes */ "../node_modules/core-js-pure/internals/array-includes.js").indexOf; |
| var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ "../node_modules/core-js-pure/internals/sloppy-array-method.js"); |
| |
| var nativeIndexOf = [].indexOf; |
| |
| var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; |
| var SLOPPY_METHOD = sloppyArrayMethod('indexOf'); |
| |
| // `Array.prototype.indexOf` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.indexof |
| $({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD }, { |
| indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { |
| return NEGATIVE_ZERO |
| // convert -0 to +0 |
| ? nativeIndexOf.apply(this, arguments) || 0 |
| : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.is-array.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.is-array.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var isArray = __webpack_require__(/*! ../internals/is-array */ "../node_modules/core-js-pure/internals/is-array.js"); |
| |
| // `Array.isArray` method |
| // https://tc39.github.io/ecma262/#sec-array.isarray |
| $({ target: 'Array', stat: true }, { |
| isArray: isArray |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.iterator.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.iterator.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../node_modules/core-js-pure/internals/to-indexed-object.js"); |
| var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "../node_modules/core-js-pure/internals/add-to-unscopables.js"); |
| var Iterators = __webpack_require__(/*! ../internals/iterators */ "../node_modules/core-js-pure/internals/iterators.js"); |
| var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../node_modules/core-js-pure/internals/internal-state.js"); |
| var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "../node_modules/core-js-pure/internals/define-iterator.js"); |
| |
| var ARRAY_ITERATOR = 'Array Iterator'; |
| var setInternalState = InternalStateModule.set; |
| var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); |
| |
| // `Array.prototype.entries` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.entries |
| // `Array.prototype.keys` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.keys |
| // `Array.prototype.values` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.values |
| // `Array.prototype[@@iterator]` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator |
| // `CreateArrayIterator` internal method |
| // https://tc39.github.io/ecma262/#sec-createarrayiterator |
| module.exports = defineIterator(Array, 'Array', function (iterated, kind) { |
| setInternalState(this, { |
| type: ARRAY_ITERATOR, |
| target: toIndexedObject(iterated), // target |
| index: 0, // next index |
| kind: kind // kind |
| }); |
| // `%ArrayIteratorPrototype%.next` method |
| // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next |
| }, function () { |
| var state = getInternalState(this); |
| var target = state.target; |
| var kind = state.kind; |
| var index = state.index++; |
| if (!target || index >= target.length) { |
| state.target = undefined; |
| return { value: undefined, done: true }; |
| } |
| if (kind == 'keys') return { value: index, done: false }; |
| if (kind == 'values') return { value: target[index], done: false }; |
| return { value: [index, target[index]], done: false }; |
| }, 'values'); |
| |
| // argumentsList[@@iterator] is %ArrayProto_values% |
| // https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject |
| // https://tc39.github.io/ecma262/#sec-createmappedargumentsobject |
| Iterators.Arguments = Iterators.Array; |
| |
| // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables |
| addToUnscopables('keys'); |
| addToUnscopables('values'); |
| addToUnscopables('entries'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.map.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.map.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var $map = __webpack_require__(/*! ../internals/array-iteration */ "../node_modules/core-js-pure/internals/array-iteration.js").map; |
| var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "../node_modules/core-js-pure/internals/array-method-has-species-support.js"); |
| |
| // `Array.prototype.map` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.map |
| // with adding support of @@species |
| $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('map') }, { |
| map: function map(callbackfn /* , thisArg */) { |
| return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.slice.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.slice.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| var isArray = __webpack_require__(/*! ../internals/is-array */ "../node_modules/core-js-pure/internals/is-array.js"); |
| var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "../node_modules/core-js-pure/internals/to-absolute-index.js"); |
| var toLength = __webpack_require__(/*! ../internals/to-length */ "../node_modules/core-js-pure/internals/to-length.js"); |
| var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../node_modules/core-js-pure/internals/to-indexed-object.js"); |
| var createProperty = __webpack_require__(/*! ../internals/create-property */ "../node_modules/core-js-pure/internals/create-property.js"); |
| var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "../node_modules/core-js-pure/internals/array-method-has-species-support.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var SPECIES = wellKnownSymbol('species'); |
| var nativeSlice = [].slice; |
| var max = Math.max; |
| |
| // `Array.prototype.slice` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.slice |
| // fallback for not array-like ES3 strings and DOM objects |
| $({ target: 'Array', proto: true, forced: !arrayMethodHasSpeciesSupport('slice') }, { |
| slice: function slice(start, end) { |
| var O = toIndexedObject(this); |
| var length = toLength(O.length); |
| var k = toAbsoluteIndex(start, length); |
| var fin = toAbsoluteIndex(end === undefined ? length : end, length); |
| // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible |
| var Constructor, result, n; |
| if (isArray(O)) { |
| Constructor = O.constructor; |
| // cross-realm fallback |
| if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) { |
| Constructor = undefined; |
| } else if (isObject(Constructor)) { |
| Constructor = Constructor[SPECIES]; |
| if (Constructor === null) Constructor = undefined; |
| } |
| if (Constructor === Array || Constructor === undefined) { |
| return nativeSlice.call(O, k, fin); |
| } |
| } |
| result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0)); |
| for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]); |
| result.length = n; |
| return result; |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.some.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.some.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var $some = __webpack_require__(/*! ../internals/array-iteration */ "../node_modules/core-js-pure/internals/array-iteration.js").some; |
| var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ "../node_modules/core-js-pure/internals/sloppy-array-method.js"); |
| |
| // `Array.prototype.some` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.some |
| $({ target: 'Array', proto: true, forced: sloppyArrayMethod('some') }, { |
| some: function some(callbackfn /* , thisArg */) { |
| return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.sort.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.sort.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var aFunction = __webpack_require__(/*! ../internals/a-function */ "../node_modules/core-js-pure/internals/a-function.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var sloppyArrayMethod = __webpack_require__(/*! ../internals/sloppy-array-method */ "../node_modules/core-js-pure/internals/sloppy-array-method.js"); |
| |
| var nativeSort = [].sort; |
| var test = [1, 2, 3]; |
| |
| // IE8- |
| var FAILS_ON_UNDEFINED = fails(function () { |
| test.sort(undefined); |
| }); |
| // V8 bug |
| var FAILS_ON_NULL = fails(function () { |
| test.sort(null); |
| }); |
| // Old WebKit |
| var SLOPPY_METHOD = sloppyArrayMethod('sort'); |
| |
| var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || SLOPPY_METHOD; |
| |
| // `Array.prototype.sort` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.sort |
| $({ target: 'Array', proto: true, forced: FORCED }, { |
| sort: function sort(comparefn) { |
| return comparefn === undefined |
| ? nativeSort.call(toObject(this)) |
| : nativeSort.call(toObject(this), aFunction(comparefn)); |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.array.unscopables.flat-map.js": |
| /*!*****************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.array.unscopables.flat-map.js ***! |
| \*****************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| // this method was added to unscopables after implementation |
| // in popular engines, so it's moved to a separate module |
| var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "../node_modules/core-js-pure/internals/add-to-unscopables.js"); |
| |
| addToUnscopables('flatMap'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.json.to-string-tag.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.json.to-string-tag.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../node_modules/core-js-pure/internals/set-to-string-tag.js"); |
| |
| // JSON[@@toStringTag] property |
| // https://tc39.github.io/ecma262/#sec-json-@@tostringtag |
| setToStringTag(global.JSON, 'JSON', true); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.math.to-string-tag.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.math.to-string-tag.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../node_modules/core-js-pure/internals/set-to-string-tag.js"); |
| |
| // Math[@@toStringTag] property |
| // https://tc39.github.io/ecma262/#sec-math-@@tostringtag |
| setToStringTag(Math, 'Math', true); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.object.keys.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.object.keys.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ "../node_modules/core-js-pure/internals/object-keys.js"); |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| |
| var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); }); |
| |
| // `Object.keys` method |
| // https://tc39.github.io/ecma262/#sec-object.keys |
| $({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { |
| keys: function keys(it) { |
| return nativeKeys(toObject(it)); |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.object.to-string.js": |
| /*!*******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.object.to-string.js ***! |
| \*******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| // empty |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.promise.all-settled.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.promise.all-settled.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var aFunction = __webpack_require__(/*! ../internals/a-function */ "../node_modules/core-js-pure/internals/a-function.js"); |
| var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../node_modules/core-js-pure/internals/new-promise-capability.js"); |
| var perform = __webpack_require__(/*! ../internals/perform */ "../node_modules/core-js-pure/internals/perform.js"); |
| var iterate = __webpack_require__(/*! ../internals/iterate */ "../node_modules/core-js-pure/internals/iterate.js"); |
| |
| // `Promise.allSettled` method |
| // https://github.com/tc39/proposal-promise-allSettled |
| $({ target: 'Promise', stat: true }, { |
| allSettled: function allSettled(iterable) { |
| var C = this; |
| var capability = newPromiseCapabilityModule.f(C); |
| var resolve = capability.resolve; |
| var reject = capability.reject; |
| var result = perform(function () { |
| var promiseResolve = aFunction(C.resolve); |
| var values = []; |
| var counter = 0; |
| var remaining = 1; |
| iterate(iterable, function (promise) { |
| var index = counter++; |
| var alreadyCalled = false; |
| values.push(undefined); |
| remaining++; |
| promiseResolve.call(C, promise).then(function (value) { |
| if (alreadyCalled) return; |
| alreadyCalled = true; |
| values[index] = { status: 'fulfilled', value: value }; |
| --remaining || resolve(values); |
| }, function (e) { |
| if (alreadyCalled) return; |
| alreadyCalled = true; |
| values[index] = { status: 'rejected', reason: e }; |
| --remaining || resolve(values); |
| }); |
| }); |
| --remaining || resolve(values); |
| }); |
| if (result.error) reject(result.value); |
| return capability.promise; |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.promise.finally.js": |
| /*!******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.promise.finally.js ***! |
| \******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js-pure/internals/is-pure.js"); |
| var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ "../node_modules/core-js-pure/internals/native-promise-constructor.js"); |
| var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js-pure/internals/get-built-in.js"); |
| var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "../node_modules/core-js-pure/internals/species-constructor.js"); |
| var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "../node_modules/core-js-pure/internals/promise-resolve.js"); |
| var redefine = __webpack_require__(/*! ../internals/redefine */ "../node_modules/core-js-pure/internals/redefine.js"); |
| |
| // `Promise.prototype.finally` method |
| // https://tc39.github.io/ecma262/#sec-promise.prototype.finally |
| $({ target: 'Promise', proto: true, real: true }, { |
| 'finally': function (onFinally) { |
| var C = speciesConstructor(this, getBuiltIn('Promise')); |
| var isFunction = typeof onFinally == 'function'; |
| return this.then( |
| isFunction ? function (x) { |
| return promiseResolve(C, onFinally()).then(function () { return x; }); |
| } : onFinally, |
| isFunction ? function (e) { |
| return promiseResolve(C, onFinally()).then(function () { throw e; }); |
| } : onFinally |
| ); |
| } |
| }); |
| |
| // patch native Promise.prototype for native async functions |
| if (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) { |
| redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']); |
| } |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.promise.js": |
| /*!**********************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.promise.js ***! |
| \**********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js-pure/internals/is-pure.js"); |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js-pure/internals/get-built-in.js"); |
| var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ "../node_modules/core-js-pure/internals/native-promise-constructor.js"); |
| var redefine = __webpack_require__(/*! ../internals/redefine */ "../node_modules/core-js-pure/internals/redefine.js"); |
| var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "../node_modules/core-js-pure/internals/redefine-all.js"); |
| var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../node_modules/core-js-pure/internals/set-to-string-tag.js"); |
| var setSpecies = __webpack_require__(/*! ../internals/set-species */ "../node_modules/core-js-pure/internals/set-species.js"); |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| var aFunction = __webpack_require__(/*! ../internals/a-function */ "../node_modules/core-js-pure/internals/a-function.js"); |
| var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../node_modules/core-js-pure/internals/an-instance.js"); |
| var classof = __webpack_require__(/*! ../internals/classof-raw */ "../node_modules/core-js-pure/internals/classof-raw.js"); |
| var iterate = __webpack_require__(/*! ../internals/iterate */ "../node_modules/core-js-pure/internals/iterate.js"); |
| var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "../node_modules/core-js-pure/internals/check-correctness-of-iteration.js"); |
| var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "../node_modules/core-js-pure/internals/species-constructor.js"); |
| var task = __webpack_require__(/*! ../internals/task */ "../node_modules/core-js-pure/internals/task.js").set; |
| var microtask = __webpack_require__(/*! ../internals/microtask */ "../node_modules/core-js-pure/internals/microtask.js"); |
| var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "../node_modules/core-js-pure/internals/promise-resolve.js"); |
| var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ "../node_modules/core-js-pure/internals/host-report-errors.js"); |
| var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../node_modules/core-js-pure/internals/new-promise-capability.js"); |
| var perform = __webpack_require__(/*! ../internals/perform */ "../node_modules/core-js-pure/internals/perform.js"); |
| var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../node_modules/core-js-pure/internals/internal-state.js"); |
| var isForced = __webpack_require__(/*! ../internals/is-forced */ "../node_modules/core-js-pure/internals/is-forced.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var V8_VERSION = __webpack_require__(/*! ../internals/v8-version */ "../node_modules/core-js-pure/internals/v8-version.js"); |
| |
| var SPECIES = wellKnownSymbol('species'); |
| var PROMISE = 'Promise'; |
| var getInternalState = InternalStateModule.get; |
| var setInternalState = InternalStateModule.set; |
| var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); |
| var PromiseConstructor = NativePromise; |
| var TypeError = global.TypeError; |
| var document = global.document; |
| var process = global.process; |
| var $fetch = getBuiltIn('fetch'); |
| var newPromiseCapability = newPromiseCapabilityModule.f; |
| var newGenericPromiseCapability = newPromiseCapability; |
| var IS_NODE = classof(process) == 'process'; |
| var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); |
| var UNHANDLED_REJECTION = 'unhandledrejection'; |
| var REJECTION_HANDLED = 'rejectionhandled'; |
| var PENDING = 0; |
| var FULFILLED = 1; |
| var REJECTED = 2; |
| var HANDLED = 1; |
| var UNHANDLED = 2; |
| var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; |
| |
| var FORCED = isForced(PROMISE, function () { |
| // correct subclassing with @@species support |
| var promise = PromiseConstructor.resolve(1); |
| var empty = function () { /* empty */ }; |
| var FakePromise = (promise.constructor = {})[SPECIES] = function (exec) { |
| exec(empty, empty); |
| }; |
| // unhandled rejections tracking support, NodeJS Promise without it fails @@species test |
| return !((IS_NODE || typeof PromiseRejectionEvent == 'function') |
| && (!IS_PURE || promise['finally']) |
| && promise.then(empty) instanceof FakePromise |
| // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables |
| // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 |
| // we can't detect it synchronously, so just check versions |
| && V8_VERSION !== 66); |
| }); |
| |
| var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { |
| PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); |
| }); |
| |
| // helpers |
| var isThenable = function (it) { |
| var then; |
| return isObject(it) && typeof (then = it.then) == 'function' ? then : false; |
| }; |
| |
| var notify = function (promise, state, isReject) { |
| if (state.notified) return; |
| state.notified = true; |
| var chain = state.reactions; |
| microtask(function () { |
| var value = state.value; |
| var ok = state.state == FULFILLED; |
| var index = 0; |
| // variable length - can't use forEach |
| while (chain.length > index) { |
| var reaction = chain[index++]; |
| var handler = ok ? reaction.ok : reaction.fail; |
| var resolve = reaction.resolve; |
| var reject = reaction.reject; |
| var domain = reaction.domain; |
| var result, then, exited; |
| try { |
| if (handler) { |
| if (!ok) { |
| if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); |
| state.rejection = HANDLED; |
| } |
| if (handler === true) result = value; |
| else { |
| if (domain) domain.enter(); |
| result = handler(value); // can throw |
| if (domain) { |
| domain.exit(); |
| exited = true; |
| } |
| } |
| if (result === reaction.promise) { |
| reject(TypeError('Promise-chain cycle')); |
| } else if (then = isThenable(result)) { |
| then.call(result, resolve, reject); |
| } else resolve(result); |
| } else reject(value); |
| } catch (error) { |
| if (domain && !exited) domain.exit(); |
| reject(error); |
| } |
| } |
| state.reactions = []; |
| state.notified = false; |
| if (isReject && !state.rejection) onUnhandled(promise, state); |
| }); |
| }; |
| |
| var dispatchEvent = function (name, promise, reason) { |
| var event, handler; |
| if (DISPATCH_EVENT) { |
| event = document.createEvent('Event'); |
| event.promise = promise; |
| event.reason = reason; |
| event.initEvent(name, false, true); |
| global.dispatchEvent(event); |
| } else event = { promise: promise, reason: reason }; |
| if (handler = global['on' + name]) handler(event); |
| else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); |
| }; |
| |
| var onUnhandled = function (promise, state) { |
| task.call(global, function () { |
| var value = state.value; |
| var IS_UNHANDLED = isUnhandled(state); |
| var result; |
| if (IS_UNHANDLED) { |
| result = perform(function () { |
| if (IS_NODE) { |
| process.emit('unhandledRejection', value, promise); |
| } else dispatchEvent(UNHANDLED_REJECTION, promise, value); |
| }); |
| // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should |
| state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; |
| if (result.error) throw result.value; |
| } |
| }); |
| }; |
| |
| var isUnhandled = function (state) { |
| return state.rejection !== HANDLED && !state.parent; |
| }; |
| |
| var onHandleUnhandled = function (promise, state) { |
| task.call(global, function () { |
| if (IS_NODE) { |
| process.emit('rejectionHandled', promise); |
| } else dispatchEvent(REJECTION_HANDLED, promise, state.value); |
| }); |
| }; |
| |
| var bind = function (fn, promise, state, unwrap) { |
| return function (value) { |
| fn(promise, state, value, unwrap); |
| }; |
| }; |
| |
| var internalReject = function (promise, state, value, unwrap) { |
| if (state.done) return; |
| state.done = true; |
| if (unwrap) state = unwrap; |
| state.value = value; |
| state.state = REJECTED; |
| notify(promise, state, true); |
| }; |
| |
| var internalResolve = function (promise, state, value, unwrap) { |
| if (state.done) return; |
| state.done = true; |
| if (unwrap) state = unwrap; |
| try { |
| if (promise === value) throw TypeError("Promise can't be resolved itself"); |
| var then = isThenable(value); |
| if (then) { |
| microtask(function () { |
| var wrapper = { done: false }; |
| try { |
| then.call(value, |
| bind(internalResolve, promise, wrapper, state), |
| bind(internalReject, promise, wrapper, state) |
| ); |
| } catch (error) { |
| internalReject(promise, wrapper, error, state); |
| } |
| }); |
| } else { |
| state.value = value; |
| state.state = FULFILLED; |
| notify(promise, state, false); |
| } |
| } catch (error) { |
| internalReject(promise, { done: false }, error, state); |
| } |
| }; |
| |
| // constructor polyfill |
| if (FORCED) { |
| // 25.4.3.1 Promise(executor) |
| PromiseConstructor = function Promise(executor) { |
| anInstance(this, PromiseConstructor, PROMISE); |
| aFunction(executor); |
| Internal.call(this); |
| var state = getInternalState(this); |
| try { |
| executor(bind(internalResolve, this, state), bind(internalReject, this, state)); |
| } catch (error) { |
| internalReject(this, state, error); |
| } |
| }; |
| // eslint-disable-next-line no-unused-vars |
| Internal = function Promise(executor) { |
| setInternalState(this, { |
| type: PROMISE, |
| done: false, |
| notified: false, |
| parent: false, |
| reactions: [], |
| rejection: false, |
| state: PENDING, |
| value: undefined |
| }); |
| }; |
| Internal.prototype = redefineAll(PromiseConstructor.prototype, { |
| // `Promise.prototype.then` method |
| // https://tc39.github.io/ecma262/#sec-promise.prototype.then |
| then: function then(onFulfilled, onRejected) { |
| var state = getInternalPromiseState(this); |
| var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); |
| reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; |
| reaction.fail = typeof onRejected == 'function' && onRejected; |
| reaction.domain = IS_NODE ? process.domain : undefined; |
| state.parent = true; |
| state.reactions.push(reaction); |
| if (state.state != PENDING) notify(this, state, false); |
| return reaction.promise; |
| }, |
| // `Promise.prototype.catch` method |
| // https://tc39.github.io/ecma262/#sec-promise.prototype.catch |
| 'catch': function (onRejected) { |
| return this.then(undefined, onRejected); |
| } |
| }); |
| OwnPromiseCapability = function () { |
| var promise = new Internal(); |
| var state = getInternalState(promise); |
| this.promise = promise; |
| this.resolve = bind(internalResolve, promise, state); |
| this.reject = bind(internalReject, promise, state); |
| }; |
| newPromiseCapabilityModule.f = newPromiseCapability = function (C) { |
| return C === PromiseConstructor || C === PromiseWrapper |
| ? new OwnPromiseCapability(C) |
| : newGenericPromiseCapability(C); |
| }; |
| |
| if (!IS_PURE && typeof NativePromise == 'function') { |
| nativeThen = NativePromise.prototype.then; |
| |
| // wrap native Promise#then for native async functions |
| redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { |
| var that = this; |
| return new PromiseConstructor(function (resolve, reject) { |
| nativeThen.call(that, resolve, reject); |
| }).then(onFulfilled, onRejected); |
| // https://github.com/zloirock/core-js/issues/640 |
| }, { unsafe: true }); |
| |
| // wrap fetch result |
| if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { |
| // eslint-disable-next-line no-unused-vars |
| fetch: function fetch(input /* , init */) { |
| return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); |
| } |
| }); |
| } |
| } |
| |
| $({ global: true, wrap: true, forced: FORCED }, { |
| Promise: PromiseConstructor |
| }); |
| |
| setToStringTag(PromiseConstructor, PROMISE, false, true); |
| setSpecies(PROMISE); |
| |
| PromiseWrapper = getBuiltIn(PROMISE); |
| |
| // statics |
| $({ target: PROMISE, stat: true, forced: FORCED }, { |
| // `Promise.reject` method |
| // https://tc39.github.io/ecma262/#sec-promise.reject |
| reject: function reject(r) { |
| var capability = newPromiseCapability(this); |
| capability.reject.call(undefined, r); |
| return capability.promise; |
| } |
| }); |
| |
| $({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { |
| // `Promise.resolve` method |
| // https://tc39.github.io/ecma262/#sec-promise.resolve |
| resolve: function resolve(x) { |
| return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); |
| } |
| }); |
| |
| $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { |
| // `Promise.all` method |
| // https://tc39.github.io/ecma262/#sec-promise.all |
| all: function all(iterable) { |
| var C = this; |
| var capability = newPromiseCapability(C); |
| var resolve = capability.resolve; |
| var reject = capability.reject; |
| var result = perform(function () { |
| var $promiseResolve = aFunction(C.resolve); |
| var values = []; |
| var counter = 0; |
| var remaining = 1; |
| iterate(iterable, function (promise) { |
| var index = counter++; |
| var alreadyCalled = false; |
| values.push(undefined); |
| remaining++; |
| $promiseResolve.call(C, promise).then(function (value) { |
| if (alreadyCalled) return; |
| alreadyCalled = true; |
| values[index] = value; |
| --remaining || resolve(values); |
| }, reject); |
| }); |
| --remaining || resolve(values); |
| }); |
| if (result.error) reject(result.value); |
| return capability.promise; |
| }, |
| // `Promise.race` method |
| // https://tc39.github.io/ecma262/#sec-promise.race |
| race: function race(iterable) { |
| var C = this; |
| var capability = newPromiseCapability(C); |
| var reject = capability.reject; |
| var result = perform(function () { |
| var $promiseResolve = aFunction(C.resolve); |
| iterate(iterable, function (promise) { |
| $promiseResolve.call(C, promise).then(capability.resolve, reject); |
| }); |
| }); |
| if (result.error) reject(result.value); |
| return capability.promise; |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.string.iterator.js": |
| /*!******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.string.iterator.js ***! |
| \******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var charAt = __webpack_require__(/*! ../internals/string-multibyte */ "../node_modules/core-js-pure/internals/string-multibyte.js").charAt; |
| var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../node_modules/core-js-pure/internals/internal-state.js"); |
| var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "../node_modules/core-js-pure/internals/define-iterator.js"); |
| |
| var STRING_ITERATOR = 'String Iterator'; |
| var setInternalState = InternalStateModule.set; |
| var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); |
| |
| // `String.prototype[@@iterator]` method |
| // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator |
| defineIterator(String, 'String', function (iterated) { |
| setInternalState(this, { |
| type: STRING_ITERATOR, |
| string: String(iterated), |
| index: 0 |
| }); |
| // `%StringIteratorPrototype%.next` method |
| // https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next |
| }, function next() { |
| var state = getInternalState(this); |
| var string = state.string; |
| var index = state.index; |
| var point; |
| if (index >= string.length) return { value: undefined, done: true }; |
| point = charAt(string, index); |
| state.index += point.length; |
| return { value: point, done: false }; |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.async-iterator.js": |
| /*!************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.async-iterator.js ***! |
| \************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.asyncIterator` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.asynciterator |
| defineWellKnownSymbol('asyncIterator'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.description.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.description.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| // empty |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.has-instance.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.has-instance.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.hasInstance` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.hasinstance |
| defineWellKnownSymbol('hasInstance'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js": |
| /*!******************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js ***! |
| \******************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.isConcatSpreadable` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.isconcatspreadable |
| defineWellKnownSymbol('isConcatSpreadable'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.iterator.js": |
| /*!******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.iterator.js ***! |
| \******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.iterator` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.iterator |
| defineWellKnownSymbol('iterator'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js-pure/internals/is-pure.js"); |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "../node_modules/core-js-pure/internals/native-symbol.js"); |
| var fails = __webpack_require__(/*! ../internals/fails */ "../node_modules/core-js-pure/internals/fails.js"); |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var isArray = __webpack_require__(/*! ../internals/is-array */ "../node_modules/core-js-pure/internals/is-array.js"); |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var toObject = __webpack_require__(/*! ../internals/to-object */ "../node_modules/core-js-pure/internals/to-object.js"); |
| var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../node_modules/core-js-pure/internals/to-indexed-object.js"); |
| var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "../node_modules/core-js-pure/internals/to-primitive.js"); |
| var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js-pure/internals/create-property-descriptor.js"); |
| var nativeObjectCreate = __webpack_require__(/*! ../internals/object-create */ "../node_modules/core-js-pure/internals/object-create.js"); |
| var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../node_modules/core-js-pure/internals/object-keys.js"); |
| var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "../node_modules/core-js-pure/internals/object-get-own-property-names.js"); |
| var getOwnPropertyNamesExternal = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ "../node_modules/core-js-pure/internals/object-get-own-property-names-external.js"); |
| var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "../node_modules/core-js-pure/internals/object-get-own-property-symbols.js"); |
| var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js"); |
| var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js-pure/internals/object-define-property.js"); |
| var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../node_modules/core-js-pure/internals/object-property-is-enumerable.js"); |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| var redefine = __webpack_require__(/*! ../internals/redefine */ "../node_modules/core-js-pure/internals/redefine.js"); |
| var shared = __webpack_require__(/*! ../internals/shared */ "../node_modules/core-js-pure/internals/shared.js"); |
| var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../node_modules/core-js-pure/internals/shared-key.js"); |
| var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../node_modules/core-js-pure/internals/hidden-keys.js"); |
| var uid = __webpack_require__(/*! ../internals/uid */ "../node_modules/core-js-pure/internals/uid.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| var wrappedWellKnownSymbolModule = __webpack_require__(/*! ../internals/wrapped-well-known-symbol */ "../node_modules/core-js-pure/internals/wrapped-well-known-symbol.js"); |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../node_modules/core-js-pure/internals/set-to-string-tag.js"); |
| var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../node_modules/core-js-pure/internals/internal-state.js"); |
| var $forEach = __webpack_require__(/*! ../internals/array-iteration */ "../node_modules/core-js-pure/internals/array-iteration.js").forEach; |
| |
| var HIDDEN = sharedKey('hidden'); |
| var SYMBOL = 'Symbol'; |
| var PROTOTYPE = 'prototype'; |
| var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); |
| var setInternalState = InternalStateModule.set; |
| var getInternalState = InternalStateModule.getterFor(SYMBOL); |
| var ObjectPrototype = Object[PROTOTYPE]; |
| var $Symbol = global.Symbol; |
| var JSON = global.JSON; |
| var nativeJSONStringify = JSON && JSON.stringify; |
| var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; |
| var nativeDefineProperty = definePropertyModule.f; |
| var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; |
| var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; |
| var AllSymbols = shared('symbols'); |
| var ObjectPrototypeSymbols = shared('op-symbols'); |
| var StringToSymbolRegistry = shared('string-to-symbol-registry'); |
| var SymbolToStringRegistry = shared('symbol-to-string-registry'); |
| var WellKnownSymbolsStore = shared('wks'); |
| var QObject = global.QObject; |
| // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 |
| var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; |
| |
| // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 |
| var setSymbolDescriptor = DESCRIPTORS && fails(function () { |
| return nativeObjectCreate(nativeDefineProperty({}, 'a', { |
| get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; } |
| })).a != 7; |
| }) ? function (O, P, Attributes) { |
| var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); |
| if (ObjectPrototypeDescriptor) delete ObjectPrototype[P]; |
| nativeDefineProperty(O, P, Attributes); |
| if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { |
| nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); |
| } |
| } : nativeDefineProperty; |
| |
| var wrap = function (tag, description) { |
| var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]); |
| setInternalState(symbol, { |
| type: SYMBOL, |
| tag: tag, |
| description: description |
| }); |
| if (!DESCRIPTORS) symbol.description = description; |
| return symbol; |
| }; |
| |
| var isSymbol = NATIVE_SYMBOL && typeof $Symbol.iterator == 'symbol' ? function (it) { |
| return typeof it == 'symbol'; |
| } : function (it) { |
| return Object(it) instanceof $Symbol; |
| }; |
| |
| var $defineProperty = function defineProperty(O, P, Attributes) { |
| if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); |
| anObject(O); |
| var key = toPrimitive(P, true); |
| anObject(Attributes); |
| if (has(AllSymbols, key)) { |
| if (!Attributes.enumerable) { |
| if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {})); |
| O[HIDDEN][key] = true; |
| } else { |
| if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; |
| Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); |
| } return setSymbolDescriptor(O, key, Attributes); |
| } return nativeDefineProperty(O, key, Attributes); |
| }; |
| |
| var $defineProperties = function defineProperties(O, Properties) { |
| anObject(O); |
| var properties = toIndexedObject(Properties); |
| var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); |
| $forEach(keys, function (key) { |
| if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); |
| }); |
| return O; |
| }; |
| |
| var $create = function create(O, Properties) { |
| return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); |
| }; |
| |
| var $propertyIsEnumerable = function propertyIsEnumerable(V) { |
| var P = toPrimitive(V, true); |
| var enumerable = nativePropertyIsEnumerable.call(this, P); |
| if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false; |
| return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; |
| }; |
| |
| var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { |
| var it = toIndexedObject(O); |
| var key = toPrimitive(P, true); |
| if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return; |
| var descriptor = nativeGetOwnPropertyDescriptor(it, key); |
| if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) { |
| descriptor.enumerable = true; |
| } |
| return descriptor; |
| }; |
| |
| var $getOwnPropertyNames = function getOwnPropertyNames(O) { |
| var names = nativeGetOwnPropertyNames(toIndexedObject(O)); |
| var result = []; |
| $forEach(names, function (key) { |
| if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key); |
| }); |
| return result; |
| }; |
| |
| var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { |
| var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; |
| var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); |
| var result = []; |
| $forEach(names, function (key) { |
| if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) { |
| result.push(AllSymbols[key]); |
| } |
| }); |
| return result; |
| }; |
| |
| // `Symbol` constructor |
| // https://tc39.github.io/ecma262/#sec-symbol-constructor |
| if (!NATIVE_SYMBOL) { |
| $Symbol = function Symbol() { |
| if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); |
| var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]); |
| var tag = uid(description); |
| var setter = function (value) { |
| if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value); |
| if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; |
| setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value)); |
| }; |
| if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); |
| return wrap(tag, description); |
| }; |
| |
| redefine($Symbol[PROTOTYPE], 'toString', function toString() { |
| return getInternalState(this).tag; |
| }); |
| |
| propertyIsEnumerableModule.f = $propertyIsEnumerable; |
| definePropertyModule.f = $defineProperty; |
| getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; |
| getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; |
| getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; |
| |
| if (DESCRIPTORS) { |
| // https://github.com/tc39/proposal-Symbol-description |
| nativeDefineProperty($Symbol[PROTOTYPE], 'description', { |
| configurable: true, |
| get: function description() { |
| return getInternalState(this).description; |
| } |
| }); |
| if (!IS_PURE) { |
| redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); |
| } |
| } |
| |
| wrappedWellKnownSymbolModule.f = function (name) { |
| return wrap(wellKnownSymbol(name), name); |
| }; |
| } |
| |
| $({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { |
| Symbol: $Symbol |
| }); |
| |
| $forEach(objectKeys(WellKnownSymbolsStore), function (name) { |
| defineWellKnownSymbol(name); |
| }); |
| |
| $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { |
| // `Symbol.for` method |
| // https://tc39.github.io/ecma262/#sec-symbol.for |
| 'for': function (key) { |
| var string = String(key); |
| if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; |
| var symbol = $Symbol(string); |
| StringToSymbolRegistry[string] = symbol; |
| SymbolToStringRegistry[symbol] = string; |
| return symbol; |
| }, |
| // `Symbol.keyFor` method |
| // https://tc39.github.io/ecma262/#sec-symbol.keyfor |
| keyFor: function keyFor(sym) { |
| if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol'); |
| if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; |
| }, |
| useSetter: function () { USE_SETTER = true; }, |
| useSimple: function () { USE_SETTER = false; } |
| }); |
| |
| $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { |
| // `Object.create` method |
| // https://tc39.github.io/ecma262/#sec-object.create |
| create: $create, |
| // `Object.defineProperty` method |
| // https://tc39.github.io/ecma262/#sec-object.defineproperty |
| defineProperty: $defineProperty, |
| // `Object.defineProperties` method |
| // https://tc39.github.io/ecma262/#sec-object.defineproperties |
| defineProperties: $defineProperties, |
| // `Object.getOwnPropertyDescriptor` method |
| // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors |
| getOwnPropertyDescriptor: $getOwnPropertyDescriptor |
| }); |
| |
| $({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, { |
| // `Object.getOwnPropertyNames` method |
| // https://tc39.github.io/ecma262/#sec-object.getownpropertynames |
| getOwnPropertyNames: $getOwnPropertyNames, |
| // `Object.getOwnPropertySymbols` method |
| // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols |
| getOwnPropertySymbols: $getOwnPropertySymbols |
| }); |
| |
| // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives |
| // https://bugs.chromium.org/p/v8/issues/detail?id=3443 |
| $({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, { |
| getOwnPropertySymbols: function getOwnPropertySymbols(it) { |
| return getOwnPropertySymbolsModule.f(toObject(it)); |
| } |
| }); |
| |
| // `JSON.stringify` method behavior with symbols |
| // https://tc39.github.io/ecma262/#sec-json.stringify |
| JSON && $({ target: 'JSON', stat: true, forced: !NATIVE_SYMBOL || fails(function () { |
| var symbol = $Symbol(); |
| // MS Edge converts symbol values to JSON as {} |
| return nativeJSONStringify([symbol]) != '[null]' |
| // WebKit converts symbol values to JSON as null |
| || nativeJSONStringify({ a: symbol }) != '{}' |
| // V8 throws on boxed symbols |
| || nativeJSONStringify(Object(symbol)) != '{}'; |
| }) }, { |
| stringify: function stringify(it) { |
| var args = [it]; |
| var index = 1; |
| var replacer, $replacer; |
| while (arguments.length > index) args.push(arguments[index++]); |
| $replacer = replacer = args[1]; |
| if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined |
| if (!isArray(replacer)) replacer = function (key, value) { |
| if (typeof $replacer == 'function') value = $replacer.call(this, key, value); |
| if (!isSymbol(value)) return value; |
| }; |
| args[1] = replacer; |
| return nativeJSONStringify.apply(JSON, args); |
| } |
| }); |
| |
| // `Symbol.prototype[@@toPrimitive]` method |
| // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive |
| if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) { |
| createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); |
| } |
| // `Symbol.prototype[@@toStringTag]` property |
| // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag |
| setToStringTag($Symbol, SYMBOL); |
| |
| hiddenKeys[HIDDEN] = true; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.match-all.js": |
| /*!*******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.match-all.js ***! |
| \*******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.matchAll` well-known symbol |
| defineWellKnownSymbol('matchAll'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.match.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.match.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.match` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.match |
| defineWellKnownSymbol('match'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.replace.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.replace.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.replace` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.replace |
| defineWellKnownSymbol('replace'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.search.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.search.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.search` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.search |
| defineWellKnownSymbol('search'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.species.js": |
| /*!*****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.species.js ***! |
| \*****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.species` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.species |
| defineWellKnownSymbol('species'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.split.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.split.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.split` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.split |
| defineWellKnownSymbol('split'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.to-primitive.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.to-primitive.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.toPrimitive` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.toprimitive |
| defineWellKnownSymbol('toPrimitive'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js": |
| /*!***********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js ***! |
| \***********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.toStringTag` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.tostringtag |
| defineWellKnownSymbol('toStringTag'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/es.symbol.unscopables.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/es.symbol.unscopables.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.unscopables` well-known symbol |
| // https://tc39.github.io/ecma262/#sec-symbol.unscopables |
| defineWellKnownSymbol('unscopables'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.aggregate-error.js": |
| /*!**********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.aggregate-error.js ***! |
| \**********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../node_modules/core-js-pure/internals/object-get-prototype-of.js"); |
| var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../node_modules/core-js-pure/internals/object-set-prototype-of.js"); |
| var create = __webpack_require__(/*! ../internals/object-create */ "../node_modules/core-js-pure/internals/object-create.js"); |
| var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js-pure/internals/object-define-property.js"); |
| var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js-pure/internals/create-property-descriptor.js"); |
| var iterate = __webpack_require__(/*! ../internals/iterate */ "../node_modules/core-js-pure/internals/iterate.js"); |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../node_modules/core-js-pure/internals/internal-state.js"); |
| |
| var setInternalState = InternalStateModule.set; |
| var getInternalAggregateErrorState = InternalStateModule.getterFor('AggregateError'); |
| |
| var $AggregateError = function AggregateError(errors, message) { |
| var that = this; |
| if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message); |
| if (setPrototypeOf) { |
| that = setPrototypeOf(new Error(message), getPrototypeOf(that)); |
| } |
| var errorsArray = []; |
| iterate(errors, errorsArray.push, errorsArray); |
| if (DESCRIPTORS) setInternalState(that, { errors: errorsArray, type: 'AggregateError' }); |
| else that.errors = errorsArray; |
| if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message)); |
| return that; |
| }; |
| |
| $AggregateError.prototype = create(Error.prototype, { |
| constructor: createPropertyDescriptor(5, $AggregateError), |
| message: createPropertyDescriptor(5, ''), |
| name: createPropertyDescriptor(5, 'AggregateError'), |
| toString: createPropertyDescriptor(5, function toString() { |
| var name = anObject(this).name; |
| name = name === undefined ? 'AggregateError' : String(name); |
| var message = this.message; |
| message = message === undefined ? '' : String(message); |
| return name + ': ' + message; |
| }) |
| }); |
| |
| if (DESCRIPTORS) defineProperty.f($AggregateError.prototype, 'errors', { |
| get: function () { |
| return getInternalAggregateErrorState(this).errors; |
| }, |
| configurable: true |
| }); |
| |
| $({ global: true }, { |
| AggregateError: $AggregateError |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.promise.all-settled.js": |
| /*!**************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.promise.all-settled.js ***! |
| \**************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| // TODO: Remove from `core-js@4` |
| __webpack_require__(/*! ./es.promise.all-settled.js */ "../node_modules/core-js-pure/modules/es.promise.all-settled.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.promise.any.js": |
| /*!******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.promise.any.js ***! |
| \******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var aFunction = __webpack_require__(/*! ../internals/a-function */ "../node_modules/core-js-pure/internals/a-function.js"); |
| var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js-pure/internals/get-built-in.js"); |
| var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../node_modules/core-js-pure/internals/new-promise-capability.js"); |
| var perform = __webpack_require__(/*! ../internals/perform */ "../node_modules/core-js-pure/internals/perform.js"); |
| var iterate = __webpack_require__(/*! ../internals/iterate */ "../node_modules/core-js-pure/internals/iterate.js"); |
| |
| var PROMISE_ANY_ERROR = 'No one promise resolved'; |
| |
| // `Promise.any` method |
| // https://github.com/tc39/proposal-promise-any |
| $({ target: 'Promise', stat: true }, { |
| any: function any(iterable) { |
| var C = this; |
| var capability = newPromiseCapabilityModule.f(C); |
| var resolve = capability.resolve; |
| var reject = capability.reject; |
| var result = perform(function () { |
| var promiseResolve = aFunction(C.resolve); |
| var errors = []; |
| var counter = 0; |
| var remaining = 1; |
| var alreadyResolved = false; |
| iterate(iterable, function (promise) { |
| var index = counter++; |
| var alreadyRejected = false; |
| errors.push(undefined); |
| remaining++; |
| promiseResolve.call(C, promise).then(function (value) { |
| if (alreadyRejected || alreadyResolved) return; |
| alreadyResolved = true; |
| resolve(value); |
| }, function (e) { |
| if (alreadyRejected || alreadyResolved) return; |
| alreadyRejected = true; |
| errors[index] = e; |
| --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); |
| }); |
| }); |
| --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); |
| }); |
| if (result.error) reject(result.value); |
| return capability.promise; |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.promise.try.js": |
| /*!******************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.promise.try.js ***! |
| \******************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../node_modules/core-js-pure/internals/new-promise-capability.js"); |
| var perform = __webpack_require__(/*! ../internals/perform */ "../node_modules/core-js-pure/internals/perform.js"); |
| |
| // `Promise.try` method |
| // https://github.com/tc39/proposal-promise-try |
| $({ target: 'Promise', stat: true }, { |
| 'try': function (callbackfn) { |
| var promiseCapability = newPromiseCapabilityModule.f(this); |
| var result = perform(callbackfn); |
| (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value); |
| return promiseCapability.promise; |
| } |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js": |
| /*!***************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js ***! |
| \***************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.asyncDispose` well-known symbol |
| // https://github.com/tc39/proposal-using-statement |
| defineWellKnownSymbol('asyncDispose'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.symbol.dispose.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.symbol.dispose.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.dispose` well-known symbol |
| // https://github.com/tc39/proposal-using-statement |
| defineWellKnownSymbol('dispose'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.symbol.observable.js": |
| /*!************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.symbol.observable.js ***! |
| \************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.observable` well-known symbol |
| // https://github.com/tc39/proposal-observable |
| defineWellKnownSymbol('observable'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js": |
| /*!***************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js ***! |
| \***************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| // `Symbol.patternMatch` well-known symbol |
| // https://github.com/tc39/proposal-pattern-matching |
| defineWellKnownSymbol('patternMatch'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js": |
| /*!*************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js ***! |
| \*************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| // TODO: remove from `core-js@4` |
| var defineWellKnownSymbol = __webpack_require__(/*! ../internals/define-well-known-symbol */ "../node_modules/core-js-pure/internals/define-well-known-symbol.js"); |
| |
| defineWellKnownSymbol('replaceAll'); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/web.dom-collections.iterator.js": |
| /*!****************************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/web.dom-collections.iterator.js ***! |
| \****************************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ./es.array.iterator */ "../node_modules/core-js-pure/modules/es.array.iterator.js"); |
| var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ "../node_modules/core-js-pure/internals/dom-iterables.js"); |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../node_modules/core-js-pure/internals/create-non-enumerable-property.js"); |
| var Iterators = __webpack_require__(/*! ../internals/iterators */ "../node_modules/core-js-pure/internals/iterators.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var TO_STRING_TAG = wellKnownSymbol('toStringTag'); |
| |
| for (var COLLECTION_NAME in DOMIterables) { |
| var Collection = global[COLLECTION_NAME]; |
| var CollectionPrototype = Collection && Collection.prototype; |
| if (CollectionPrototype && !CollectionPrototype[TO_STRING_TAG]) { |
| createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); |
| } |
| Iterators[COLLECTION_NAME] = Iterators.Array; |
| } |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/web.url-search-params.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/web.url-search-params.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` |
| __webpack_require__(/*! ../modules/es.array.iterator */ "../node_modules/core-js-pure/modules/es.array.iterator.js"); |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js-pure/internals/get-built-in.js"); |
| var USE_NATIVE_URL = __webpack_require__(/*! ../internals/native-url */ "../node_modules/core-js-pure/internals/native-url.js"); |
| var redefine = __webpack_require__(/*! ../internals/redefine */ "../node_modules/core-js-pure/internals/redefine.js"); |
| var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "../node_modules/core-js-pure/internals/redefine-all.js"); |
| var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../node_modules/core-js-pure/internals/set-to-string-tag.js"); |
| var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ "../node_modules/core-js-pure/internals/create-iterator-constructor.js"); |
| var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../node_modules/core-js-pure/internals/internal-state.js"); |
| var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../node_modules/core-js-pure/internals/an-instance.js"); |
| var hasOwn = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var bind = __webpack_require__(/*! ../internals/bind-context */ "../node_modules/core-js-pure/internals/bind-context.js"); |
| var classof = __webpack_require__(/*! ../internals/classof */ "../node_modules/core-js-pure/internals/classof.js"); |
| var anObject = __webpack_require__(/*! ../internals/an-object */ "../node_modules/core-js-pure/internals/an-object.js"); |
| var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js-pure/internals/is-object.js"); |
| var create = __webpack_require__(/*! ../internals/object-create */ "../node_modules/core-js-pure/internals/object-create.js"); |
| var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js-pure/internals/create-property-descriptor.js"); |
| var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "../node_modules/core-js-pure/internals/get-iterator.js"); |
| var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../node_modules/core-js-pure/internals/get-iterator-method.js"); |
| var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../node_modules/core-js-pure/internals/well-known-symbol.js"); |
| |
| var $fetch = getBuiltIn('fetch'); |
| var Headers = getBuiltIn('Headers'); |
| var ITERATOR = wellKnownSymbol('iterator'); |
| var URL_SEARCH_PARAMS = 'URLSearchParams'; |
| var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; |
| var setInternalState = InternalStateModule.set; |
| var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS); |
| var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR); |
| |
| var plus = /\+/g; |
| var sequences = Array(4); |
| |
| var percentSequence = function (bytes) { |
| return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi')); |
| }; |
| |
| var percentDecode = function (sequence) { |
| try { |
| return decodeURIComponent(sequence); |
| } catch (error) { |
| return sequence; |
| } |
| }; |
| |
| var deserialize = function (it) { |
| var result = it.replace(plus, ' '); |
| var bytes = 4; |
| try { |
| return decodeURIComponent(result); |
| } catch (error) { |
| while (bytes) { |
| result = result.replace(percentSequence(bytes--), percentDecode); |
| } |
| return result; |
| } |
| }; |
| |
| var find = /[!'()~]|%20/g; |
| |
| var replace = { |
| '!': '%21', |
| "'": '%27', |
| '(': '%28', |
| ')': '%29', |
| '~': '%7E', |
| '%20': '+' |
| }; |
| |
| var replacer = function (match) { |
| return replace[match]; |
| }; |
| |
| var serialize = function (it) { |
| return encodeURIComponent(it).replace(find, replacer); |
| }; |
| |
| var parseSearchParams = function (result, query) { |
| if (query) { |
| var attributes = query.split('&'); |
| var index = 0; |
| var attribute, entry; |
| while (index < attributes.length) { |
| attribute = attributes[index++]; |
| if (attribute.length) { |
| entry = attribute.split('='); |
| result.push({ |
| key: deserialize(entry.shift()), |
| value: deserialize(entry.join('=')) |
| }); |
| } |
| } |
| } |
| }; |
| |
| var updateSearchParams = function (query) { |
| this.entries.length = 0; |
| parseSearchParams(this.entries, query); |
| }; |
| |
| var validateArgumentsLength = function (passed, required) { |
| if (passed < required) throw TypeError('Not enough arguments'); |
| }; |
| |
| var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { |
| setInternalState(this, { |
| type: URL_SEARCH_PARAMS_ITERATOR, |
| iterator: getIterator(getInternalParamsState(params).entries), |
| kind: kind |
| }); |
| }, 'Iterator', function next() { |
| var state = getInternalIteratorState(this); |
| var kind = state.kind; |
| var step = state.iterator.next(); |
| var entry = step.value; |
| if (!step.done) { |
| step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value]; |
| } return step; |
| }); |
| |
| // `URLSearchParams` constructor |
| // https://url.spec.whatwg.org/#interface-urlsearchparams |
| var URLSearchParamsConstructor = function URLSearchParams(/* init */) { |
| anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS); |
| var init = arguments.length > 0 ? arguments[0] : undefined; |
| var that = this; |
| var entries = []; |
| var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key; |
| |
| setInternalState(that, { |
| type: URL_SEARCH_PARAMS, |
| entries: entries, |
| updateURL: function () { /* empty */ }, |
| updateSearchParams: updateSearchParams |
| }); |
| |
| if (init !== undefined) { |
| if (isObject(init)) { |
| iteratorMethod = getIteratorMethod(init); |
| if (typeof iteratorMethod === 'function') { |
| iterator = iteratorMethod.call(init); |
| next = iterator.next; |
| while (!(step = next.call(iterator)).done) { |
| entryIterator = getIterator(anObject(step.value)); |
| entryNext = entryIterator.next; |
| if ( |
| (first = entryNext.call(entryIterator)).done || |
| (second = entryNext.call(entryIterator)).done || |
| !entryNext.call(entryIterator).done |
| ) throw TypeError('Expected sequence with length 2'); |
| entries.push({ key: first.value + '', value: second.value + '' }); |
| } |
| } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' }); |
| } else { |
| parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + ''); |
| } |
| } |
| }; |
| |
| var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; |
| |
| redefineAll(URLSearchParamsPrototype, { |
| // `URLSearchParams.prototype.appent` method |
| // https://url.spec.whatwg.org/#dom-urlsearchparams-append |
| append: function append(name, value) { |
| validateArgumentsLength(arguments.length, 2); |
| var state = getInternalParamsState(this); |
| state.entries.push({ key: name + '', value: value + '' }); |
| state.updateURL(); |
| }, |
| // `URLSearchParams.prototype.delete` method |
| // https://url.spec.whatwg.org/#dom-urlsearchparams-delete |
| 'delete': function (name) { |
| validateArgumentsLength(arguments.length, 1); |
| var state = getInternalParamsState(this); |
| var entries = state.entries; |
| var key = name + ''; |
| var index = 0; |
| while (index < entries.length) { |
| if (entries[index].key === key) entries.splice(index, 1); |
| else index++; |
| } |
| state.updateURL(); |
| }, |
| // `URLSearchParams.prototype.get` method |
| // https://url.spec.whatwg.org/#dom-urlsearchparams-get |
| get: function get(name) { |
| validateArgumentsLength(arguments.length, 1); |
| var entries = getInternalParamsState(this).entries; |
| var key = name + ''; |
| var index = 0; |
| for (; index < entries.length; index++) { |
| if (entries[index].key === key) return entries[index].value; |
| } |
| return null; |
| }, |
| // `URLSearchParams.prototype.getAll` method |
| // https://url.spec.whatwg.org/#dom-urlsearchparams-getall |
| getAll: function getAll(name) { |
| validateArgumentsLength(arguments.length, 1); |
| var entries = getInternalParamsState(this).entries; |
| var key = name + ''; |
| var result = []; |
| var index = 0; |
| for (; index < entries.length; index++) { |
| if (entries[index].key === key) result.push(entries[index].value); |
| } |
| return result; |
| }, |
| // `URLSearchParams.prototype.has` method |
| // https://url.spec.whatwg.org/#dom-urlsearchparams-has |
| has: function has(name) { |
| validateArgumentsLength(arguments.length, 1); |
| var entries = getInternalParamsState(this).entries; |
| var key = name + ''; |
| var index = 0; |
| while (index < entries.length) { |
| if (entries[index++].key === key) return true; |
| } |
| return false; |
| }, |
| // `URLSearchParams.prototype.set` method |
| // https://url.spec.whatwg.org/#dom-urlsearchparams-set |
| set: function set(name, value) { |
| validateArgumentsLength(arguments.length, 1); |
| var state = getInternalParamsState(this); |
| var entries = state.entries; |
| var found = false; |
| var key = name + ''; |
| var val = value + ''; |
| var index = 0; |
| var entry; |
| for (; index < entries.length; index++) { |
| entry = entries[index]; |
| if (entry.key === key) { |
| if (found) entries.splice(index--, 1); |
| else { |
| found = true; |
| entry.value = val; |
| } |
| } |
| } |
| if (!found) entries.push({ key: key, value: val }); |
| state.updateURL(); |
| }, |
| // `URLSearchParams.prototype.sort` method |
| // https://url.spec.whatwg.org/#dom-urlsearchparams-sort |
| sort: function sort() { |
| var state = getInternalParamsState(this); |
| var entries = state.entries; |
| // Array#sort is not stable in some engines |
| var slice = entries.slice(); |
| var entry, entriesIndex, sliceIndex; |
| entries.length = 0; |
| for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) { |
| entry = slice[sliceIndex]; |
| for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) { |
| if (entries[entriesIndex].key > entry.key) { |
| entries.splice(entriesIndex, 0, entry); |
| break; |
| } |
| } |
| if (entriesIndex === sliceIndex) entries.push(entry); |
| } |
| state.updateURL(); |
| }, |
| // `URLSearchParams.prototype.forEach` method |
| forEach: function forEach(callback /* , thisArg */) { |
| var entries = getInternalParamsState(this).entries; |
| var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3); |
| var index = 0; |
| var entry; |
| while (index < entries.length) { |
| entry = entries[index++]; |
| boundFunction(entry.value, entry.key, this); |
| } |
| }, |
| // `URLSearchParams.prototype.keys` method |
| keys: function keys() { |
| return new URLSearchParamsIterator(this, 'keys'); |
| }, |
| // `URLSearchParams.prototype.values` method |
| values: function values() { |
| return new URLSearchParamsIterator(this, 'values'); |
| }, |
| // `URLSearchParams.prototype.entries` method |
| entries: function entries() { |
| return new URLSearchParamsIterator(this, 'entries'); |
| } |
| }, { enumerable: true }); |
| |
| // `URLSearchParams.prototype[@@iterator]` method |
| redefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries); |
| |
| // `URLSearchParams.prototype.toString` method |
| // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior |
| redefine(URLSearchParamsPrototype, 'toString', function toString() { |
| var entries = getInternalParamsState(this).entries; |
| var result = []; |
| var index = 0; |
| var entry; |
| while (index < entries.length) { |
| entry = entries[index++]; |
| result.push(serialize(entry.key) + '=' + serialize(entry.value)); |
| } return result.join('&'); |
| }, { enumerable: true }); |
| |
| setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS); |
| |
| $({ global: true, forced: !USE_NATIVE_URL }, { |
| URLSearchParams: URLSearchParamsConstructor |
| }); |
| |
| // Wrap `fetch` for correct work with polyfilled `URLSearchParams` |
| // https://github.com/zloirock/core-js/issues/674 |
| if (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') { |
| $({ global: true, enumerable: true, forced: true }, { |
| fetch: function fetch(input /* , init */) { |
| var args = [input]; |
| var init, body, headers; |
| if (arguments.length > 1) { |
| init = arguments[1]; |
| if (isObject(init)) { |
| body = init.body; |
| if (classof(body) === URL_SEARCH_PARAMS) { |
| headers = new Headers(init.headers); |
| if (!headers.has('content-type')) { |
| headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); |
| } |
| init = create(init, { |
| body: createPropertyDescriptor(0, String(body)), |
| headers: createPropertyDescriptor(0, headers) |
| }); |
| } |
| } |
| args.push(init); |
| } return $fetch.apply(this, args); |
| } |
| }); |
| } |
| |
| module.exports = { |
| URLSearchParams: URLSearchParamsConstructor, |
| getState: getInternalParamsState |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/web.url.js": |
| /*!*******************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/web.url.js ***! |
| \*******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` |
| __webpack_require__(/*! ../modules/es.string.iterator */ "../node_modules/core-js-pure/modules/es.string.iterator.js"); |
| var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js-pure/internals/export.js"); |
| var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js-pure/internals/descriptors.js"); |
| var USE_NATIVE_URL = __webpack_require__(/*! ../internals/native-url */ "../node_modules/core-js-pure/internals/native-url.js"); |
| var global = __webpack_require__(/*! ../internals/global */ "../node_modules/core-js-pure/internals/global.js"); |
| var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "../node_modules/core-js-pure/internals/object-define-properties.js"); |
| var redefine = __webpack_require__(/*! ../internals/redefine */ "../node_modules/core-js-pure/internals/redefine.js"); |
| var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../node_modules/core-js-pure/internals/an-instance.js"); |
| var has = __webpack_require__(/*! ../internals/has */ "../node_modules/core-js-pure/internals/has.js"); |
| var assign = __webpack_require__(/*! ../internals/object-assign */ "../node_modules/core-js-pure/internals/object-assign.js"); |
| var arrayFrom = __webpack_require__(/*! ../internals/array-from */ "../node_modules/core-js-pure/internals/array-from.js"); |
| var codeAt = __webpack_require__(/*! ../internals/string-multibyte */ "../node_modules/core-js-pure/internals/string-multibyte.js").codeAt; |
| var toASCII = __webpack_require__(/*! ../internals/punycode-to-ascii */ "../node_modules/core-js-pure/internals/punycode-to-ascii.js"); |
| var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../node_modules/core-js-pure/internals/set-to-string-tag.js"); |
| var URLSearchParamsModule = __webpack_require__(/*! ../modules/web.url-search-params */ "../node_modules/core-js-pure/modules/web.url-search-params.js"); |
| var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../node_modules/core-js-pure/internals/internal-state.js"); |
| |
| var NativeURL = global.URL; |
| var URLSearchParams = URLSearchParamsModule.URLSearchParams; |
| var getInternalSearchParamsState = URLSearchParamsModule.getState; |
| var setInternalState = InternalStateModule.set; |
| var getInternalURLState = InternalStateModule.getterFor('URL'); |
| var floor = Math.floor; |
| var pow = Math.pow; |
| |
| var INVALID_AUTHORITY = 'Invalid authority'; |
| var INVALID_SCHEME = 'Invalid scheme'; |
| var INVALID_HOST = 'Invalid host'; |
| var INVALID_PORT = 'Invalid port'; |
| |
| var ALPHA = /[A-Za-z]/; |
| var ALPHANUMERIC = /[\d+\-.A-Za-z]/; |
| var DIGIT = /\d/; |
| var HEX_START = /^(0x|0X)/; |
| var OCT = /^[0-7]+$/; |
| var DEC = /^\d+$/; |
| var HEX = /^[\dA-Fa-f]+$/; |
| // eslint-disable-next-line no-control-regex |
| var FORBIDDEN_HOST_CODE_POINT = /[\u0000\u0009\u000A\u000D #%/:?@[\\]]/; |
| // eslint-disable-next-line no-control-regex |
| var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\u0000\u0009\u000A\u000D #/:?@[\\]]/; |
| // eslint-disable-next-line no-control-regex |
| var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g; |
| // eslint-disable-next-line no-control-regex |
| var TAB_AND_NEW_LINE = /[\u0009\u000A\u000D]/g; |
| var EOF; |
| |
| var parseHost = function (url, input) { |
| var result, codePoints, index; |
| if (input.charAt(0) == '[') { |
| if (input.charAt(input.length - 1) != ']') return INVALID_HOST; |
| result = parseIPv6(input.slice(1, -1)); |
| if (!result) return INVALID_HOST; |
| url.host = result; |
| // opaque host |
| } else if (!isSpecial(url)) { |
| if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST; |
| result = ''; |
| codePoints = arrayFrom(input); |
| for (index = 0; index < codePoints.length; index++) { |
| result += percentEncode(codePoints[index], C0ControlPercentEncodeSet); |
| } |
| url.host = result; |
| } else { |
| input = toASCII(input); |
| if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST; |
| result = parseIPv4(input); |
| if (result === null) return INVALID_HOST; |
| url.host = result; |
| } |
| }; |
| |
| var parseIPv4 = function (input) { |
| var parts = input.split('.'); |
| var partsLength, numbers, index, part, radix, number, ipv4; |
| if (parts.length && parts[parts.length - 1] == '') { |
| parts.pop(); |
| } |
| partsLength = parts.length; |
| if (partsLength > 4) return input; |
| numbers = []; |
| for (index = 0; index < partsLength; index++) { |
| part = parts[index]; |
| if (part == '') return input; |
| radix = 10; |
| if (part.length > 1 && part.charAt(0) == '0') { |
| radix = HEX_START.test(part) ? 16 : 8; |
| part = part.slice(radix == 8 ? 1 : 2); |
| } |
| if (part === '') { |
| number = 0; |
| } else { |
| if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input; |
| number = parseInt(part, radix); |
| } |
| numbers.push(number); |
| } |
| for (index = 0; index < partsLength; index++) { |
| number = numbers[index]; |
| if (index == partsLength - 1) { |
| if (number >= pow(256, 5 - partsLength)) return null; |
| } else if (number > 255) return null; |
| } |
| ipv4 = numbers.pop(); |
| for (index = 0; index < numbers.length; index++) { |
| ipv4 += numbers[index] * pow(256, 3 - index); |
| } |
| return ipv4; |
| }; |
| |
| // eslint-disable-next-line max-statements |
| var parseIPv6 = function (input) { |
| var address = [0, 0, 0, 0, 0, 0, 0, 0]; |
| var pieceIndex = 0; |
| var compress = null; |
| var pointer = 0; |
| var value, length, numbersSeen, ipv4Piece, number, swaps, swap; |
| |
| var char = function () { |
| return input.charAt(pointer); |
| }; |
| |
| if (char() == ':') { |
| if (input.charAt(1) != ':') return; |
| pointer += 2; |
| pieceIndex++; |
| compress = pieceIndex; |
| } |
| while (char()) { |
| if (pieceIndex == 8) return; |
| if (char() == ':') { |
| if (compress !== null) return; |
| pointer++; |
| pieceIndex++; |
| compress = pieceIndex; |
| continue; |
| } |
| value = length = 0; |
| while (length < 4 && HEX.test(char())) { |
| value = value * 16 + parseInt(char(), 16); |
| pointer++; |
| length++; |
| } |
| if (char() == '.') { |
| if (length == 0) return; |
| pointer -= length; |
| if (pieceIndex > 6) return; |
| numbersSeen = 0; |
| while (char()) { |
| ipv4Piece = null; |
| if (numbersSeen > 0) { |
| if (char() == '.' && numbersSeen < 4) pointer++; |
| else return; |
| } |
| if (!DIGIT.test(char())) return; |
| while (DIGIT.test(char())) { |
| number = parseInt(char(), 10); |
| if (ipv4Piece === null) ipv4Piece = number; |
| else if (ipv4Piece == 0) return; |
| else ipv4Piece = ipv4Piece * 10 + number; |
| if (ipv4Piece > 255) return; |
| pointer++; |
| } |
| address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece; |
| numbersSeen++; |
| if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++; |
| } |
| if (numbersSeen != 4) return; |
| break; |
| } else if (char() == ':') { |
| pointer++; |
| if (!char()) return; |
| } else if (char()) return; |
| address[pieceIndex++] = value; |
| } |
| if (compress !== null) { |
| swaps = pieceIndex - compress; |
| pieceIndex = 7; |
| while (pieceIndex != 0 && swaps > 0) { |
| swap = address[pieceIndex]; |
| address[pieceIndex--] = address[compress + swaps - 1]; |
| address[compress + --swaps] = swap; |
| } |
| } else if (pieceIndex != 8) return; |
| return address; |
| }; |
| |
| var findLongestZeroSequence = function (ipv6) { |
| var maxIndex = null; |
| var maxLength = 1; |
| var currStart = null; |
| var currLength = 0; |
| var index = 0; |
| for (; index < 8; index++) { |
| if (ipv6[index] !== 0) { |
| if (currLength > maxLength) { |
| maxIndex = currStart; |
| maxLength = currLength; |
| } |
| currStart = null; |
| currLength = 0; |
| } else { |
| if (currStart === null) currStart = index; |
| ++currLength; |
| } |
| } |
| if (currLength > maxLength) { |
| maxIndex = currStart; |
| maxLength = currLength; |
| } |
| return maxIndex; |
| }; |
| |
| var serializeHost = function (host) { |
| var result, index, compress, ignore0; |
| // ipv4 |
| if (typeof host == 'number') { |
| result = []; |
| for (index = 0; index < 4; index++) { |
| result.unshift(host % 256); |
| host = floor(host / 256); |
| } return result.join('.'); |
| // ipv6 |
| } else if (typeof host == 'object') { |
| result = ''; |
| compress = findLongestZeroSequence(host); |
| for (index = 0; index < 8; index++) { |
| if (ignore0 && host[index] === 0) continue; |
| if (ignore0) ignore0 = false; |
| if (compress === index) { |
| result += index ? ':' : '::'; |
| ignore0 = true; |
| } else { |
| result += host[index].toString(16); |
| if (index < 7) result += ':'; |
| } |
| } |
| return '[' + result + ']'; |
| } return host; |
| }; |
| |
| var C0ControlPercentEncodeSet = {}; |
| var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, { |
| ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1 |
| }); |
| var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, { |
| '#': 1, '?': 1, '{': 1, '}': 1 |
| }); |
| var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, { |
| '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1 |
| }); |
| |
| var percentEncode = function (char, set) { |
| var code = codeAt(char, 0); |
| return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char); |
| }; |
| |
| var specialSchemes = { |
| ftp: 21, |
| file: null, |
| http: 80, |
| https: 443, |
| ws: 80, |
| wss: 443 |
| }; |
| |
| var isSpecial = function (url) { |
| return has(specialSchemes, url.scheme); |
| }; |
| |
| var includesCredentials = function (url) { |
| return url.username != '' || url.password != ''; |
| }; |
| |
| var cannotHaveUsernamePasswordPort = function (url) { |
| return !url.host || url.cannotBeABaseURL || url.scheme == 'file'; |
| }; |
| |
| var isWindowsDriveLetter = function (string, normalized) { |
| var second; |
| return string.length == 2 && ALPHA.test(string.charAt(0)) |
| && ((second = string.charAt(1)) == ':' || (!normalized && second == '|')); |
| }; |
| |
| var startsWithWindowsDriveLetter = function (string) { |
| var third; |
| return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && ( |
| string.length == 2 || |
| ((third = string.charAt(2)) === '/' || third === '\\' || third === '?' || third === '#') |
| ); |
| }; |
| |
| var shortenURLsPath = function (url) { |
| var path = url.path; |
| var pathSize = path.length; |
| if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) { |
| path.pop(); |
| } |
| }; |
| |
| var isSingleDot = function (segment) { |
| return segment === '.' || segment.toLowerCase() === '%2e'; |
| }; |
| |
| var isDoubleDot = function (segment) { |
| segment = segment.toLowerCase(); |
| return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e'; |
| }; |
| |
| // States: |
| var SCHEME_START = {}; |
| var SCHEME = {}; |
| var NO_SCHEME = {}; |
| var SPECIAL_RELATIVE_OR_AUTHORITY = {}; |
| var PATH_OR_AUTHORITY = {}; |
| var RELATIVE = {}; |
| var RELATIVE_SLASH = {}; |
| var SPECIAL_AUTHORITY_SLASHES = {}; |
| var SPECIAL_AUTHORITY_IGNORE_SLASHES = {}; |
| var AUTHORITY = {}; |
| var HOST = {}; |
| var HOSTNAME = {}; |
| var PORT = {}; |
| var FILE = {}; |
| var FILE_SLASH = {}; |
| var FILE_HOST = {}; |
| var PATH_START = {}; |
| var PATH = {}; |
| var CANNOT_BE_A_BASE_URL_PATH = {}; |
| var QUERY = {}; |
| var FRAGMENT = {}; |
| |
| // eslint-disable-next-line max-statements |
| var parseURL = function (url, input, stateOverride, base) { |
| var state = stateOverride || SCHEME_START; |
| var pointer = 0; |
| var buffer = ''; |
| var seenAt = false; |
| var seenBracket = false; |
| var seenPasswordToken = false; |
| var codePoints, char, bufferCodePoints, failure; |
| |
| if (!stateOverride) { |
| url.scheme = ''; |
| url.username = ''; |
| url.password = ''; |
| url.host = null; |
| url.port = null; |
| url.path = []; |
| url.query = null; |
| url.fragment = null; |
| url.cannotBeABaseURL = false; |
| input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, ''); |
| } |
| |
| input = input.replace(TAB_AND_NEW_LINE, ''); |
| |
| codePoints = arrayFrom(input); |
| |
| while (pointer <= codePoints.length) { |
| char = codePoints[pointer]; |
| switch (state) { |
| case SCHEME_START: |
| if (char && ALPHA.test(char)) { |
| buffer += char.toLowerCase(); |
| state = SCHEME; |
| } else if (!stateOverride) { |
| state = NO_SCHEME; |
| continue; |
| } else return INVALID_SCHEME; |
| break; |
| |
| case SCHEME: |
| if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) { |
| buffer += char.toLowerCase(); |
| } else if (char == ':') { |
| if (stateOverride && ( |
| (isSpecial(url) != has(specialSchemes, buffer)) || |
| (buffer == 'file' && (includesCredentials(url) || url.port !== null)) || |
| (url.scheme == 'file' && !url.host) |
| )) return; |
| url.scheme = buffer; |
| if (stateOverride) { |
| if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null; |
| return; |
| } |
| buffer = ''; |
| if (url.scheme == 'file') { |
| state = FILE; |
| } else if (isSpecial(url) && base && base.scheme == url.scheme) { |
| state = SPECIAL_RELATIVE_OR_AUTHORITY; |
| } else if (isSpecial(url)) { |
| state = SPECIAL_AUTHORITY_SLASHES; |
| } else if (codePoints[pointer + 1] == '/') { |
| state = PATH_OR_AUTHORITY; |
| pointer++; |
| } else { |
| url.cannotBeABaseURL = true; |
| url.path.push(''); |
| state = CANNOT_BE_A_BASE_URL_PATH; |
| } |
| } else if (!stateOverride) { |
| buffer = ''; |
| state = NO_SCHEME; |
| pointer = 0; |
| continue; |
| } else return INVALID_SCHEME; |
| break; |
| |
| case NO_SCHEME: |
| if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME; |
| if (base.cannotBeABaseURL && char == '#') { |
| url.scheme = base.scheme; |
| url.path = base.path.slice(); |
| url.query = base.query; |
| url.fragment = ''; |
| url.cannotBeABaseURL = true; |
| state = FRAGMENT; |
| break; |
| } |
| state = base.scheme == 'file' ? FILE : RELATIVE; |
| continue; |
| |
| case SPECIAL_RELATIVE_OR_AUTHORITY: |
| if (char == '/' && codePoints[pointer + 1] == '/') { |
| state = SPECIAL_AUTHORITY_IGNORE_SLASHES; |
| pointer++; |
| } else { |
| state = RELATIVE; |
| continue; |
| } break; |
| |
| case PATH_OR_AUTHORITY: |
| if (char == '/') { |
| state = AUTHORITY; |
| break; |
| } else { |
| state = PATH; |
| continue; |
| } |
| |
| case RELATIVE: |
| url.scheme = base.scheme; |
| if (char == EOF) { |
| url.username = base.username; |
| url.password = base.password; |
| url.host = base.host; |
| url.port = base.port; |
| url.path = base.path.slice(); |
| url.query = base.query; |
| } else if (char == '/' || (char == '\\' && isSpecial(url))) { |
| state = RELATIVE_SLASH; |
| } else if (char == '?') { |
| url.username = base.username; |
| url.password = base.password; |
| url.host = base.host; |
| url.port = base.port; |
| url.path = base.path.slice(); |
| url.query = ''; |
| state = QUERY; |
| } else if (char == '#') { |
| url.username = base.username; |
| url.password = base.password; |
| url.host = base.host; |
| url.port = base.port; |
| url.path = base.path.slice(); |
| url.query = base.query; |
| url.fragment = ''; |
| state = FRAGMENT; |
| } else { |
| url.username = base.username; |
| url.password = base.password; |
| url.host = base.host; |
| url.port = base.port; |
| url.path = base.path.slice(); |
| url.path.pop(); |
| state = PATH; |
| continue; |
| } break; |
| |
| case RELATIVE_SLASH: |
| if (isSpecial(url) && (char == '/' || char == '\\')) { |
| state = SPECIAL_AUTHORITY_IGNORE_SLASHES; |
| } else if (char == '/') { |
| state = AUTHORITY; |
| } else { |
| url.username = base.username; |
| url.password = base.password; |
| url.host = base.host; |
| url.port = base.port; |
| state = PATH; |
| continue; |
| } break; |
| |
| case SPECIAL_AUTHORITY_SLASHES: |
| state = SPECIAL_AUTHORITY_IGNORE_SLASHES; |
| if (char != '/' || buffer.charAt(pointer + 1) != '/') continue; |
| pointer++; |
| break; |
| |
| case SPECIAL_AUTHORITY_IGNORE_SLASHES: |
| if (char != '/' && char != '\\') { |
| state = AUTHORITY; |
| continue; |
| } break; |
| |
| case AUTHORITY: |
| if (char == '@') { |
| if (seenAt) buffer = '%40' + buffer; |
| seenAt = true; |
| bufferCodePoints = arrayFrom(buffer); |
| for (var i = 0; i < bufferCodePoints.length; i++) { |
| var codePoint = bufferCodePoints[i]; |
| if (codePoint == ':' && !seenPasswordToken) { |
| seenPasswordToken = true; |
| continue; |
| } |
| var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet); |
| if (seenPasswordToken) url.password += encodedCodePoints; |
| else url.username += encodedCodePoints; |
| } |
| buffer = ''; |
| } else if ( |
| char == EOF || char == '/' || char == '?' || char == '#' || |
| (char == '\\' && isSpecial(url)) |
| ) { |
| if (seenAt && buffer == '') return INVALID_AUTHORITY; |
| pointer -= arrayFrom(buffer).length + 1; |
| buffer = ''; |
| state = HOST; |
| } else buffer += char; |
| break; |
| |
| case HOST: |
| case HOSTNAME: |
| if (stateOverride && url.scheme == 'file') { |
| state = FILE_HOST; |
| continue; |
| } else if (char == ':' && !seenBracket) { |
| if (buffer == '') return INVALID_HOST; |
| failure = parseHost(url, buffer); |
| if (failure) return failure; |
| buffer = ''; |
| state = PORT; |
| if (stateOverride == HOSTNAME) return; |
| } else if ( |
| char == EOF || char == '/' || char == '?' || char == '#' || |
| (char == '\\' && isSpecial(url)) |
| ) { |
| if (isSpecial(url) && buffer == '') return INVALID_HOST; |
| if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return; |
| failure = parseHost(url, buffer); |
| if (failure) return failure; |
| buffer = ''; |
| state = PATH_START; |
| if (stateOverride) return; |
| continue; |
| } else { |
| if (char == '[') seenBracket = true; |
| else if (char == ']') seenBracket = false; |
| buffer += char; |
| } break; |
| |
| case PORT: |
| if (DIGIT.test(char)) { |
| buffer += char; |
| } else if ( |
| char == EOF || char == '/' || char == '?' || char == '#' || |
| (char == '\\' && isSpecial(url)) || |
| stateOverride |
| ) { |
| if (buffer != '') { |
| var port = parseInt(buffer, 10); |
| if (port > 0xFFFF) return INVALID_PORT; |
| url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port; |
| buffer = ''; |
| } |
| if (stateOverride) return; |
| state = PATH_START; |
| continue; |
| } else return INVALID_PORT; |
| break; |
| |
| case FILE: |
| url.scheme = 'file'; |
| if (char == '/' || char == '\\') state = FILE_SLASH; |
| else if (base && base.scheme == 'file') { |
| if (char == EOF) { |
| url.host = base.host; |
| url.path = base.path.slice(); |
| url.query = base.query; |
| } else if (char == '?') { |
| url.host = base.host; |
| url.path = base.path.slice(); |
| url.query = ''; |
| state = QUERY; |
| } else if (char == '#') { |
| url.host = base.host; |
| url.path = base.path.slice(); |
| url.query = base.query; |
| url.fragment = ''; |
| state = FRAGMENT; |
| } else { |
| if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { |
| url.host = base.host; |
| url.path = base.path.slice(); |
| shortenURLsPath(url); |
| } |
| state = PATH; |
| continue; |
| } |
| } else { |
| state = PATH; |
| continue; |
| } break; |
| |
| case FILE_SLASH: |
| if (char == '/' || char == '\\') { |
| state = FILE_HOST; |
| break; |
| } |
| if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { |
| if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]); |
| else url.host = base.host; |
| } |
| state = PATH; |
| continue; |
| |
| case FILE_HOST: |
| if (char == EOF || char == '/' || char == '\\' || char == '?' || char == '#') { |
| if (!stateOverride && isWindowsDriveLetter(buffer)) { |
| state = PATH; |
| } else if (buffer == '') { |
| url.host = ''; |
| if (stateOverride) return; |
| state = PATH_START; |
| } else { |
| failure = parseHost(url, buffer); |
| if (failure) return failure; |
| if (url.host == 'localhost') url.host = ''; |
| if (stateOverride) return; |
| buffer = ''; |
| state = PATH_START; |
| } continue; |
| } else buffer += char; |
| break; |
| |
| case PATH_START: |
| if (isSpecial(url)) { |
| state = PATH; |
| if (char != '/' && char != '\\') continue; |
| } else if (!stateOverride && char == '?') { |
| url.query = ''; |
| state = QUERY; |
| } else if (!stateOverride && char == '#') { |
| url.fragment = ''; |
| state = FRAGMENT; |
| } else if (char != EOF) { |
| state = PATH; |
| if (char != '/') continue; |
| } break; |
| |
| case PATH: |
| if ( |
| char == EOF || char == '/' || |
| (char == '\\' && isSpecial(url)) || |
| (!stateOverride && (char == '?' || char == '#')) |
| ) { |
| if (isDoubleDot(buffer)) { |
| shortenURLsPath(url); |
| if (char != '/' && !(char == '\\' && isSpecial(url))) { |
| url.path.push(''); |
| } |
| } else if (isSingleDot(buffer)) { |
| if (char != '/' && !(char == '\\' && isSpecial(url))) { |
| url.path.push(''); |
| } |
| } else { |
| if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) { |
| if (url.host) url.host = ''; |
| buffer = buffer.charAt(0) + ':'; // normalize windows drive letter |
| } |
| url.path.push(buffer); |
| } |
| buffer = ''; |
| if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) { |
| while (url.path.length > 1 && url.path[0] === '') { |
| url.path.shift(); |
| } |
| } |
| if (char == '?') { |
| url.query = ''; |
| state = QUERY; |
| } else if (char == '#') { |
| url.fragment = ''; |
| state = FRAGMENT; |
| } |
| } else { |
| buffer += percentEncode(char, pathPercentEncodeSet); |
| } break; |
| |
| case CANNOT_BE_A_BASE_URL_PATH: |
| if (char == '?') { |
| url.query = ''; |
| state = QUERY; |
| } else if (char == '#') { |
| url.fragment = ''; |
| state = FRAGMENT; |
| } else if (char != EOF) { |
| url.path[0] += percentEncode(char, C0ControlPercentEncodeSet); |
| } break; |
| |
| case QUERY: |
| if (!stateOverride && char == '#') { |
| url.fragment = ''; |
| state = FRAGMENT; |
| } else if (char != EOF) { |
| if (char == "'" && isSpecial(url)) url.query += '%27'; |
| else if (char == '#') url.query += '%23'; |
| else url.query += percentEncode(char, C0ControlPercentEncodeSet); |
| } break; |
| |
| case FRAGMENT: |
| if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet); |
| break; |
| } |
| |
| pointer++; |
| } |
| }; |
| |
| // `URL` constructor |
| // https://url.spec.whatwg.org/#url-class |
| var URLConstructor = function URL(url /* , base */) { |
| var that = anInstance(this, URLConstructor, 'URL'); |
| var base = arguments.length > 1 ? arguments[1] : undefined; |
| var urlString = String(url); |
| var state = setInternalState(that, { type: 'URL' }); |
| var baseState, failure; |
| if (base !== undefined) { |
| if (base instanceof URLConstructor) baseState = getInternalURLState(base); |
| else { |
| failure = parseURL(baseState = {}, String(base)); |
| if (failure) throw TypeError(failure); |
| } |
| } |
| failure = parseURL(state, urlString, null, baseState); |
| if (failure) throw TypeError(failure); |
| var searchParams = state.searchParams = new URLSearchParams(); |
| var searchParamsState = getInternalSearchParamsState(searchParams); |
| searchParamsState.updateSearchParams(state.query); |
| searchParamsState.updateURL = function () { |
| state.query = String(searchParams) || null; |
| }; |
| if (!DESCRIPTORS) { |
| that.href = serializeURL.call(that); |
| that.origin = getOrigin.call(that); |
| that.protocol = getProtocol.call(that); |
| that.username = getUsername.call(that); |
| that.password = getPassword.call(that); |
| that.host = getHost.call(that); |
| that.hostname = getHostname.call(that); |
| that.port = getPort.call(that); |
| that.pathname = getPathname.call(that); |
| that.search = getSearch.call(that); |
| that.searchParams = getSearchParams.call(that); |
| that.hash = getHash.call(that); |
| } |
| }; |
| |
| var URLPrototype = URLConstructor.prototype; |
| |
| var serializeURL = function () { |
| var url = getInternalURLState(this); |
| var scheme = url.scheme; |
| var username = url.username; |
| var password = url.password; |
| var host = url.host; |
| var port = url.port; |
| var path = url.path; |
| var query = url.query; |
| var fragment = url.fragment; |
| var output = scheme + ':'; |
| if (host !== null) { |
| output += '//'; |
| if (includesCredentials(url)) { |
| output += username + (password ? ':' + password : '') + '@'; |
| } |
| output += serializeHost(host); |
| if (port !== null) output += ':' + port; |
| } else if (scheme == 'file') output += '//'; |
| output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; |
| if (query !== null) output += '?' + query; |
| if (fragment !== null) output += '#' + fragment; |
| return output; |
| }; |
| |
| var getOrigin = function () { |
| var url = getInternalURLState(this); |
| var scheme = url.scheme; |
| var port = url.port; |
| if (scheme == 'blob') try { |
| return new URL(scheme.path[0]).origin; |
| } catch (error) { |
| return 'null'; |
| } |
| if (scheme == 'file' || !isSpecial(url)) return 'null'; |
| return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : ''); |
| }; |
| |
| var getProtocol = function () { |
| return getInternalURLState(this).scheme + ':'; |
| }; |
| |
| var getUsername = function () { |
| return getInternalURLState(this).username; |
| }; |
| |
| var getPassword = function () { |
| return getInternalURLState(this).password; |
| }; |
| |
| var getHost = function () { |
| var url = getInternalURLState(this); |
| var host = url.host; |
| var port = url.port; |
| return host === null ? '' |
| : port === null ? serializeHost(host) |
| : serializeHost(host) + ':' + port; |
| }; |
| |
| var getHostname = function () { |
| var host = getInternalURLState(this).host; |
| return host === null ? '' : serializeHost(host); |
| }; |
| |
| var getPort = function () { |
| var port = getInternalURLState(this).port; |
| return port === null ? '' : String(port); |
| }; |
| |
| var getPathname = function () { |
| var url = getInternalURLState(this); |
| var path = url.path; |
| return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; |
| }; |
| |
| var getSearch = function () { |
| var query = getInternalURLState(this).query; |
| return query ? '?' + query : ''; |
| }; |
| |
| var getSearchParams = function () { |
| return getInternalURLState(this).searchParams; |
| }; |
| |
| var getHash = function () { |
| var fragment = getInternalURLState(this).fragment; |
| return fragment ? '#' + fragment : ''; |
| }; |
| |
| var accessorDescriptor = function (getter, setter) { |
| return { get: getter, set: setter, configurable: true, enumerable: true }; |
| }; |
| |
| if (DESCRIPTORS) { |
| defineProperties(URLPrototype, { |
| // `URL.prototype.href` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-href |
| href: accessorDescriptor(serializeURL, function (href) { |
| var url = getInternalURLState(this); |
| var urlString = String(href); |
| var failure = parseURL(url, urlString); |
| if (failure) throw TypeError(failure); |
| getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); |
| }), |
| // `URL.prototype.origin` getter |
| // https://url.spec.whatwg.org/#dom-url-origin |
| origin: accessorDescriptor(getOrigin), |
| // `URL.prototype.protocol` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-protocol |
| protocol: accessorDescriptor(getProtocol, function (protocol) { |
| var url = getInternalURLState(this); |
| parseURL(url, String(protocol) + ':', SCHEME_START); |
| }), |
| // `URL.prototype.username` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-username |
| username: accessorDescriptor(getUsername, function (username) { |
| var url = getInternalURLState(this); |
| var codePoints = arrayFrom(String(username)); |
| if (cannotHaveUsernamePasswordPort(url)) return; |
| url.username = ''; |
| for (var i = 0; i < codePoints.length; i++) { |
| url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet); |
| } |
| }), |
| // `URL.prototype.password` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-password |
| password: accessorDescriptor(getPassword, function (password) { |
| var url = getInternalURLState(this); |
| var codePoints = arrayFrom(String(password)); |
| if (cannotHaveUsernamePasswordPort(url)) return; |
| url.password = ''; |
| for (var i = 0; i < codePoints.length; i++) { |
| url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet); |
| } |
| }), |
| // `URL.prototype.host` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-host |
| host: accessorDescriptor(getHost, function (host) { |
| var url = getInternalURLState(this); |
| if (url.cannotBeABaseURL) return; |
| parseURL(url, String(host), HOST); |
| }), |
| // `URL.prototype.hostname` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-hostname |
| hostname: accessorDescriptor(getHostname, function (hostname) { |
| var url = getInternalURLState(this); |
| if (url.cannotBeABaseURL) return; |
| parseURL(url, String(hostname), HOSTNAME); |
| }), |
| // `URL.prototype.port` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-port |
| port: accessorDescriptor(getPort, function (port) { |
| var url = getInternalURLState(this); |
| if (cannotHaveUsernamePasswordPort(url)) return; |
| port = String(port); |
| if (port == '') url.port = null; |
| else parseURL(url, port, PORT); |
| }), |
| // `URL.prototype.pathname` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-pathname |
| pathname: accessorDescriptor(getPathname, function (pathname) { |
| var url = getInternalURLState(this); |
| if (url.cannotBeABaseURL) return; |
| url.path = []; |
| parseURL(url, pathname + '', PATH_START); |
| }), |
| // `URL.prototype.search` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-search |
| search: accessorDescriptor(getSearch, function (search) { |
| var url = getInternalURLState(this); |
| search = String(search); |
| if (search == '') { |
| url.query = null; |
| } else { |
| if ('?' == search.charAt(0)) search = search.slice(1); |
| url.query = ''; |
| parseURL(url, search, QUERY); |
| } |
| getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); |
| }), |
| // `URL.prototype.searchParams` getter |
| // https://url.spec.whatwg.org/#dom-url-searchparams |
| searchParams: accessorDescriptor(getSearchParams), |
| // `URL.prototype.hash` accessors pair |
| // https://url.spec.whatwg.org/#dom-url-hash |
| hash: accessorDescriptor(getHash, function (hash) { |
| var url = getInternalURLState(this); |
| hash = String(hash); |
| if (hash == '') { |
| url.fragment = null; |
| return; |
| } |
| if ('#' == hash.charAt(0)) hash = hash.slice(1); |
| url.fragment = ''; |
| parseURL(url, hash, FRAGMENT); |
| }) |
| }); |
| } |
| |
| // `URL.prototype.toJSON` method |
| // https://url.spec.whatwg.org/#dom-url-tojson |
| redefine(URLPrototype, 'toJSON', function toJSON() { |
| return serializeURL.call(this); |
| }, { enumerable: true }); |
| |
| // `URL.prototype.toString` method |
| // https://url.spec.whatwg.org/#URL-stringification-behavior |
| redefine(URLPrototype, 'toString', function toString() { |
| return serializeURL.call(this); |
| }, { enumerable: true }); |
| |
| if (NativeURL) { |
| var nativeCreateObjectURL = NativeURL.createObjectURL; |
| var nativeRevokeObjectURL = NativeURL.revokeObjectURL; |
| // `URL.createObjectURL` method |
| // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL |
| // eslint-disable-next-line no-unused-vars |
| if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) { |
| return nativeCreateObjectURL.apply(NativeURL, arguments); |
| }); |
| // `URL.revokeObjectURL` method |
| // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL |
| // eslint-disable-next-line no-unused-vars |
| if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) { |
| return nativeRevokeObjectURL.apply(NativeURL, arguments); |
| }); |
| } |
| |
| setToStringTag(URLConstructor, 'URL'); |
| |
| $({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, { |
| URL: URLConstructor |
| }); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/modules/web.url.to-json.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/core-js-pure/modules/web.url.to-json.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| // empty |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/array/is-array.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/array/is-array.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/array/is-array */ "../node_modules/core-js-pure/es/array/is-array.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/array/virtual/for-each.js": |
| /*!*********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/array/virtual/for-each.js ***! |
| \*********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../../es/array/virtual/for-each */ "../node_modules/core-js-pure/es/array/virtual/for-each.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/concat.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/concat.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/concat */ "../node_modules/core-js-pure/es/instance/concat.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/every.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/every.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/every */ "../node_modules/core-js-pure/es/instance/every.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/filter.js": |
| /*!**************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/filter.js ***! |
| \**************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/filter */ "../node_modules/core-js-pure/es/instance/filter.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/flat-map.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/flat-map.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/flat-map */ "../node_modules/core-js-pure/es/instance/flat-map.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/for-each.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/for-each.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../../modules/web.dom-collections.iterator */ "../node_modules/core-js-pure/modules/web.dom-collections.iterator.js"); |
| var forEach = __webpack_require__(/*! ../array/virtual/for-each */ "../node_modules/core-js-pure/stable/array/virtual/for-each.js"); |
| var classof = __webpack_require__(/*! ../../internals/classof */ "../node_modules/core-js-pure/internals/classof.js"); |
| var ArrayPrototype = Array.prototype; |
| |
| var DOMIterables = { |
| DOMTokenList: true, |
| NodeList: true |
| }; |
| |
| module.exports = function (it) { |
| var own = it.forEach; |
| return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach) |
| // eslint-disable-next-line no-prototype-builtins |
| || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/index-of.js": |
| /*!****************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/index-of.js ***! |
| \****************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/index-of */ "../node_modules/core-js-pure/es/instance/index-of.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/map.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/map.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/map */ "../node_modules/core-js-pure/es/instance/map.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/slice.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/slice.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/slice */ "../node_modules/core-js-pure/es/instance/slice.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/some.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/some.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/some */ "../node_modules/core-js-pure/es/instance/some.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/instance/sort.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/instance/sort.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/instance/sort */ "../node_modules/core-js-pure/es/instance/sort.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/json/stringify.js": |
| /*!*************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/json/stringify.js ***! |
| \*************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/json/stringify */ "../node_modules/core-js-pure/es/json/stringify.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/object/keys.js": |
| /*!**********************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/object/keys.js ***! |
| \**********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/object/keys */ "../node_modules/core-js-pure/es/object/keys.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/promise/index.js": |
| /*!************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/promise/index.js ***! |
| \************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/promise */ "../node_modules/core-js-pure/es/promise/index.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/symbol/async-iterator.js": |
| /*!********************************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/symbol/async-iterator.js ***! |
| \********************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../es/symbol/async-iterator */ "../node_modules/core-js-pure/es/symbol/async-iterator.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/stable/url/index.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/core-js-pure/stable/url/index.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ../../web/url */ "../node_modules/core-js-pure/web/url.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/core-js-pure/web/url.js": |
| /*!***********************************************!*\ |
| !*** ../node_modules/core-js-pure/web/url.js ***! |
| \***********************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ../modules/web.url */ "../node_modules/core-js-pure/modules/web.url.js"); |
| __webpack_require__(/*! ../modules/web.url.to-json */ "../node_modules/core-js-pure/modules/web.url.to-json.js"); |
| __webpack_require__(/*! ../modules/web.url-search-params */ "../node_modules/core-js-pure/modules/web.url-search-params.js"); |
| var path = __webpack_require__(/*! ../internals/path */ "../node_modules/core-js-pure/internals/path.js"); |
| |
| module.exports = path.URL; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/implementation.js": |
| /*!***********************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/implementation.js ***! |
| \***********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ./lib/implementation */ "../node_modules/dom-node-iterator/lib/implementation.js")['default']; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/index.js": |
| /*!**************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/index.js ***! |
| \**************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ./lib */ "../node_modules/dom-node-iterator/lib/index.js")['default']; |
| module.exports.getPolyfill = __webpack_require__(/*! ./polyfill */ "../node_modules/dom-node-iterator/polyfill.js"); |
| module.exports.implementation = __webpack_require__(/*! ./implementation */ "../node_modules/dom-node-iterator/implementation.js"); |
| module.exports.shim = __webpack_require__(/*! ./shim */ "../node_modules/dom-node-iterator/shim.js"); |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/lib/adapter.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/lib/adapter.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| |
| exports.__esModule = true; |
| |
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
| |
| exports['default'] = createNodeIterator; |
| |
| |
| function createNodeIterator(root) { |
| var whatToShow = arguments.length <= 1 || arguments[1] === undefined ? 0xFFFFFFFF : arguments[1]; |
| var filter = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; |
| |
| var doc = root.nodeType == 9 || root.ownerDocument; |
| var iter = doc.createNodeIterator(root, whatToShow, filter, false); |
| return new NodeIterator(iter, root, whatToShow, filter); |
| } |
| |
| var NodeIterator = function () { |
| function NodeIterator(iter, root, whatToShow, filter) { |
| _classCallCheck(this, NodeIterator); |
| |
| this.root = root; |
| this.whatToShow = whatToShow; |
| this.filter = filter; |
| this.referenceNode = root; |
| this.pointerBeforeReferenceNode = true; |
| this._iter = iter; |
| } |
| |
| NodeIterator.prototype.nextNode = function nextNode() { |
| var result = this._iter.nextNode(); |
| this.pointerBeforeReferenceNode = false; |
| if (result === null) return null; |
| this.referenceNode = result; |
| return this.referenceNode; |
| }; |
| |
| NodeIterator.prototype.previousNode = function previousNode() { |
| var result = this._iter.previousNode(); |
| this.pointerBeforeReferenceNode = true; |
| if (result === null) return null; |
| this.referenceNode = result; |
| return this.referenceNode; |
| }; |
| |
| NodeIterator.prototype.toString = function toString() { |
| return '[object NodeIterator]'; |
| }; |
| |
| return NodeIterator; |
| }(); |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGFwdGVyLmpzIl0sIm5hbWVzIjpbImNyZWF0ZU5vZGVJdGVyYXRvciIsInJvb3QiLCJ3aGF0VG9TaG93IiwiZmlsdGVyIiwiZG9jIiwibm9kZVR5cGUiLCJvd25lckRvY3VtZW50IiwiaXRlciIsIk5vZGVJdGVyYXRvciIsInJlZmVyZW5jZU5vZGUiLCJwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSIsIl9pdGVyIiwibmV4dE5vZGUiLCJyZXN1bHQiLCJwcmV2aW91c05vZGUiLCJ0b1N0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O3FCQUFlQSxrQjs7O0FBR2YsU0FBU0Esa0JBQVQsQ0FBNEJDLElBQTVCLEVBQTBFO0FBQUEsTUFBeENDLFVBQXdDLHlEQUEzQixVQUEyQjtBQUFBLE1BQWZDLE1BQWUseURBQU4sSUFBTTs7QUFDeEUsTUFBTUMsTUFBT0gsS0FBS0ksUUFBTCxJQUFpQixDQUFsQixJQUF3QkosS0FBS0ssYUFBekM7QUFDQSxNQUFNQyxPQUFPSCxJQUFJSixrQkFBSixDQUF1QkMsSUFBdkIsRUFBNkJDLFVBQTdCLEVBQXlDQyxNQUF6QyxFQUFpRCxLQUFqRCxDQUFiO0FBQ0EsU0FBTyxJQUFJSyxZQUFKLENBQWlCRCxJQUFqQixFQUF1Qk4sSUFBdkIsRUFBNkJDLFVBQTdCLEVBQXlDQyxNQUF6QyxDQUFQO0FBQ0Q7O0lBR0tLLFk7QUFDSix3QkFBWUQsSUFBWixFQUFrQk4sSUFBbEIsRUFBd0JDLFVBQXhCLEVBQW9DQyxNQUFwQyxFQUE0QztBQUFBOztBQUMxQyxTQUFLRixJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtDLE1BQUwsR0FBY0EsTUFBZDtBQUNBLFNBQUtNLGFBQUwsR0FBcUJSLElBQXJCO0FBQ0EsU0FBS1MsMEJBQUwsR0FBa0MsSUFBbEM7QUFDQSxTQUFLQyxLQUFMLEdBQWFKLElBQWI7QUFDRDs7eUJBRURLLFEsdUJBQVc7QUFDVCxRQUFNQyxTQUFTLEtBQUtGLEtBQUwsQ0FBV0MsUUFBWCxFQUFmO0FBQ0EsU0FBS0YsMEJBQUwsR0FBa0MsS0FBbEM7QUFDQSxRQUFJRyxXQUFXLElBQWYsRUFBcUIsT0FBTyxJQUFQO0FBQ3JCLFNBQUtKLGFBQUwsR0FBcUJJLE1BQXJCO0FBQ0EsV0FBTyxLQUFLSixhQUFaO0FBQ0QsRzs7eUJBRURLLFksMkJBQWU7QUFDYixRQUFNRCxTQUFTLEtBQUtGLEtBQUwsQ0FBV0csWUFBWCxFQUFmO0FBQ0EsU0FBS0osMEJBQUwsR0FBa0MsSUFBbEM7QUFDQSxRQUFJRyxXQUFXLElBQWYsRUFBcUIsT0FBTyxJQUFQO0FBQ3JCLFNBQUtKLGFBQUwsR0FBcUJJLE1BQXJCO0FBQ0EsV0FBTyxLQUFLSixhQUFaO0FBQ0QsRzs7eUJBRURNLFEsdUJBQVc7QUFDVCxXQUFPLHVCQUFQO0FBQ0QsRyIsImZpbGUiOiJhZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY3JlYXRlTm9kZUl0ZXJhdG9yXG5cblxuZnVuY3Rpb24gY3JlYXRlTm9kZUl0ZXJhdG9yKHJvb3QsIHdoYXRUb1Nob3cgPSAweEZGRkZGRkZGLCBmaWx0ZXIgPSBudWxsKSB7XG4gIGNvbnN0IGRvYyA9IChyb290Lm5vZGVUeXBlID09IDkpIHx8IHJvb3Qub3duZXJEb2N1bWVudFxuICBjb25zdCBpdGVyID0gZG9jLmNyZWF0ZU5vZGVJdGVyYXRvcihyb290LCB3aGF0VG9TaG93LCBmaWx0ZXIsIGZhbHNlKVxuICByZXR1cm4gbmV3IE5vZGVJdGVyYXRvcihpdGVyLCByb290LCB3aGF0VG9TaG93LCBmaWx0ZXIpXG59XG5cblxuY2xhc3MgTm9kZUl0ZXJhdG9yIHtcbiAgY29uc3RydWN0b3IoaXRlciwgcm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdFxuICAgIHRoaXMud2hhdFRvU2hvdyA9IHdoYXRUb1Nob3dcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlclxuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IHJvb3RcbiAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gdHJ1ZVxuICAgIHRoaXMuX2l0ZXIgPSBpdGVyXG4gIH1cblxuICBuZXh0Tm9kZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9pdGVyLm5leHROb2RlKClcbiAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gZmFsc2VcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gbnVsbFxuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IHJlc3VsdFxuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZU5vZGVcbiAgfVxuXG4gIHByZXZpb3VzTm9kZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9pdGVyLnByZXZpb3VzTm9kZSgpXG4gICAgdGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSA9IHRydWVcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gbnVsbFxuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IHJlc3VsdFxuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZU5vZGVcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCBOb2RlSXRlcmF0b3JdJ1xuICB9XG59XG4iXX0= |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/lib/builtin.js": |
| /*!********************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/lib/builtin.js ***! |
| \********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| |
| exports.__esModule = true; |
| exports["default"] = createNodeIterator; |
| |
| |
| function createNodeIterator(root) { |
| var whatToShow = arguments.length <= 1 || arguments[1] === undefined ? 0xFFFFFFFF : arguments[1]; |
| var filter = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; |
| |
| var doc = root.ownerDocument; |
| return doc.createNodeIterator.call(doc, root, whatToShow, filter); |
| } |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsdGluLmpzIl0sIm5hbWVzIjpbImNyZWF0ZU5vZGVJdGVyYXRvciIsInJvb3QiLCJ3aGF0VG9TaG93IiwiZmlsdGVyIiwiZG9jIiwib3duZXJEb2N1bWVudCIsImNhbGwiXSwibWFwcGluZ3MiOiI7OztxQkFBZUEsa0I7OztBQUdmLFNBQVNBLGtCQUFULENBQTRCQyxJQUE1QixFQUEwRTtBQUFBLE1BQXhDQyxVQUF3Qyx5REFBM0IsVUFBMkI7QUFBQSxNQUFmQyxNQUFlLHlEQUFOLElBQU07O0FBQ3hFLE1BQU1DLE1BQU1ILEtBQUtJLGFBQWpCO0FBQ0EsU0FBT0QsSUFBSUosa0JBQUosQ0FBdUJNLElBQXZCLENBQTRCRixHQUE1QixFQUFpQ0gsSUFBakMsRUFBdUNDLFVBQXZDLEVBQW1EQyxNQUFuRCxDQUFQO0FBQ0QiLCJmaWxlIjoiYnVpbHRpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNyZWF0ZU5vZGVJdGVyYXRvclxuXG5cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVJdGVyYXRvcihyb290LCB3aGF0VG9TaG93ID0gMHhGRkZGRkZGRiwgZmlsdGVyID0gbnVsbCkge1xuICBjb25zdCBkb2MgPSByb290Lm93bmVyRG9jdW1lbnRcbiAgcmV0dXJuIGRvYy5jcmVhdGVOb2RlSXRlcmF0b3IuY2FsbChkb2MsIHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcilcbn1cbiJdfQ== |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/lib/implementation.js": |
| /*!***************************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/lib/implementation.js ***! |
| \***************************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| |
| exports.__esModule = true; |
| |
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
| |
| exports['default'] = createNodeIterator; |
| |
| |
| function createNodeIterator(root) { |
| var whatToShow = arguments.length <= 1 || arguments[1] === undefined ? 0xFFFFFFFF : arguments[1]; |
| var filter = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; |
| |
| return new NodeIterator(root, whatToShow, filter); |
| } |
| |
| var NodeIterator = function () { |
| function NodeIterator(root, whatToShow, filter) { |
| _classCallCheck(this, NodeIterator); |
| |
| this.root = root; |
| this.whatToShow = whatToShow; |
| this.filter = filter; |
| this.referenceNode = root; |
| this.pointerBeforeReferenceNode = true; |
| this._filter = function (node) { |
| return filter ? filter(node) === 1 : true; |
| }; |
| this._show = function (node) { |
| return whatToShow >> node.nodeType - 1 & 1 === 1; |
| }; |
| } |
| |
| NodeIterator.prototype.nextNode = function nextNode() { |
| var before = this.pointerBeforeReferenceNode; |
| this.pointerBeforeReferenceNode = false; |
| |
| var node = this.referenceNode; |
| if (before && this._show(node) && this._filter(node)) return node; |
| |
| do { |
| if (node.firstChild) { |
| node = node.firstChild; |
| continue; |
| } |
| |
| do { |
| if (node === this.root) return null; |
| if (node.nextSibling) break; |
| node = node.parentNode; |
| } while (node); |
| |
| node = node.nextSibling; |
| } while (!this._show(node) || !this._filter(node)); |
| |
| this.referenceNode = node; |
| this.pointerBeforeReferenceNode = false; |
| return node; |
| }; |
| |
| NodeIterator.prototype.previousNode = function previousNode() { |
| var before = this.pointerBeforeReferenceNode; |
| this.pointerBeforeReferenceNode = true; |
| |
| var node = this.referenceNode; |
| if (!before && this._show(node) && this._filter(node)) return node; |
| |
| do { |
| if (node === this.root) return null; |
| |
| if (node.previousSibling) { |
| node = node.previousSibling; |
| while (node.lastChild) { |
| node = node.lastChild; |
| }continue; |
| } |
| |
| node = node.parentNode; |
| } while (!this._show(node) || !this._filter(node)); |
| |
| this.referenceNode = node; |
| this.pointerBeforeReferenceNode = true; |
| return node; |
| }; |
| |
| NodeIterator.prototype.toString = function toString() { |
| return '[object NodeIterator]'; |
| }; |
| |
| return NodeIterator; |
| }(); |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbXBsZW1lbnRhdGlvbi5qcyJdLCJuYW1lcyI6WyJjcmVhdGVOb2RlSXRlcmF0b3IiLCJyb290Iiwid2hhdFRvU2hvdyIsImZpbHRlciIsIk5vZGVJdGVyYXRvciIsInJlZmVyZW5jZU5vZGUiLCJwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSIsIl9maWx0ZXIiLCJub2RlIiwiX3Nob3ciLCJub2RlVHlwZSIsIm5leHROb2RlIiwiYmVmb3JlIiwiZmlyc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicGFyZW50Tm9kZSIsInByZXZpb3VzTm9kZSIsInByZXZpb3VzU2libGluZyIsImxhc3RDaGlsZCIsInRvU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7cUJBQWVBLGtCOzs7QUFHZixTQUFTQSxrQkFBVCxDQUE0QkMsSUFBNUIsRUFBMEU7QUFBQSxNQUF4Q0MsVUFBd0MseURBQTNCLFVBQTJCO0FBQUEsTUFBZkMsTUFBZSx5REFBTixJQUFNOztBQUN4RSxTQUFPLElBQUlDLFlBQUosQ0FBaUJILElBQWpCLEVBQXVCQyxVQUF2QixFQUFtQ0MsTUFBbkMsQ0FBUDtBQUNEOztJQUdLQyxZO0FBQ0osd0JBQVlILElBQVosRUFBa0JDLFVBQWxCLEVBQThCQyxNQUE5QixFQUFzQztBQUFBOztBQUNwQyxTQUFLRixJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtDLE1BQUwsR0FBY0EsTUFBZDtBQUNBLFNBQUtFLGFBQUwsR0FBcUJKLElBQXJCO0FBQ0EsU0FBS0ssMEJBQUwsR0FBa0MsSUFBbEM7QUFDQSxTQUFLQyxPQUFMLEdBQWUsVUFBQ0MsSUFBRDtBQUFBLGFBQVVMLFNBQVNBLE9BQU9LLElBQVAsTUFBaUIsQ0FBMUIsR0FBOEIsSUFBeEM7QUFBQSxLQUFmO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLFVBQUNELElBQUQ7QUFBQSxhQUFVTixjQUFjTSxLQUFLRSxRQUFMLEdBQWdCLENBQTlCLEdBQWtDLE1BQU0sQ0FBbEQ7QUFBQSxLQUFiO0FBQ0Q7O3lCQUVEQyxRLHVCQUFXO0FBQ1QsUUFBTUMsU0FBUyxLQUFLTiwwQkFBcEI7QUFDQSxTQUFLQSwwQkFBTCxHQUFrQyxLQUFsQzs7QUFFQSxRQUFJRSxPQUFPLEtBQUtILGFBQWhCO0FBQ0EsUUFBSU8sVUFBVSxLQUFLSCxLQUFMLENBQVdELElBQVgsQ0FBVixJQUE4QixLQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FBbEMsRUFBc0QsT0FBT0EsSUFBUDs7QUFFdEQsT0FBRztBQUNELFVBQUlBLEtBQUtLLFVBQVQsRUFBcUI7QUFDbkJMLGVBQU9BLEtBQUtLLFVBQVo7QUFDQTtBQUNEOztBQUVELFNBQUc7QUFDRCxZQUFJTCxTQUFTLEtBQUtQLElBQWxCLEVBQXdCLE9BQU8sSUFBUDtBQUN4QixZQUFJTyxLQUFLTSxXQUFULEVBQXNCO0FBQ3RCTixlQUFPQSxLQUFLTyxVQUFaO0FBQ0QsT0FKRCxRQUlTUCxJQUpUOztBQU1BQSxhQUFPQSxLQUFLTSxXQUFaO0FBQ0QsS0FiRCxRQWFRLENBQUMsS0FBS0wsS0FBTCxDQUFXRCxJQUFYLENBQUQsSUFBcUIsQ0FBQyxLQUFLRCxPQUFMLENBQWFDLElBQWIsQ0FiOUI7O0FBZUEsU0FBS0gsYUFBTCxHQUFxQkcsSUFBckI7QUFDQSxTQUFLRiwwQkFBTCxHQUFrQyxLQUFsQztBQUNBLFdBQU9FLElBQVA7QUFDRCxHOzt5QkFFRFEsWSwyQkFBZTtBQUNiLFFBQU1KLFNBQVMsS0FBS04sMEJBQXBCO0FBQ0EsU0FBS0EsMEJBQUwsR0FBa0MsSUFBbEM7O0FBRUEsUUFBSUUsT0FBTyxLQUFLSCxhQUFoQjtBQUNBLFFBQUksQ0FBQ08sTUFBRCxJQUFXLEtBQUtILEtBQUwsQ0FBV0QsSUFBWCxDQUFYLElBQStCLEtBQUtELE9BQUwsQ0FBYUMsSUFBYixDQUFuQyxFQUF1RCxPQUFPQSxJQUFQOztBQUV2RCxPQUFHO0FBQ0QsVUFBSUEsU0FBUyxLQUFLUCxJQUFsQixFQUF3QixPQUFPLElBQVA7O0FBRXhCLFVBQUlPLEtBQUtTLGVBQVQsRUFBMEI7QUFDeEJULGVBQU9BLEtBQUtTLGVBQVo7QUFDQSxlQUFPVCxLQUFLVSxTQUFaO0FBQXVCVixpQkFBT0EsS0FBS1UsU0FBWjtBQUF2QixTQUNBO0FBQ0Q7O0FBRURWLGFBQU9BLEtBQUtPLFVBQVo7QUFDRCxLQVZELFFBVVEsQ0FBQyxLQUFLTixLQUFMLENBQVdELElBQVgsQ0FBRCxJQUFxQixDQUFDLEtBQUtELE9BQUwsQ0FBYUMsSUFBYixDQVY5Qjs7QUFZQSxTQUFLSCxhQUFMLEdBQXFCRyxJQUFyQjtBQUNBLFNBQUtGLDBCQUFMLEdBQWtDLElBQWxDO0FBQ0EsV0FBT0UsSUFBUDtBQUNELEc7O3lCQUVEVyxRLHVCQUFXO0FBQ1QsV0FBTyx1QkFBUDtBQUNELEciLCJmaWxlIjoiaW1wbGVtZW50YXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjcmVhdGVOb2RlSXRlcmF0b3JcblxuXG5mdW5jdGlvbiBjcmVhdGVOb2RlSXRlcmF0b3Iocm9vdCwgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsIGZpbHRlciA9IG51bGwpIHtcbiAgcmV0dXJuIG5ldyBOb2RlSXRlcmF0b3Iocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyKVxufVxuXG5cbmNsYXNzIE5vZGVJdGVyYXRvciB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcikge1xuICAgIHRoaXMucm9vdCA9IHJvb3RcbiAgICB0aGlzLndoYXRUb1Nob3cgPSB3aGF0VG9TaG93XG4gICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXJcbiAgICB0aGlzLnJlZmVyZW5jZU5vZGUgPSByb290XG4gICAgdGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSA9IHRydWVcbiAgICB0aGlzLl9maWx0ZXIgPSAobm9kZSkgPT4gZmlsdGVyID8gZmlsdGVyKG5vZGUpID09PSAxIDogdHJ1ZVxuICAgIHRoaXMuX3Nob3cgPSAobm9kZSkgPT4gd2hhdFRvU2hvdyA+PiBub2RlLm5vZGVUeXBlIC0gMSAmIDEgPT09IDFcbiAgfVxuXG4gIG5leHROb2RlKCkge1xuICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGVcbiAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gZmFsc2VcblxuICAgIGxldCBub2RlID0gdGhpcy5yZWZlcmVuY2VOb2RlXG4gICAgaWYgKGJlZm9yZSAmJiB0aGlzLl9zaG93KG5vZGUpICYmIHRoaXMuX2ZpbHRlcihub2RlKSkgcmV0dXJuIG5vZGVcblxuICAgIGRvIHtcbiAgICAgIGlmIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLnJvb3QpIHJldHVybiBudWxsXG4gICAgICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSBicmVha1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlXG4gICAgICB9IHdoaWxlIChub2RlKVxuXG4gICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZ1xuICAgIH0gd2hpbGUoIXRoaXMuX3Nob3cobm9kZSkgfHwgIXRoaXMuX2ZpbHRlcihub2RlKSlcblxuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IG5vZGVcbiAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gZmFsc2VcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgcHJldmlvdXNOb2RlKCkge1xuICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGVcbiAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gdHJ1ZVxuXG4gICAgbGV0IG5vZGUgPSB0aGlzLnJlZmVyZW5jZU5vZGVcbiAgICBpZiAoIWJlZm9yZSAmJiB0aGlzLl9zaG93KG5vZGUpICYmIHRoaXMuX2ZpbHRlcihub2RlKSkgcmV0dXJuIG5vZGVcblxuICAgIGRvIHtcbiAgICAgIGlmIChub2RlID09PSB0aGlzLnJvb3QpIHJldHVybiBudWxsXG5cbiAgICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmdcbiAgICAgICAgd2hpbGUgKG5vZGUubGFzdENoaWxkKSBub2RlID0gbm9kZS5sYXN0Q2hpbGRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZVxuICAgIH0gd2hpbGUoIXRoaXMuX3Nob3cobm9kZSkgfHwgIXRoaXMuX2ZpbHRlcihub2RlKSlcblxuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IG5vZGVcbiAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gdHJ1ZVxuICAgIHJldHVybiBub2RlXG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgTm9kZUl0ZXJhdG9yXSdcbiAgfVxufVxuIl19 |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/lib/index.js": |
| /*!******************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/lib/index.js ***! |
| \******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| |
| exports.__esModule = true; |
| |
| var _polyfill = __webpack_require__(/*! ./polyfill */ "../node_modules/dom-node-iterator/lib/polyfill.js"); |
| |
| var _polyfill2 = _interopRequireDefault(_polyfill); |
| |
| var _implementation = __webpack_require__(/*! ./implementation */ "../node_modules/dom-node-iterator/lib/implementation.js"); |
| |
| var _implementation2 = _interopRequireDefault(_implementation); |
| |
| var _shim = __webpack_require__(/*! ./shim */ "../node_modules/dom-node-iterator/lib/shim.js"); |
| |
| var _shim2 = _interopRequireDefault(_shim); |
| |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } |
| |
| var polyfill = (0, _polyfill2['default'])(); |
| polyfill.implementation = _implementation2['default']; |
| polyfill.shim = _shim2['default']; |
| |
| exports['default'] = polyfill; |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJwb2x5ZmlsbCIsImltcGxlbWVudGF0aW9uIiwic2hpbSJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsV0FBVyw0QkFBakI7QUFDQUEsU0FBU0MsY0FBVDtBQUNBRCxTQUFTRSxJQUFUOztxQkFFZUYsUSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmF1bHQgYXMgZ2V0UG9seWZpbGwgfSBmcm9tICcuL3BvbHlmaWxsJ1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBpbXBsZW1lbnRhdGlvbiB9IGZyb20gJy4vaW1wbGVtZW50YXRpb24nXG5pbXBvcnQgeyBkZWZhdWx0IGFzIHNoaW0gfSBmcm9tICcuL3NoaW0nXG5cbmNvbnN0IHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKVxucG9seWZpbGwuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvblxucG9seWZpbGwuc2hpbSA9IHNoaW1cblxuZXhwb3J0IGRlZmF1bHQgcG9seWZpbGxcbiJdfQ== |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/lib/polyfill.js": |
| /*!*********************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/lib/polyfill.js ***! |
| \*********************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| |
| exports.__esModule = true; |
| exports['default'] = getPolyfill; |
| |
| var _adapter = __webpack_require__(/*! ./adapter */ "../node_modules/dom-node-iterator/lib/adapter.js"); |
| |
| var _adapter2 = _interopRequireDefault(_adapter); |
| |
| var _builtin = __webpack_require__(/*! ./builtin */ "../node_modules/dom-node-iterator/lib/builtin.js"); |
| |
| var _builtin2 = _interopRequireDefault(_builtin); |
| |
| var _implementation = __webpack_require__(/*! ./implementation */ "../node_modules/dom-node-iterator/lib/implementation.js"); |
| |
| var _implementation2 = _interopRequireDefault(_implementation); |
| |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } |
| |
| function getPolyfill() { |
| try { |
| var doc = typeof document === 'undefined' ? {} : document; |
| var iter = (0, _builtin2['default'])(doc, 0xFFFFFFFF, null, false); |
| if (iter.referenceNode === doc) return _builtin2['default']; |
| return _adapter2['default']; |
| } catch (_) { |
| return _implementation2['default']; |
| } |
| } /*global document*/ |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wb2x5ZmlsbC5qcyJdLCJuYW1lcyI6WyJnZXRQb2x5ZmlsbCIsImRvYyIsImRvY3VtZW50IiwiaXRlciIsInJlZmVyZW5jZU5vZGUiLCJfIl0sIm1hcHBpbmdzIjoiOzs7cUJBTXdCQSxXOztBQUx4Qjs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUdlLFNBQVNBLFdBQVQsR0FBdUI7QUFDcEMsTUFBSTtBQUNGLFFBQU1DLE1BQU0sT0FBT0MsUUFBUCxLQUFxQixXQUFyQixHQUFtQyxFQUFuQyxHQUF3Q0EsUUFBcEQ7QUFDQSxRQUFNQyxPQUFPLDBCQUFRRixHQUFSLEVBQWEsVUFBYixFQUF5QixJQUF6QixFQUErQixLQUEvQixDQUFiO0FBQ0EsUUFBSUUsS0FBS0MsYUFBTCxLQUF1QkgsR0FBM0IsRUFBZ0M7QUFDaEM7QUFDRCxHQUxELENBS0UsT0FBT0ksQ0FBUCxFQUFVO0FBQ1Y7QUFDRDtBQUNGLEMsQ0FmRCIsImZpbGUiOiJwb2x5ZmlsbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qZ2xvYmFsIGRvY3VtZW50Ki9cbmltcG9ydCBhZGFwdGVyIGZyb20gJy4vYWRhcHRlcidcbmltcG9ydCBidWlsdGluIGZyb20gJy4vYnVpbHRpbidcbmltcG9ydCBpbXBsZW1lbnRhdGlvbiBmcm9tICcuL2ltcGxlbWVudGF0aW9uJ1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGRvYyA9IHR5cGVvZihkb2N1bWVudCkgPT09ICd1bmRlZmluZWQnID8ge30gOiBkb2N1bWVudFxuICAgIGNvbnN0IGl0ZXIgPSBidWlsdGluKGRvYywgMHhGRkZGRkZGRiwgbnVsbCwgZmFsc2UpXG4gICAgaWYgKGl0ZXIucmVmZXJlbmNlTm9kZSA9PT0gZG9jKSByZXR1cm4gYnVpbHRpblxuICAgIHJldHVybiBhZGFwdGVyXG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gaW1wbGVtZW50YXRpb25cbiAgfVxufVxuIl19 |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/lib/shim.js": |
| /*!*****************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/lib/shim.js ***! |
| \*****************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| |
| exports.__esModule = true; |
| exports['default'] = shim; |
| |
| var _builtin = __webpack_require__(/*! ./builtin */ "../node_modules/dom-node-iterator/lib/builtin.js"); |
| |
| var _builtin2 = _interopRequireDefault(_builtin); |
| |
| var _polyfill = __webpack_require__(/*! ./polyfill */ "../node_modules/dom-node-iterator/lib/polyfill.js"); |
| |
| var _polyfill2 = _interopRequireDefault(_polyfill); |
| |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } |
| |
| /*global document*/ |
| function shim() { |
| var doc = typeof document === 'undefined' ? {} : document; |
| var polyfill = (0, _polyfill2['default'])(); |
| if (polyfill !== _builtin2['default']) doc.createNodeIterator = polyfill; |
| return polyfill; |
| } |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zaGltLmpzIl0sIm5hbWVzIjpbInNoaW0iLCJkb2MiLCJkb2N1bWVudCIsInBvbHlmaWxsIiwiY3JlYXRlTm9kZUl0ZXJhdG9yIl0sIm1hcHBpbmdzIjoiOzs7cUJBS3dCQSxJOztBQUp4Qjs7OztBQUNBOzs7Ozs7QUFGQTtBQUtlLFNBQVNBLElBQVQsR0FBZ0I7QUFDN0IsTUFBTUMsTUFBTSxPQUFPQyxRQUFQLEtBQXFCLFdBQXJCLEdBQW1DLEVBQW5DLEdBQXdDQSxRQUFwRDtBQUNBLE1BQU1DLFdBQVcsNEJBQWpCO0FBQ0EsTUFBSUEsaUNBQUosRUFBMEJGLElBQUlHLGtCQUFKLEdBQXlCRCxRQUF6QjtBQUMxQixTQUFPQSxRQUFQO0FBQ0QiLCJmaWxlIjoic2hpbS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qZ2xvYmFsIGRvY3VtZW50Ki9cbmltcG9ydCBidWlsdGluIGZyb20gJy4vYnVpbHRpbidcbmltcG9ydCBnZXRQb2x5ZmlsbCBmcm9tICcuL3BvbHlmaWxsJ1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoaW0oKSB7XG4gIGNvbnN0IGRvYyA9IHR5cGVvZihkb2N1bWVudCkgPT09ICd1bmRlZmluZWQnID8ge30gOiBkb2N1bWVudFxuICBjb25zdCBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKClcbiAgaWYgKHBvbHlmaWxsICE9PSBidWlsdGluKSBkb2MuY3JlYXRlTm9kZUl0ZXJhdG9yID0gcG9seWZpbGxcbiAgcmV0dXJuIHBvbHlmaWxsXG59XG4iXX0= |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/polyfill.js": |
| /*!*****************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/polyfill.js ***! |
| \*****************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ./lib/polyfill */ "../node_modules/dom-node-iterator/lib/polyfill.js")['default']; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-node-iterator/shim.js": |
| /*!*************************************************!*\ |
| !*** ../node_modules/dom-node-iterator/shim.js ***! |
| \*************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ./lib/shim */ "../node_modules/dom-node-iterator/lib/shim.js")['default']; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-seek/index.js": |
| /*!*****************************************!*\ |
| !*** ../node_modules/dom-seek/index.js ***! |
| \*****************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| module.exports = __webpack_require__(/*! ./lib */ "../node_modules/dom-seek/lib/index.js")['default']; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/dom-seek/lib/index.js": |
| /*!*********************************************!*\ |
| !*** ../node_modules/dom-seek/lib/index.js ***! |
| \*********************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| |
| |
| exports.__esModule = true; |
| exports['default'] = seek; |
| |
| var _ancestors = __webpack_require__(/*! ancestors */ "../node_modules/ancestors/index.js"); |
| |
| var _ancestors2 = _interopRequireDefault(_ancestors); |
| |
| var _indexOf = __webpack_require__(/*! index-of */ "../node_modules/index-of/index.js"); |
| |
| var _indexOf2 = _interopRequireDefault(_indexOf); |
| |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } |
| |
| var E_SHOW = 'Argument 1 of seek must use filter NodeFilter.SHOW_TEXT.'; |
| var E_WHERE = 'Argument 2 of seek must be a number or a Text Node.'; |
| |
| var SHOW_TEXT = 4; |
| var TEXT_NODE = 3; |
| |
| function seek(iter, where) { |
| if (iter.whatToShow !== SHOW_TEXT) { |
| throw new Error(E_SHOW); |
| } |
| |
| var count = 0; |
| var node = iter.referenceNode; |
| var predicates = null; |
| |
| if (isNumber(where)) { |
| predicates = { |
| forward: function forward() { |
| return count < where; |
| }, |
| backward: function backward() { |
| return count > where; |
| } |
| }; |
| } else if (isText(where)) { |
| var forward = before(node, where) ? function () { |
| return false; |
| } : function () { |
| return node !== where; |
| }; |
| var backward = function backward() { |
| return node != where || !iter.pointerBeforeReferenceNode; |
| }; |
| predicates = { forward: forward, backward: backward }; |
| } else { |
| throw new Error(E_WHERE); |
| } |
| |
| while (predicates.forward() && (node = iter.nextNode()) !== null) { |
| count += node.nodeValue.length; |
| } |
| |
| while (predicates.backward() && (node = iter.previousNode()) !== null) { |
| count -= node.nodeValue.length; |
| } |
| |
| return count; |
| } |
| |
| function isNumber(n) { |
| return !isNaN(parseInt(n)) && isFinite(n); |
| } |
| |
| function isText(node) { |
| return node.nodeType === TEXT_NODE; |
| } |
| |
| function before(ref, node) { |
| if (ref === node) return false; |
| |
| var common = null; |
| var left = [ref].concat((0, _ancestors2['default'])(ref)).reverse(); |
| var right = [node].concat((0, _ancestors2['default'])(node)).reverse(); |
| |
| while (left[0] === right[0]) { |
| common = left.shift(); |
| right.shift(); |
| } |
| |
| left = left[0]; |
| right = right[0]; |
| |
| var l = (0, _indexOf2['default'])(common.childNodes, left); |
| var r = (0, _indexOf2['default'])(common.childNodes, right); |
| |
| return l > r; |
| } |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJzZWVrIiwiRV9TSE9XIiwiRV9XSEVSRSIsIlNIT1dfVEVYVCIsIlRFWFRfTk9ERSIsIml0ZXIiLCJ3aGVyZSIsIndoYXRUb1Nob3ciLCJFcnJvciIsImNvdW50Iiwibm9kZSIsInJlZmVyZW5jZU5vZGUiLCJwcmVkaWNhdGVzIiwiaXNOdW1iZXIiLCJmb3J3YXJkIiwiYmFja3dhcmQiLCJpc1RleHQiLCJiZWZvcmUiLCJwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSIsIm5leHROb2RlIiwibm9kZVZhbHVlIiwibGVuZ3RoIiwicHJldmlvdXNOb2RlIiwibiIsImlzTmFOIiwicGFyc2VJbnQiLCJpc0Zpbml0ZSIsIm5vZGVUeXBlIiwicmVmIiwiY29tbW9uIiwibGVmdCIsImNvbmNhdCIsInJldmVyc2UiLCJyaWdodCIsInNoaWZ0IiwibCIsImNoaWxkTm9kZXMiLCJyIl0sIm1hcHBpbmdzIjoiOzs7cUJBVXdCQSxJOztBQVZ4Qjs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQyxTQUFTLDBEQUFmO0FBQ0EsSUFBTUMsVUFBVSxxREFBaEI7O0FBRUEsSUFBTUMsWUFBWSxDQUFsQjtBQUNBLElBQU1DLFlBQVksQ0FBbEI7O0FBR2UsU0FBU0osSUFBVCxDQUFjSyxJQUFkLEVBQW9CQyxLQUFwQixFQUEyQjtBQUN4QyxNQUFJRCxLQUFLRSxVQUFMLEtBQW9CSixTQUF4QixFQUFtQztBQUNqQyxVQUFNLElBQUlLLEtBQUosQ0FBVVAsTUFBVixDQUFOO0FBQ0Q7O0FBRUQsTUFBSVEsUUFBUSxDQUFaO0FBQ0EsTUFBSUMsT0FBT0wsS0FBS00sYUFBaEI7QUFDQSxNQUFJQyxhQUFhLElBQWpCOztBQUVBLE1BQUlDLFNBQVNQLEtBQVQsQ0FBSixFQUFxQjtBQUNuQk0saUJBQWE7QUFDWEUsZUFBUztBQUFBLGVBQU1MLFFBQVFILEtBQWQ7QUFBQSxPQURFO0FBRVhTLGdCQUFVO0FBQUEsZUFBTU4sUUFBUUgsS0FBZDtBQUFBO0FBRkMsS0FBYjtBQUlELEdBTEQsTUFLTyxJQUFJVSxPQUFPVixLQUFQLENBQUosRUFBbUI7QUFDeEIsUUFBSVEsVUFBVUcsT0FBT1AsSUFBUCxFQUFhSixLQUFiLElBQXNCO0FBQUEsYUFBTSxLQUFOO0FBQUEsS0FBdEIsR0FBb0M7QUFBQSxhQUFNSSxTQUFTSixLQUFmO0FBQUEsS0FBbEQ7QUFDQSxRQUFJUyxXQUFXLFNBQVhBLFFBQVc7QUFBQSxhQUFNTCxRQUFRSixLQUFSLElBQWlCLENBQUNELEtBQUthLDBCQUE3QjtBQUFBLEtBQWY7QUFDQU4saUJBQWEsRUFBQ0UsZ0JBQUQsRUFBVUMsa0JBQVYsRUFBYjtBQUNELEdBSk0sTUFJQTtBQUNMLFVBQU0sSUFBSVAsS0FBSixDQUFVTixPQUFWLENBQU47QUFDRDs7QUFFRCxTQUFPVSxXQUFXRSxPQUFYLE1BQXdCLENBQUNKLE9BQU9MLEtBQUtjLFFBQUwsRUFBUixNQUE2QixJQUE1RCxFQUFrRTtBQUNoRVYsYUFBU0MsS0FBS1UsU0FBTCxDQUFlQyxNQUF4QjtBQUNEOztBQUVELFNBQU9ULFdBQVdHLFFBQVgsTUFBeUIsQ0FBQ0wsT0FBT0wsS0FBS2lCLFlBQUwsRUFBUixNQUFpQyxJQUFqRSxFQUF1RTtBQUNyRWIsYUFBU0MsS0FBS1UsU0FBTCxDQUFlQyxNQUF4QjtBQUNEOztBQUVELFNBQU9aLEtBQVA7QUFDRDs7QUFHRCxTQUFTSSxRQUFULENBQWtCVSxDQUFsQixFQUFxQjtBQUNuQixTQUFPLENBQUNDLE1BQU1DLFNBQVNGLENBQVQsQ0FBTixDQUFELElBQXVCRyxTQUFTSCxDQUFULENBQTlCO0FBQ0Q7O0FBR0QsU0FBU1AsTUFBVCxDQUFnQk4sSUFBaEIsRUFBc0I7QUFDcEIsU0FBT0EsS0FBS2lCLFFBQUwsS0FBa0J2QixTQUF6QjtBQUNEOztBQUdELFNBQVNhLE1BQVQsQ0FBZ0JXLEdBQWhCLEVBQXFCbEIsSUFBckIsRUFBMkI7QUFDekIsTUFBSWtCLFFBQVFsQixJQUFaLEVBQWtCLE9BQU8sS0FBUDs7QUFFbEIsTUFBSW1CLFNBQVMsSUFBYjtBQUNBLE1BQUlDLE9BQU8sQ0FBQ0YsR0FBRCxFQUFNRyxNQUFOLENBQWEsNEJBQVVILEdBQVYsQ0FBYixFQUE2QkksT0FBN0IsRUFBWDtBQUNBLE1BQUlDLFFBQVEsQ0FBQ3ZCLElBQUQsRUFBT3FCLE1BQVAsQ0FBYyw0QkFBVXJCLElBQVYsQ0FBZCxFQUErQnNCLE9BQS9CLEVBQVo7O0FBRUEsU0FBT0YsS0FBSyxDQUFMLE1BQVlHLE1BQU0sQ0FBTixDQUFuQixFQUE2QjtBQUMzQkosYUFBU0MsS0FBS0ksS0FBTCxFQUFUO0FBQ0FELFVBQU1DLEtBQU47QUFDRDs7QUFFREosU0FBT0EsS0FBSyxDQUFMLENBQVA7QUFDQUcsVUFBUUEsTUFBTSxDQUFOLENBQVI7O0FBRUEsTUFBSUUsSUFBSSwwQkFBUU4sT0FBT08sVUFBZixFQUEyQk4sSUFBM0IsQ0FBUjtBQUNBLE1BQUlPLElBQUksMEJBQVFSLE9BQU9PLFVBQWYsRUFBMkJILEtBQTNCLENBQVI7O0FBRUEsU0FBT0UsSUFBSUUsQ0FBWDtBQUNEIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFuY2VzdG9ycyBmcm9tICdhbmNlc3RvcnMnXG5pbXBvcnQgaW5kZXhPZiBmcm9tICdpbmRleC1vZidcblxuY29uc3QgRV9TSE9XID0gJ0FyZ3VtZW50IDEgb2Ygc2VlayBtdXN0IHVzZSBmaWx0ZXIgTm9kZUZpbHRlci5TSE9XX1RFWFQuJ1xuY29uc3QgRV9XSEVSRSA9ICdBcmd1bWVudCAyIG9mIHNlZWsgbXVzdCBiZSBhIG51bWJlciBvciBhIFRleHQgTm9kZS4nXG5cbmNvbnN0IFNIT1dfVEVYVCA9IDRcbmNvbnN0IFRFWFRfTk9ERSA9IDNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZWVrKGl0ZXIsIHdoZXJlKSB7XG4gIGlmIChpdGVyLndoYXRUb1Nob3cgIT09IFNIT1dfVEVYVCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFX1NIT1cpXG4gIH1cblxuICBsZXQgY291bnQgPSAwXG4gIGxldCBub2RlID0gaXRlci5yZWZlcmVuY2VOb2RlXG4gIGxldCBwcmVkaWNhdGVzID0gbnVsbFxuXG4gIGlmIChpc051bWJlcih3aGVyZSkpIHtcbiAgICBwcmVkaWNhdGVzID0ge1xuICAgICAgZm9yd2FyZDogKCkgPT4gY291bnQgPCB3aGVyZSxcbiAgICAgIGJhY2t3YXJkOiAoKSA9PiBjb3VudCA+IHdoZXJlLFxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1RleHQod2hlcmUpKSB7XG4gICAgbGV0IGZvcndhcmQgPSBiZWZvcmUobm9kZSwgd2hlcmUpID8gKCkgPT4gZmFsc2UgOiAoKSA9PiBub2RlICE9PSB3aGVyZVxuICAgIGxldCBiYWNrd2FyZCA9ICgpID0+IG5vZGUgIT0gd2hlcmUgfHwgIWl0ZXIucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGVcbiAgICBwcmVkaWNhdGVzID0ge2ZvcndhcmQsIGJhY2t3YXJkfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihFX1dIRVJFKVxuICB9XG5cbiAgd2hpbGUgKHByZWRpY2F0ZXMuZm9yd2FyZCgpICYmIChub2RlID0gaXRlci5uZXh0Tm9kZSgpKSAhPT0gbnVsbCkge1xuICAgIGNvdW50ICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aFxuICB9XG5cbiAgd2hpbGUgKHByZWRpY2F0ZXMuYmFja3dhcmQoKSAmJiAobm9kZSA9IGl0ZXIucHJldmlvdXNOb2RlKCkpICE9PSBudWxsKSB7XG4gICAgY291bnQgLT0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gY291bnRcbn1cblxuXG5mdW5jdGlvbiBpc051bWJlcihuKSB7XG4gIHJldHVybiAhaXNOYU4ocGFyc2VJbnQobikpICYmIGlzRmluaXRlKG4pXG59XG5cblxuZnVuY3Rpb24gaXNUZXh0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERVxufVxuXG5cbmZ1bmN0aW9uIGJlZm9yZShyZWYsIG5vZGUpIHtcbiAgaWYgKHJlZiA9PT0gbm9kZSkgcmV0dXJuIGZhbHNlXG5cbiAgbGV0IGNvbW1vbiA9IG51bGxcbiAgbGV0IGxlZnQgPSBbcmVmXS5jb25jYXQoYW5jZXN0b3JzKHJlZikpLnJldmVyc2UoKVxuICBsZXQgcmlnaHQgPSBbbm9kZV0uY29uY2F0KGFuY2VzdG9ycyhub2RlKSkucmV2ZXJzZSgpXG5cbiAgd2hpbGUgKGxlZnRbMF0gPT09IHJpZ2h0WzBdKSB7XG4gICAgY29tbW9uID0gbGVmdC5zaGlmdCgpXG4gICAgcmlnaHQuc2hpZnQoKVxuICB9XG5cbiAgbGVmdCA9IGxlZnRbMF1cbiAgcmlnaHQgPSByaWdodFswXVxuXG4gIGxldCBsID0gaW5kZXhPZihjb21tb24uY2hpbGROb2RlcywgbGVmdClcbiAgbGV0IHIgPSBpbmRleE9mKGNvbW1vbi5jaGlsZE5vZGVzLCByaWdodClcblxuICByZXR1cm4gbCA+IHJcbn1cbiJdfQ== |
| |
| /***/ }), |
| |
| /***/ "../node_modules/index-of/index.js": |
| /*!*****************************************!*\ |
| !*** ../node_modules/index-of/index.js ***! |
| \*****************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| /*! |
| * index-of <https://github.com/jonschlinkert/index-of> |
| * |
| * Copyright (c) 2014-2015 Jon Schlinkert. |
| * Licensed under the MIT license. |
| */ |
| |
| |
| |
| module.exports = function indexOf(arr, ele, start) { |
| start = start || 0; |
| var idx = -1; |
| |
| if (arr == null) return idx; |
| var len = arr.length; |
| var i = start < 0 |
| ? (len + start) |
| : start; |
| |
| if (i >= arr.length) { |
| return -1; |
| } |
| |
| while (i < len) { |
| if (arr[i] === ele) { |
| return i; |
| } |
| i++; |
| } |
| |
| return -1; |
| }; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/regenerator-runtime/runtime.js": |
| /*!******************************************************!*\ |
| !*** ../node_modules/regenerator-runtime/runtime.js ***! |
| \******************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| /** |
| * Copyright (c) 2014-present, Facebook, Inc. |
| * |
| * This source code is licensed under the MIT license found in the |
| * LICENSE file in the root directory of this source tree. |
| */ |
| |
| var runtime = (function (exports) { |
| "use strict"; |
| |
| var Op = Object.prototype; |
| var hasOwn = Op.hasOwnProperty; |
| var undefined; // More compressible than void 0. |
| var $Symbol = typeof Symbol === "function" ? Symbol : {}; |
| var iteratorSymbol = $Symbol.iterator || "@@iterator"; |
| var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; |
| var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; |
| |
| function wrap(innerFn, outerFn, self, tryLocsList) { |
| // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. |
| var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; |
| var generator = Object.create(protoGenerator.prototype); |
| var context = new Context(tryLocsList || []); |
| |
| // The ._invoke method unifies the implementations of the .next, |
| // .throw, and .return methods. |
| generator._invoke = makeInvokeMethod(innerFn, self, context); |
| |
| return generator; |
| } |
| exports.wrap = wrap; |
| |
| // Try/catch helper to minimize deoptimizations. Returns a completion |
| // record like context.tryEntries[i].completion. This interface could |
| // have been (and was previously) designed to take a closure to be |
| // invoked without arguments, but in all the cases we care about we |
| // already have an existing method we want to call, so there's no need |
| // to create a new function object. We can even get away with assuming |
| // the method takes exactly one argument, since that happens to be true |
| // in every case, so we don't have to touch the arguments object. The |
| // only additional allocation required is the completion record, which |
| // has a stable shape and so hopefully should be cheap to allocate. |
| function tryCatch(fn, obj, arg) { |
| try { |
| return { type: "normal", arg: fn.call(obj, arg) }; |
| } catch (err) { |
| return { type: "throw", arg: err }; |
| } |
| } |
| |
| var GenStateSuspendedStart = "suspendedStart"; |
| var GenStateSuspendedYield = "suspendedYield"; |
| var GenStateExecuting = "executing"; |
| var GenStateCompleted = "completed"; |
| |
| // Returning this object from the innerFn has the same effect as |
| // breaking out of the dispatch switch statement. |
| var ContinueSentinel = {}; |
| |
| // Dummy constructor functions that we use as the .constructor and |
| // .constructor.prototype properties for functions that return Generator |
| // objects. For full spec compliance, you may wish to configure your |
| // minifier not to mangle the names of these two functions. |
| function Generator() {} |
| function GeneratorFunction() {} |
| function GeneratorFunctionPrototype() {} |
| |
| // This is a polyfill for %IteratorPrototype% for environments that |
| // don't natively support it. |
| var IteratorPrototype = {}; |
| IteratorPrototype[iteratorSymbol] = function () { |
| return this; |
| }; |
| |
| var getProto = Object.getPrototypeOf; |
| var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); |
| if (NativeIteratorPrototype && |
| NativeIteratorPrototype !== Op && |
| hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { |
| // This environment has a native %IteratorPrototype%; use it instead |
| // of the polyfill. |
| IteratorPrototype = NativeIteratorPrototype; |
| } |
| |
| var Gp = GeneratorFunctionPrototype.prototype = |
| Generator.prototype = Object.create(IteratorPrototype); |
| GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; |
| GeneratorFunctionPrototype.constructor = GeneratorFunction; |
| GeneratorFunctionPrototype[toStringTagSymbol] = |
| GeneratorFunction.displayName = "GeneratorFunction"; |
| |
| // Helper for defining the .next, .throw, and .return methods of the |
| // Iterator interface in terms of a single ._invoke method. |
| function defineIteratorMethods(prototype) { |
| ["next", "throw", "return"].forEach(function(method) { |
| prototype[method] = function(arg) { |
| return this._invoke(method, arg); |
| }; |
| }); |
| } |
| |
| exports.isGeneratorFunction = function(genFun) { |
| var ctor = typeof genFun === "function" && genFun.constructor; |
| return ctor |
| ? ctor === GeneratorFunction || |
| // For the native GeneratorFunction constructor, the best we can |
| // do is to check its .name property. |
| (ctor.displayName || ctor.name) === "GeneratorFunction" |
| : false; |
| }; |
| |
| exports.mark = function(genFun) { |
| if (Object.setPrototypeOf) { |
| Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); |
| } else { |
| genFun.__proto__ = GeneratorFunctionPrototype; |
| if (!(toStringTagSymbol in genFun)) { |
| genFun[toStringTagSymbol] = "GeneratorFunction"; |
| } |
| } |
| genFun.prototype = Object.create(Gp); |
| return genFun; |
| }; |
| |
| // Within the body of any async function, `await x` is transformed to |
| // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test |
| // `hasOwn.call(value, "__await")` to determine if the yielded value is |
| // meant to be awaited. |
| exports.awrap = function(arg) { |
| return { __await: arg }; |
| }; |
| |
| function AsyncIterator(generator, PromiseImpl) { |
| function invoke(method, arg, resolve, reject) { |
| var record = tryCatch(generator[method], generator, arg); |
| if (record.type === "throw") { |
| reject(record.arg); |
| } else { |
| var result = record.arg; |
| var value = result.value; |
| if (value && |
| typeof value === "object" && |
| hasOwn.call(value, "__await")) { |
| return PromiseImpl.resolve(value.__await).then(function(value) { |
| invoke("next", value, resolve, reject); |
| }, function(err) { |
| invoke("throw", err, resolve, reject); |
| }); |
| } |
| |
| return PromiseImpl.resolve(value).then(function(unwrapped) { |
| // When a yielded Promise is resolved, its final value becomes |
| // the .value of the Promise<{value,done}> result for the |
| // current iteration. |
| result.value = unwrapped; |
| resolve(result); |
| }, function(error) { |
| // If a rejected Promise was yielded, throw the rejection back |
| // into the async generator function so it can be handled there. |
| return invoke("throw", error, resolve, reject); |
| }); |
| } |
| } |
| |
| var previousPromise; |
| |
| function enqueue(method, arg) { |
| function callInvokeWithMethodAndArg() { |
| return new PromiseImpl(function(resolve, reject) { |
| invoke(method, arg, resolve, reject); |
| }); |
| } |
| |
| return previousPromise = |
| // If enqueue has been called before, then we want to wait until |
| // all previous Promises have been resolved before calling invoke, |
| // so that results are always delivered in the correct order. If |
| // enqueue has not been called before, then it is important to |
| // call invoke immediately, without waiting on a callback to fire, |
| // so that the async generator function has the opportunity to do |
| // any necessary setup in a predictable way. This predictability |
| // is why the Promise constructor synchronously invokes its |
| // executor callback, and why async functions synchronously |
| // execute code before the first await. Since we implement simple |
| // async functions in terms of async generators, it is especially |
| // important to get this right, even though it requires care. |
| previousPromise ? previousPromise.then( |
| callInvokeWithMethodAndArg, |
| // Avoid propagating failures to Promises returned by later |
| // invocations of the iterator. |
| callInvokeWithMethodAndArg |
| ) : callInvokeWithMethodAndArg(); |
| } |
| |
| // Define the unified helper method that is used to implement .next, |
| // .throw, and .return (see defineIteratorMethods). |
| this._invoke = enqueue; |
| } |
| |
| defineIteratorMethods(AsyncIterator.prototype); |
| AsyncIterator.prototype[asyncIteratorSymbol] = function () { |
| return this; |
| }; |
| exports.AsyncIterator = AsyncIterator; |
| |
| // Note that simple async functions are implemented on top of |
| // AsyncIterator objects; they just return a Promise for the value of |
| // the final result produced by the iterator. |
| exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) { |
| if (PromiseImpl === void 0) PromiseImpl = Promise; |
| |
| var iter = new AsyncIterator( |
| wrap(innerFn, outerFn, self, tryLocsList), |
| PromiseImpl |
| ); |
| |
| return exports.isGeneratorFunction(outerFn) |
| ? iter // If outerFn is a generator, return the full iterator. |
| : iter.next().then(function(result) { |
| return result.done ? result.value : iter.next(); |
| }); |
| }; |
| |
| function makeInvokeMethod(innerFn, self, context) { |
| var state = GenStateSuspendedStart; |
| |
| return function invoke(method, arg) { |
| if (state === GenStateExecuting) { |
| throw new Error("Generator is already running"); |
| } |
| |
| if (state === GenStateCompleted) { |
| if (method === "throw") { |
| throw arg; |
| } |
| |
| // Be forgiving, per 25.3.3.3.3 of the spec: |
| // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume |
| return doneResult(); |
| } |
| |
| context.method = method; |
| context.arg = arg; |
| |
| while (true) { |
| var delegate = context.delegate; |
| if (delegate) { |
| var delegateResult = maybeInvokeDelegate(delegate, context); |
| if (delegateResult) { |
| if (delegateResult === ContinueSentinel) continue; |
| return delegateResult; |
| } |
| } |
| |
| if (context.method === "next") { |
| // Setting context._sent for legacy support of Babel's |
| // function.sent implementation. |
| context.sent = context._sent = context.arg; |
| |
| } else if (context.method === "throw") { |
| if (state === GenStateSuspendedStart) { |
| state = GenStateCompleted; |
| throw context.arg; |
| } |
| |
| context.dispatchException(context.arg); |
| |
| } else if (context.method === "return") { |
| context.abrupt("return", context.arg); |
| } |
| |
| state = GenStateExecuting; |
| |
| var record = tryCatch(innerFn, self, context); |
| if (record.type === "normal") { |
| // If an exception is thrown from innerFn, we leave state === |
| // GenStateExecuting and loop back for another invocation. |
| state = context.done |
| ? GenStateCompleted |
| : GenStateSuspendedYield; |
| |
| if (record.arg === ContinueSentinel) { |
| continue; |
| } |
| |
| return { |
| value: record.arg, |
| done: context.done |
| }; |
| |
| } else if (record.type === "throw") { |
| state = GenStateCompleted; |
| // Dispatch the exception by looping back around to the |
| // context.dispatchException(context.arg) call above. |
| context.method = "throw"; |
| context.arg = record.arg; |
| } |
| } |
| }; |
| } |
| |
| // Call delegate.iterator[context.method](context.arg) and handle the |
| // result, either by returning a { value, done } result from the |
| // delegate iterator, or by modifying context.method and context.arg, |
| // setting context.delegate to null, and returning the ContinueSentinel. |
| function maybeInvokeDelegate(delegate, context) { |
| var method = delegate.iterator[context.method]; |
| if (method === undefined) { |
| // A .throw or .return when the delegate iterator has no .throw |
| // method always terminates the yield* loop. |
| context.delegate = null; |
| |
| if (context.method === "throw") { |
| // Note: ["return"] must be used for ES3 parsing compatibility. |
| if (delegate.iterator["return"]) { |
| // If the delegate iterator has a return method, give it a |
| // chance to clean up. |
| context.method = "return"; |
| context.arg = undefined; |
| maybeInvokeDelegate(delegate, context); |
| |
| if (context.method === "throw") { |
| // If maybeInvokeDelegate(context) changed context.method from |
| // "return" to "throw", let that override the TypeError below. |
| return ContinueSentinel; |
| } |
| } |
| |
| context.method = "throw"; |
| context.arg = new TypeError( |
| "The iterator does not provide a 'throw' method"); |
| } |
| |
| return ContinueSentinel; |
| } |
| |
| var record = tryCatch(method, delegate.iterator, context.arg); |
| |
| if (record.type === "throw") { |
| context.method = "throw"; |
| context.arg = record.arg; |
| context.delegate = null; |
| return ContinueSentinel; |
| } |
| |
| var info = record.arg; |
| |
| if (! info) { |
| context.method = "throw"; |
| context.arg = new TypeError("iterator result is not an object"); |
| context.delegate = null; |
| return ContinueSentinel; |
| } |
| |
| if (info.done) { |
| // Assign the result of the finished delegate to the temporary |
| // variable specified by delegate.resultName (see delegateYield). |
| context[delegate.resultName] = info.value; |
| |
| // Resume execution at the desired location (see delegateYield). |
| context.next = delegate.nextLoc; |
| |
| // If context.method was "throw" but the delegate handled the |
| // exception, let the outer generator proceed normally. If |
| // context.method was "next", forget context.arg since it has been |
| // "consumed" by the delegate iterator. If context.method was |
| // "return", allow the original .return call to continue in the |
| // outer generator. |
| if (context.method !== "return") { |
| context.method = "next"; |
| context.arg = undefined; |
| } |
| |
| } else { |
| // Re-yield the result returned by the delegate method. |
| return info; |
| } |
| |
| // The delegate iterator is finished, so forget it and continue with |
| // the outer generator. |
| context.delegate = null; |
| return ContinueSentinel; |
| } |
| |
| // Define Generator.prototype.{next,throw,return} in terms of the |
| // unified ._invoke helper method. |
| defineIteratorMethods(Gp); |
| |
| Gp[toStringTagSymbol] = "Generator"; |
| |
| // A Generator should always return itself as the iterator object when the |
| // @@iterator function is called on it. Some browsers' implementations of the |
| // iterator prototype chain incorrectly implement this, causing the Generator |
| // object to not be returned from this call. This ensures that doesn't happen. |
| // See https://github.com/facebook/regenerator/issues/274 for more details. |
| Gp[iteratorSymbol] = function() { |
| return this; |
| }; |
| |
| Gp.toString = function() { |
| return "[object Generator]"; |
| }; |
| |
| function pushTryEntry(locs) { |
| var entry = { tryLoc: locs[0] }; |
| |
| if (1 in locs) { |
| entry.catchLoc = locs[1]; |
| } |
| |
| if (2 in locs) { |
| entry.finallyLoc = locs[2]; |
| entry.afterLoc = locs[3]; |
| } |
| |
| this.tryEntries.push(entry); |
| } |
| |
| function resetTryEntry(entry) { |
| var record = entry.completion || {}; |
| record.type = "normal"; |
| delete record.arg; |
| entry.completion = record; |
| } |
| |
| function Context(tryLocsList) { |
| // The root entry object (effectively a try statement without a catch |
| // or a finally block) gives us a place to store values thrown from |
| // locations where there is no enclosing try statement. |
| this.tryEntries = [{ tryLoc: "root" }]; |
| tryLocsList.forEach(pushTryEntry, this); |
| this.reset(true); |
| } |
| |
| exports.keys = function(object) { |
| var keys = []; |
| for (var key in object) { |
| keys.push(key); |
| } |
| keys.reverse(); |
| |
| // Rather than returning an object with a next method, we keep |
| // things simple and return the next function itself. |
| return function next() { |
| while (keys.length) { |
| var key = keys.pop(); |
| if (key in object) { |
| next.value = key; |
| next.done = false; |
| return next; |
| } |
| } |
| |
| // To avoid creating an additional object, we just hang the .value |
| // and .done properties off the next function object itself. This |
| // also ensures that the minifier will not anonymize the function. |
| next.done = true; |
| return next; |
| }; |
| }; |
| |
| function values(iterable) { |
| if (iterable) { |
| var iteratorMethod = iterable[iteratorSymbol]; |
| if (iteratorMethod) { |
| return iteratorMethod.call(iterable); |
| } |
| |
| if (typeof iterable.next === "function") { |
| return iterable; |
| } |
| |
| if (!isNaN(iterable.length)) { |
| var i = -1, next = function next() { |
| while (++i < iterable.length) { |
| if (hasOwn.call(iterable, i)) { |
| next.value = iterable[i]; |
| next.done = false; |
| return next; |
| } |
| } |
| |
| next.value = undefined; |
| next.done = true; |
| |
| return next; |
| }; |
| |
| return next.next = next; |
| } |
| } |
| |
| // Return an iterator with no values. |
| return { next: doneResult }; |
| } |
| exports.values = values; |
| |
| function doneResult() { |
| return { value: undefined, done: true }; |
| } |
| |
| Context.prototype = { |
| constructor: Context, |
| |
| reset: function(skipTempReset) { |
| this.prev = 0; |
| this.next = 0; |
| // Resetting context._sent for legacy support of Babel's |
| // function.sent implementation. |
| this.sent = this._sent = undefined; |
| this.done = false; |
| this.delegate = null; |
| |
| this.method = "next"; |
| this.arg = undefined; |
| |
| this.tryEntries.forEach(resetTryEntry); |
| |
| if (!skipTempReset) { |
| for (var name in this) { |
| // Not sure about the optimal order of these conditions: |
| if (name.charAt(0) === "t" && |
| hasOwn.call(this, name) && |
| !isNaN(+name.slice(1))) { |
| this[name] = undefined; |
| } |
| } |
| } |
| }, |
| |
| stop: function() { |
| this.done = true; |
| |
| var rootEntry = this.tryEntries[0]; |
| var rootRecord = rootEntry.completion; |
| if (rootRecord.type === "throw") { |
| throw rootRecord.arg; |
| } |
| |
| return this.rval; |
| }, |
| |
| dispatchException: function(exception) { |
| if (this.done) { |
| throw exception; |
| } |
| |
| var context = this; |
| function handle(loc, caught) { |
| record.type = "throw"; |
| record.arg = exception; |
| context.next = loc; |
| |
| if (caught) { |
| // If the dispatched exception was caught by a catch block, |
| // then let that catch block handle the exception normally. |
| context.method = "next"; |
| context.arg = undefined; |
| } |
| |
| return !! caught; |
| } |
| |
| for (var i = this.tryEntries.length - 1; i >= 0; --i) { |
| var entry = this.tryEntries[i]; |
| var record = entry.completion; |
| |
| if (entry.tryLoc === "root") { |
| // Exception thrown outside of any try block that could handle |
| // it, so set the completion value of the entire function to |
| // throw the exception. |
| return handle("end"); |
| } |
| |
| if (entry.tryLoc <= this.prev) { |
| var hasCatch = hasOwn.call(entry, "catchLoc"); |
| var hasFinally = hasOwn.call(entry, "finallyLoc"); |
| |
| if (hasCatch && hasFinally) { |
| if (this.prev < entry.catchLoc) { |
| return handle(entry.catchLoc, true); |
| } else if (this.prev < entry.finallyLoc) { |
| return handle(entry.finallyLoc); |
| } |
| |
| } else if (hasCatch) { |
| if (this.prev < entry.catchLoc) { |
| return handle(entry.catchLoc, true); |
| } |
| |
| } else if (hasFinally) { |
| if (this.prev < entry.finallyLoc) { |
| return handle(entry.finallyLoc); |
| } |
| |
| } else { |
| throw new Error("try statement without catch or finally"); |
| } |
| } |
| } |
| }, |
| |
| abrupt: function(type, arg) { |
| for (var i = this.tryEntries.length - 1; i >= 0; --i) { |
| var entry = this.tryEntries[i]; |
| if (entry.tryLoc <= this.prev && |
| hasOwn.call(entry, "finallyLoc") && |
| this.prev < entry.finallyLoc) { |
| var finallyEntry = entry; |
| break; |
| } |
| } |
| |
| if (finallyEntry && |
| (type === "break" || |
| type === "continue") && |
| finallyEntry.tryLoc <= arg && |
| arg <= finallyEntry.finallyLoc) { |
| // Ignore the finally entry if control is not jumping to a |
| // location outside the try/catch block. |
| finallyEntry = null; |
| } |
| |
| var record = finallyEntry ? finallyEntry.completion : {}; |
| record.type = type; |
| record.arg = arg; |
| |
| if (finallyEntry) { |
| this.method = "next"; |
| this.next = finallyEntry.finallyLoc; |
| return ContinueSentinel; |
| } |
| |
| return this.complete(record); |
| }, |
| |
| complete: function(record, afterLoc) { |
| if (record.type === "throw") { |
| throw record.arg; |
| } |
| |
| if (record.type === "break" || |
| record.type === "continue") { |
| this.next = record.arg; |
| } else if (record.type === "return") { |
| this.rval = this.arg = record.arg; |
| this.method = "return"; |
| this.next = "end"; |
| } else if (record.type === "normal" && afterLoc) { |
| this.next = afterLoc; |
| } |
| |
| return ContinueSentinel; |
| }, |
| |
| finish: function(finallyLoc) { |
| for (var i = this.tryEntries.length - 1; i >= 0; --i) { |
| var entry = this.tryEntries[i]; |
| if (entry.finallyLoc === finallyLoc) { |
| this.complete(entry.completion, entry.afterLoc); |
| resetTryEntry(entry); |
| return ContinueSentinel; |
| } |
| } |
| }, |
| |
| "catch": function(tryLoc) { |
| for (var i = this.tryEntries.length - 1; i >= 0; --i) { |
| var entry = this.tryEntries[i]; |
| if (entry.tryLoc === tryLoc) { |
| var record = entry.completion; |
| if (record.type === "throw") { |
| var thrown = record.arg; |
| resetTryEntry(entry); |
| } |
| return thrown; |
| } |
| } |
| |
| // The context.catch method must only be called with a location |
| // argument that corresponds to a known catch block. |
| throw new Error("illegal catch attempt"); |
| }, |
| |
| delegateYield: function(iterable, resultName, nextLoc) { |
| this.delegate = { |
| iterator: values(iterable), |
| resultName: resultName, |
| nextLoc: nextLoc |
| }; |
| |
| if (this.method === "next") { |
| // Deliberately forget the last sent value so that we don't |
| // accidentally pass it on to the delegate. |
| this.arg = undefined; |
| } |
| |
| return ContinueSentinel; |
| } |
| }; |
| |
| // Regardless of whether this script is executing as a CommonJS module |
| // or not, return the runtime object so that we can declare the variable |
| // regeneratorRuntime in the outer scope, which allows this module to be |
| // injected easily by `bin/regenerator --include-runtime script.js`. |
| return exports; |
| |
| }( |
| // If this script is executing as a CommonJS module, use module.exports |
| // as the regeneratorRuntime namespace. Otherwise create a new empty |
| // object. Either way, the resulting object will be used to initialize |
| // the regeneratorRuntime variable at the top of this file. |
| true ? module.exports : undefined |
| )); |
| |
| try { |
| regeneratorRuntime = runtime; |
| } catch (accidentalStrictMode) { |
| // This module should not be running in strict mode, so the above |
| // assignment should always work unless something is misconfigured. Just |
| // in case runtime.js accidentally runs in strict mode, we can escape |
| // strict mode using a global Function call. This could conceivably fail |
| // if a Content Security Policy forbids using Function, but in that case |
| // the proper solution is to fix the accidental strict mode problem. If |
| // you've misconfigured your bundler to force strict mode and applied a |
| // CSP to forbid Function, and you're not willing to fix either of those |
| // problems, please detail your unique predicament in a GitHub issue. |
| Function("r", "regeneratorRuntime = r")(runtime); |
| } |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/webpack/buildin/global.js": |
| /*!*************************************************!*\ |
| !*** ../node_modules/webpack/buildin/global.js ***! |
| \*************************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| var g; |
| |
| // This works in non-strict mode |
| g = (function() { |
| return this; |
| })(); |
| |
| try { |
| // This works if eval is allowed (see CSP) |
| g = g || new Function("return this")(); |
| } catch (e) { |
| // This works if the window reference is available |
| if (typeof window === "object") g = window; |
| } |
| |
| // g can still be undefined, but nothing to do about it... |
| // We return undefined, instead of nothing here, so it's |
| // easier to handle this case. if(!global) { ...} |
| |
| module.exports = g; |
| |
| |
| /***/ }), |
| |
| /***/ "../node_modules/xtend/immutable.js": |
| /*!******************************************!*\ |
| !*** ../node_modules/xtend/immutable.js ***! |
| \******************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports) { |
| |
| module.exports = extend |
| |
| var hasOwnProperty = Object.prototype.hasOwnProperty; |
| |
| function extend() { |
| var target = {} |
| |
| for (var i = 0; i < arguments.length; i++) { |
| var source = arguments[i] |
| |
| for (var key in source) { |
| if (hasOwnProperty.call(source, key)) { |
| target[key] = source[key] |
| } |
| } |
| } |
| |
| return target |
| } |
| |
| |
| /***/ }), |
| |
| /***/ "../packages/dom/src/cartesian.js": |
| /*!****************************************!*\ |
| !*** ../packages/dom/src/cartesian.js ***! |
| \****************************************/ |
| /*! exports provided: product */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "product", function() { return product; }); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/toConsumableArray */ "../node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ "../node_modules/@babel/runtime-corejs3/core-js-stable/promise.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_3__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_some__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/some */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/some.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_some__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_some__WEBPACK_IMPORTED_MODULE_4__); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/regenerator */ "../node_modules/@babel/runtime-corejs3/regenerator/index.js"); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncToGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncToGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/symbol/async-iterator */ "../node_modules/@babel/runtime-corejs3/core-js-stable/symbol/async-iterator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_7__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_8__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncIterator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncIterator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncGeneratorDelegate__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncGeneratorDelegate */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncGeneratorDelegate.js"); |
| /* harmony import */ var cartesian__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! cartesian */ "../node_modules/cartesian/index.js"); |
| /* harmony import */ var cartesian__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(cartesian__WEBPACK_IMPORTED_MODULE_13__); |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function product() { |
| return _product.apply(this, arguments); |
| } |
| |
| function _product() { |
| _product = Object(_babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_9__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default.a.mark(function _callee3() { |
| var _len, |
| iterables, |
| _key, |
| iterators, |
| logs, |
| nextValuePromises, |
| _loop, |
| _ret, |
| _args4 = arguments; |
| |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default.a.wrap(function _callee3$(_context5) { |
| while (1) { |
| switch (_context5.prev = _context5.next) { |
| case 0: |
| for (_len = _args4.length, iterables = new Array(_len), _key = 0; _key < _len; _key++) { |
| iterables[_key] = _args4[_key]; |
| } |
| |
| // We listen to all iterators in parallel, while logging all the values they |
| // produce. Whenever an iterator produces a value, we produce and yield all |
| // combinations of that value with the logged values from other iterators. |
| // Every combination is thus made exactly once, and as soon as it is known. |
| iterators = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_8___default()(iterables).call(iterables, function (iterable) { |
| return iterable[_babel_runtime_corejs3_core_js_stable_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_7___default.a](); |
| }); // Initialise an empty log for each iterable. |
| |
| logs = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_8___default()(iterables).call(iterables, function () { |
| return []; |
| }); |
| nextValuePromises = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_8___default()(iterators).call(iterators, function (iterator, iterableNr) { |
| return iterator.next().then( /*#__PURE__*/function () { |
| var _ref = Object(_babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_6__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default.a.mark(function _callee(_ref2) { |
| var value, done; |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default.a.wrap(function _callee$(_context) { |
| while (1) { |
| switch (_context.prev = _context.next) { |
| case 0: |
| value = _ref2.value, done = _ref2.done; |
| _context.next = 3; |
| return value; |
| |
| case 3: |
| _context.t0 = _context.sent; |
| _context.t1 = done; |
| return _context.abrupt("return", { |
| value: _context.t0, |
| done: _context.t1 |
| }); |
| |
| case 6: |
| case "end": |
| return _context.stop(); |
| } |
| } |
| }, _callee); |
| })); |
| |
| return function (_x) { |
| return _ref.apply(this, arguments); |
| }; |
| }()).then( // Label the result with iterableNr, to know which iterable produced |
| // this value after Promise.race below. |
| function (_ref3) { |
| var value = _ref3.value, |
| done = _ref3.done; |
| return { |
| value: value, |
| done: done, |
| iterableNr: iterableNr |
| }; |
| }); |
| }); // Keep listening as long as any of the iterables is not yet exhausted. |
| |
| _loop = /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default.a.mark(function _loop() { |
| var _context2; |
| |
| var _ref4, value, done, iterableNr, arrays, combinations; |
| |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default.a.wrap(function _loop$(_context4) { |
| while (1) { |
| switch (_context4.prev = _context4.next) { |
| case 0: |
| _context4.next = 2; |
| return Object(_babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_10__["default"])(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_3___default.a.race(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(nextValuePromises).call(nextValuePromises, function (p) { |
| return p !== null; |
| }))); |
| |
| case 2: |
| _ref4 = _context4.sent; |
| value = _ref4.value; |
| done = _ref4.done; |
| iterableNr = _ref4.iterableNr; |
| |
| if (!done) { |
| _context4.next = 9; |
| break; |
| } |
| |
| nextValuePromises[iterableNr] = null; |
| return _context4.abrupt("return", "continue"); |
| |
| case 9: |
| // Produce all combinations of the received value with the logged values |
| // from the other iterables. |
| arrays = Object(_babel_runtime_corejs3_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(logs); |
| arrays[iterableNr] = [value]; |
| combinations = cartesian__WEBPACK_IMPORTED_MODULE_13___default()(arrays); // Append the received value to the right log. |
| |
| logs[iterableNr] = _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_0___default()(_context2 = []).call(_context2, Object(_babel_runtime_corejs3_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(logs[iterableNr]), [value]); // Start listening for the next value of this iterable. |
| |
| nextValuePromises[iterableNr] = iterators[iterableNr].next().then( /*#__PURE__*/function () { |
| var _ref5 = Object(_babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_6__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default.a.mark(function _callee2(_ref6) { |
| var value, done; |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_5___default.a.wrap(function _callee2$(_context3) { |
| while (1) { |
| switch (_context3.prev = _context3.next) { |
| case 0: |
| value = _ref6.value, done = _ref6.done; |
| _context3.next = 3; |
| return value; |
| |
| case 3: |
| _context3.t0 = _context3.sent; |
| _context3.t1 = done; |
| return _context3.abrupt("return", { |
| value: _context3.t0, |
| done: _context3.t1 |
| }); |
| |
| case 6: |
| case "end": |
| return _context3.stop(); |
| } |
| } |
| }, _callee2); |
| })); |
| |
| return function (_x2) { |
| return _ref5.apply(this, arguments); |
| }; |
| }()).then(function (_ref7) { |
| var value = _ref7.value, |
| done = _ref7.done; |
| return { |
| value: value, |
| done: done, |
| iterableNr: iterableNr |
| }; |
| }); // Yield each of the produced combinations separately. |
| |
| return _context4.delegateYield(Object(_babel_runtime_corejs3_helpers_esm_asyncGeneratorDelegate__WEBPACK_IMPORTED_MODULE_12__["default"])(Object(_babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_11__["default"])(combinations), _babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_10__["default"]), "t0", 15); |
| |
| case 15: |
| case "end": |
| return _context4.stop(); |
| } |
| } |
| }, _loop); |
| }); |
| |
| case 5: |
| if (!_babel_runtime_corejs3_core_js_stable_instance_some__WEBPACK_IMPORTED_MODULE_4___default()(nextValuePromises).call(nextValuePromises, function (p) { |
| return p !== null; |
| })) { |
| _context5.next = 12; |
| break; |
| } |
| |
| return _context5.delegateYield(_loop(), "t0", 7); |
| |
| case 7: |
| _ret = _context5.t0; |
| |
| if (!(_ret === "continue")) { |
| _context5.next = 10; |
| break; |
| } |
| |
| return _context5.abrupt("continue", 5); |
| |
| case 10: |
| _context5.next = 5; |
| break; |
| |
| case 12: |
| case "end": |
| return _context5.stop(); |
| } |
| } |
| }, _callee3); |
| })); |
| return _product.apply(this, arguments); |
| } |
| |
| /***/ }), |
| |
| /***/ "../packages/dom/src/css.js": |
| /*!**********************************!*\ |
| !*** ../packages/dom/src/css.js ***! |
| \**********************************/ |
| /*! exports provided: createCssSelector */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCssSelector", function() { return createCssSelector; }); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/regenerator */ "../node_modules/@babel/runtime-corejs3/regenerator/index.js"); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncIterator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncIterator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncGeneratorDelegate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncGeneratorDelegate */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncGeneratorDelegate.js"); |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| |
| |
| function createCssSelector(selector) { |
| return (/*#__PURE__*/function () { |
| var _matchAll = Object(_babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_1__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(scope) { |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { |
| while (1) { |
| switch (_context.prev = _context.next) { |
| case 0: |
| return _context.delegateYield(Object(_babel_runtime_corejs3_helpers_esm_asyncGeneratorDelegate__WEBPACK_IMPORTED_MODULE_4__["default"])(Object(_babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_3__["default"])(scope.querySelectorAll(selector.value)), _babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__["default"]), "t0", 1); |
| |
| case 1: |
| case "end": |
| return _context.stop(); |
| } |
| } |
| }, _callee); |
| })); |
| |
| function matchAll(_x) { |
| return _matchAll.apply(this, arguments); |
| } |
| |
| return matchAll; |
| }() |
| ); |
| } |
| |
| /***/ }), |
| |
| /***/ "../packages/dom/src/highlight-range.js": |
| /*!**********************************************!*\ |
| !*** ../packages/dom/src/highlight-range.js ***! |
| \**********************************************/ |
| /*! exports provided: highlightRange */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "highlightRange", function() { return highlightRange; }); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "../node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_1__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/get-iterator */ "../node_modules/@babel/runtime-corejs3/core-js/get-iterator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_2__); |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| // Wrap each text node in a given DOM Range with a <mark> or other element. |
| // Breaks start and/or end node if needed. |
| // Returns a function that cleans up the created highlight (not a perfect undo: split text nodes are |
| // not merged again). |
| // |
| // Parameters: |
| // - range: a DOM Range object. Note that as highlighting modifies the DOM, the range may be |
| // unusable afterwards |
| // - tagName: the element used to wrap text nodes. Defaults to 'mark'. |
| // - attributes: an Object defining any attributes to be set on the wrapper elements. |
| function highlightRange(range) { |
| var tagName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mark'; |
| var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; |
| if (range.collapsed) return; // First put all nodes in an array (splits start and end nodes if needed) |
| |
| var nodes = textNodesInRange(range); // Highlight each node |
| |
| var highlightElements = []; |
| var _iteratorNormalCompletion = true; |
| var _didIteratorError = false; |
| var _iteratorError = undefined; |
| |
| try { |
| for (var _iterator = _babel_runtime_corejs3_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_2___default()(nodes), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { |
| var node = _step.value; |
| var highlightElement = wrapNodeInHighlight(node, tagName, attributes); |
| highlightElements.push(highlightElement); |
| } // Return a function that cleans up the highlightElements. |
| |
| } catch (err) { |
| _didIteratorError = true; |
| _iteratorError = err; |
| } finally { |
| try { |
| if (!_iteratorNormalCompletion && _iterator.return != null) { |
| _iterator.return(); |
| } |
| } finally { |
| if (_didIteratorError) { |
| throw _iteratorError; |
| } |
| } |
| } |
| |
| function removeHighlights() { |
| // Remove each of the created highlightElements. |
| for (var highlightIdx in highlightElements) { |
| removeHighlight(highlightElements[highlightIdx]); |
| } |
| } |
| |
| return removeHighlights; |
| } // Return an array of the text nodes in the range. Split the start and end nodes if required. |
| |
| function textNodesInRange(range) { |
| // If the start or end node is a text node and only partly in the range, split it. |
| if (range.startContainer.nodeType === Node.TEXT_NODE && range.startOffset > 0) { |
| var endOffset = range.endOffset; // (this may get lost when the splitting the node) |
| |
| var createdNode = range.startContainer.splitText(range.startOffset); |
| |
| if (range.endContainer === range.startContainer) { |
| // If the end was in the same container, it will now be in the newly created node. |
| range.setEnd(createdNode, endOffset - range.startOffset); |
| } |
| |
| range.setStart(createdNode, 0); |
| } |
| |
| if (range.endContainer.nodeType === Node.TEXT_NODE && range.endOffset < range.endContainer.length) { |
| range.endContainer.splitText(range.endOffset); |
| } // Collect the text nodes. |
| |
| |
| var walker = range.startContainer.ownerDocument.createTreeWalker(range.commonAncestorContainer, NodeFilter.SHOW_TEXT, function (node) { |
| return range.intersectsNode(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT; |
| }); |
| walker.currentNode = range.startContainer; // // Optimise by skipping nodes that are explicitly outside the range. |
| // const NodeTypesWithCharacterOffset = [ |
| // Node.TEXT_NODE, |
| // Node.PROCESSING_INSTRUCTION_NODE, |
| // Node.COMMENT_NODE, |
| // ]; |
| // if (!NodeTypesWithCharacterOffset.includes(range.startContainer.nodeType)) { |
| // if (range.startOffset < range.startContainer.childNodes.length) { |
| // walker.currentNode = range.startContainer.childNodes[range.startOffset]; |
| // } else { |
| // walker.nextSibling(); // TODO verify this is correct. |
| // } |
| // } |
| |
| var nodes = []; |
| if (walker.currentNode.nodeType === Node.TEXT_NODE) nodes.push(walker.currentNode); |
| |
| while (walker.nextNode() && range.comparePoint(walker.currentNode, 0) !== 1) { |
| nodes.push(walker.currentNode); |
| } |
| |
| return nodes; |
| } // Replace [node] with <tagName ...attributes>[node]</tagName> |
| |
| |
| function wrapNodeInHighlight(node, tagName, attributes) { |
| var _context; |
| |
| var highlightElement = node.ownerDocument.createElement(tagName); |
| |
| _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_1___default()(_context = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(attributes)).call(_context, function (key) { |
| highlightElement.setAttribute(key, attributes[key]); |
| }); |
| |
| var tempRange = node.ownerDocument.createRange(); |
| tempRange.selectNode(node); |
| tempRange.surroundContents(highlightElement); |
| return highlightElement; |
| } // Remove a highlight element created with wrapNodeInHighlight. |
| |
| |
| function removeHighlight(highlightElement) { |
| if (highlightElement.childNodes.length === 1) { |
| highlightElement.parentNode.replaceChild(highlightElement.firstChild, highlightElement); |
| } else { |
| // If the highlight somehow contains multiple nodes now, move them all. |
| while (highlightElement.firstChild) { |
| highlightElement.parentNode.insertBefore(highlightElement.firstChild, highlightElement); |
| } |
| |
| highlightElement.remove(); |
| } |
| } |
| |
| /***/ }), |
| |
| /***/ "../packages/dom/src/index.js": |
| /*!************************************!*\ |
| !*** ../packages/dom/src/index.js ***! |
| \************************************/ |
| /*! exports provided: createCssSelector, createRangeSelectorCreator, createTextQuoteSelector, describeTextQuote, highlightRange */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css */ "../packages/dom/src/css.js"); |
| /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createCssSelector", function() { return _css__WEBPACK_IMPORTED_MODULE_0__["createCssSelector"]; }); |
| |
| /* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./range */ "../packages/dom/src/range.js"); |
| /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createRangeSelectorCreator", function() { return _range__WEBPACK_IMPORTED_MODULE_1__["createRangeSelectorCreator"]; }); |
| |
| /* harmony import */ var _text_quote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./text-quote */ "../packages/dom/src/text-quote.js"); |
| /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createTextQuoteSelector", function() { return _text_quote__WEBPACK_IMPORTED_MODULE_2__["createTextQuoteSelector"]; }); |
| |
| /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "describeTextQuote", function() { return _text_quote__WEBPACK_IMPORTED_MODULE_2__["describeTextQuote"]; }); |
| |
| /* harmony import */ var _highlight_range__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./highlight-range */ "../packages/dom/src/highlight-range.js"); |
| /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "highlightRange", function() { return _highlight_range__WEBPACK_IMPORTED_MODULE_3__["highlightRange"]; }); |
| |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| |
| |
| /***/ }), |
| |
| /***/ "../packages/dom/src/range.js": |
| /*!************************************!*\ |
| !*** ../packages/dom/src/range.js ***! |
| \************************************/ |
| /*! exports provided: createRangeSelectorCreator */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRangeSelectorCreator", function() { return createRangeSelectorCreator; }); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/regenerator */ "../node_modules/@babel/runtime-corejs3/regenerator/index.js"); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/slicedToArray */ "../node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncIterator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncIterator.js"); |
| /* harmony import */ var _scope_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./scope.js */ "../packages/dom/src/scope.js"); |
| /* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cartesian.js */ "../packages/dom/src/cartesian.js"); |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| |
| |
| |
| |
| function createRangeSelectorCreator(createSelector) { |
| return function createRangeSelector(selector) { |
| var startSelector = createSelector(selector.startSelector); |
| var endSelector = createSelector(selector.endSelector); |
| return (/*#__PURE__*/function () { |
| var _matchAll = Object(_babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_3__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(scope) { |
| var document, startMatches, endMatches, pairs, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, _value2, _value3, start, end, result; |
| |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { |
| while (1) { |
| switch (_context.prev = _context.next) { |
| case 0: |
| document = Object(_scope_js__WEBPACK_IMPORTED_MODULE_5__["ownerDocument"])(scope); |
| startMatches = startSelector(scope); |
| endMatches = endSelector(scope); |
| pairs = Object(_cartesian_js__WEBPACK_IMPORTED_MODULE_6__["product"])(startMatches, endMatches); |
| _iteratorNormalCompletion = true; |
| _didIteratorError = false; |
| _context.prev = 6; |
| _iterator = Object(_babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_4__["default"])(pairs); |
| |
| case 8: |
| _context.next = 10; |
| return Object(_babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(_iterator.next()); |
| |
| case 10: |
| _step = _context.sent; |
| _iteratorNormalCompletion = _step.done; |
| _context.next = 14; |
| return Object(_babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(_step.value); |
| |
| case 14: |
| _value = _context.sent; |
| |
| if (_iteratorNormalCompletion) { |
| _context.next = 26; |
| break; |
| } |
| |
| _value2 = _value, _value3 = Object(_babel_runtime_corejs3_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_value2, 2), start = _value3[0], end = _value3[1]; |
| result = document.createRange(); |
| result.setStart(start.endContainer, start.endOffset); |
| result.setEnd(end.startContainer, end.startOffset); |
| |
| if (result.collapsed) { |
| _context.next = 23; |
| break; |
| } |
| |
| _context.next = 23; |
| return result; |
| |
| case 23: |
| _iteratorNormalCompletion = true; |
| _context.next = 8; |
| break; |
| |
| case 26: |
| _context.next = 32; |
| break; |
| |
| case 28: |
| _context.prev = 28; |
| _context.t0 = _context["catch"](6); |
| _didIteratorError = true; |
| _iteratorError = _context.t0; |
| |
| case 32: |
| _context.prev = 32; |
| _context.prev = 33; |
| |
| if (!(!_iteratorNormalCompletion && _iterator.return != null)) { |
| _context.next = 37; |
| break; |
| } |
| |
| _context.next = 37; |
| return Object(_babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(_iterator.return()); |
| |
| case 37: |
| _context.prev = 37; |
| |
| if (!_didIteratorError) { |
| _context.next = 40; |
| break; |
| } |
| |
| throw _iteratorError; |
| |
| case 40: |
| return _context.finish(37); |
| |
| case 41: |
| return _context.finish(32); |
| |
| case 42: |
| case "end": |
| return _context.stop(); |
| } |
| } |
| }, _callee, null, [[6, 28, 32, 42], [33,, 37, 41]]); |
| })); |
| |
| function matchAll(_x) { |
| return _matchAll.apply(this, arguments); |
| } |
| |
| return matchAll; |
| }() |
| ); |
| }; |
| } |
| |
| /***/ }), |
| |
| /***/ "../packages/dom/src/scope.js": |
| /*!************************************!*\ |
| !*** ../packages/dom/src/scope.js ***! |
| \************************************/ |
| /*! exports provided: ownerDocument, rangeFromScope */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ownerDocument", function() { return ownerDocument; }); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangeFromScope", function() { return rangeFromScope; }); |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| function ownerDocument(scope) { |
| if ('commonAncestorContainer' in scope) { |
| return scope.commonAncestorContainer.ownerDocument; |
| } |
| |
| return scope.ownerDocument; |
| } |
| function rangeFromScope(scope) { |
| if ('commonAncestorContainer' in scope) { |
| return scope; |
| } |
| |
| var document = scope.ownerDocument; |
| var range = document.createRange(); |
| range.selectNodeContents(scope); |
| return range; |
| } |
| |
| /***/ }), |
| |
| /***/ "../packages/dom/src/text-quote.js": |
| /*!*****************************************!*\ |
| !*** ../packages/dom/src/text-quote.js ***! |
| \*****************************************/ |
| /*! exports provided: createTextQuoteSelector, describeTextQuote */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createTextQuoteSelector", function() { return createTextQuoteSelector; }); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "describeTextQuote", function() { return describeTextQuote; }); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_every__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/every */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/every.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_every__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_every__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/slicedToArray */ "../node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/typeof */ "../node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/get-iterator */ "../node_modules/@babel/runtime-corejs3/core-js/get-iterator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_3__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/sort */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_4__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_flat_map__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/flat-map */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/flat-map.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_flat_map__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_flat_map__WEBPACK_IMPORTED_MODULE_6__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncToGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncToGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/regenerator */ "../node_modules/@babel/runtime-corejs3/regenerator/index.js"); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_8__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_9__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncIterator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncIterator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator.js"); |
| /* harmony import */ var dom_node_iterator__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! dom-node-iterator */ "../node_modules/dom-node-iterator/index.js"); |
| /* harmony import */ var dom_node_iterator__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(dom_node_iterator__WEBPACK_IMPORTED_MODULE_13__); |
| /* harmony import */ var dom_seek__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! dom-seek */ "../node_modules/dom-seek/index.js"); |
| /* harmony import */ var dom_seek__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(dom_seek__WEBPACK_IMPORTED_MODULE_14__); |
| /* harmony import */ var _scope_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./scope.js */ "../packages/dom/src/scope.js"); |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| // Node constants |
| |
| var TEXT_NODE = 3; // NodeFilter constants |
| |
| var SHOW_TEXT = 4; |
| |
| function firstTextNodeInRange(range) { |
| var startContainer = range.startContainer; |
| if (startContainer.nodeType === TEXT_NODE) return startContainer; |
| var root = range.commonAncestorContainer; |
| var iter = dom_node_iterator__WEBPACK_IMPORTED_MODULE_13___default()(root, SHOW_TEXT); |
| return iter.nextNode(); |
| } |
| |
| function createTextQuoteSelector(selector) { |
| return (/*#__PURE__*/function () { |
| var _matchAll = Object(_babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_12__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee(scope) { |
| var document, range, root, text, exact, prefix, suffix, pattern, iter, fromIndex, referenceNodeIndex, patternStartIndex, match, matchStartIndex, matchEndIndex; |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee$(_context) { |
| while (1) { |
| switch (_context.prev = _context.next) { |
| case 0: |
| document = Object(_scope_js__WEBPACK_IMPORTED_MODULE_15__["ownerDocument"])(scope); |
| range = Object(_scope_js__WEBPACK_IMPORTED_MODULE_15__["rangeFromScope"])(scope); |
| root = range.commonAncestorContainer; |
| text = range.toString(); |
| exact = selector.exact; |
| prefix = selector.prefix || ''; |
| suffix = selector.suffix || ''; |
| pattern = prefix + exact + suffix; |
| iter = dom_node_iterator__WEBPACK_IMPORTED_MODULE_13___default()(root, SHOW_TEXT); |
| fromIndex = 0; |
| referenceNodeIndex = 0; |
| |
| if (range.startContainer.nodeType === TEXT_NODE) { |
| referenceNodeIndex -= range.startOffset; |
| } |
| |
| case 12: |
| if (!(fromIndex < text.length)) { |
| _context.next = 31; |
| break; |
| } |
| |
| patternStartIndex = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_9___default()(text).call(text, pattern, fromIndex); |
| |
| if (!(patternStartIndex === -1)) { |
| _context.next = 16; |
| break; |
| } |
| |
| return _context.abrupt("return"); |
| |
| case 16: |
| match = document.createRange(); |
| matchStartIndex = patternStartIndex + prefix.length; |
| matchEndIndex = matchStartIndex + exact.length; // Seek to the start of the match. |
| |
| referenceNodeIndex += dom_seek__WEBPACK_IMPORTED_MODULE_14___default()(iter, matchStartIndex - referenceNodeIndex); // Normalize the reference to the start of the match. |
| |
| if (!iter.pointerBeforeReferenceNode) { |
| // Peek forward and skip over any empty nodes. |
| if (iter.nextNode()) { |
| while (iter.referenceNode.nodeValue.length === 0) { |
| iter.nextNode(); |
| } // The iterator now points to the end of the reference node. |
| // Move the iterator back to the start of the reference node. |
| |
| |
| iter.previousNode(); |
| } |
| } // Record the start container and offset. |
| |
| |
| match.setStart(iter.referenceNode, matchStartIndex - referenceNodeIndex); // Seek to the end of the match. |
| |
| referenceNodeIndex += dom_seek__WEBPACK_IMPORTED_MODULE_14___default()(iter, matchEndIndex - referenceNodeIndex); // Normalize the reference to the end of the match. |
| |
| if (!iter.pointerBeforeReferenceNode) { |
| // Peek forward and skip over any empty nodes. |
| if (iter.nextNode()) { |
| while (iter.referenceNode.nodeValue.length === 0) { |
| iter.nextNode(); |
| } // The iterator now points to the end of the reference node. |
| // Move the iterator back to the start of the reference node. |
| |
| |
| iter.previousNode(); |
| } // Maybe seek backwards to the start of the node. |
| |
| |
| referenceNodeIndex += dom_seek__WEBPACK_IMPORTED_MODULE_14___default()(iter, iter.referenceNode); |
| } // Record the end container and offset. |
| |
| |
| match.setEnd(iter.referenceNode, matchEndIndex - referenceNodeIndex); // Yield the match. |
| |
| _context.next = 27; |
| return match; |
| |
| case 27: |
| // Advance the search forward. |
| fromIndex = matchStartIndex + 1; |
| referenceNodeIndex += dom_seek__WEBPACK_IMPORTED_MODULE_14___default()(iter, fromIndex - referenceNodeIndex); |
| _context.next = 12; |
| break; |
| |
| case 31: |
| case "end": |
| return _context.stop(); |
| } |
| } |
| }, _callee); |
| })); |
| |
| function matchAll(_x) { |
| return _matchAll.apply(this, arguments); |
| } |
| |
| return matchAll; |
| }() |
| ); |
| } |
| function describeTextQuote(_x2) { |
| return _describeTextQuote.apply(this, arguments); |
| } |
| |
| function _describeTextQuote() { |
| _describeTextQuote = Object(_babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_7__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.mark(function _callee2(range) { |
| var scope, |
| root, |
| text, |
| exact, |
| selector, |
| iter, |
| startNode, |
| startIndex, |
| endIndex, |
| affixLengthPairs, |
| _iteratorNormalCompletion, |
| _didIteratorError, |
| _iteratorError, |
| _iterator, |
| _step, |
| _value, |
| match, |
| matchIter, |
| matchStartNode, |
| matchStartIndex, |
| matchEndIndex, |
| prefixLength, |
| suffixLength, |
| result, |
| _minimalSolution, |
| _minimalSolution2, |
| _prefixLength, |
| _suffixLength, |
| _args2 = arguments; |
| |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_8___default.a.wrap(function _callee2$(_context2) { |
| while (1) { |
| switch (_context2.prev = _context2.next) { |
| case 0: |
| scope = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : null; |
| scope = Object(_scope_js__WEBPACK_IMPORTED_MODULE_15__["rangeFromScope"])(scope || Object(_scope_js__WEBPACK_IMPORTED_MODULE_15__["ownerDocument"])(range).documentElement); |
| root = scope.commonAncestorContainer; |
| text = scope.toString(); |
| exact = range.toString(); |
| selector = createTextQuoteSelector({ |
| exact: exact |
| }); |
| iter = dom_node_iterator__WEBPACK_IMPORTED_MODULE_13___default()(root, SHOW_TEXT); |
| startNode = firstTextNodeInRange(range); |
| startIndex = range.startContainer.nodeType === TEXT_NODE ? dom_seek__WEBPACK_IMPORTED_MODULE_14___default()(iter, startNode) + range.startOffset : dom_seek__WEBPACK_IMPORTED_MODULE_14___default()(iter, startNode); |
| endIndex = startIndex + exact.length; |
| affixLengthPairs = []; |
| _iteratorNormalCompletion = true; |
| _didIteratorError = false; |
| _context2.prev = 13; |
| _iterator = Object(_babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_10__["default"])(selector(scope)); |
| |
| case 15: |
| _context2.next = 17; |
| return _iterator.next(); |
| |
| case 17: |
| _step = _context2.sent; |
| _iteratorNormalCompletion = _step.done; |
| _context2.next = 21; |
| return _step.value; |
| |
| case 21: |
| _value = _context2.sent; |
| |
| if (_iteratorNormalCompletion) { |
| _context2.next = 36; |
| break; |
| } |
| |
| match = _value; |
| matchIter = dom_node_iterator__WEBPACK_IMPORTED_MODULE_13___default()(root, SHOW_TEXT); |
| matchStartNode = firstTextNodeInRange(match); |
| matchStartIndex = match.startContainer.nodeType === TEXT_NODE ? dom_seek__WEBPACK_IMPORTED_MODULE_14___default()(matchIter, matchStartNode) + match.startOffset : dom_seek__WEBPACK_IMPORTED_MODULE_14___default()(matchIter, matchStartNode); |
| matchEndIndex = matchStartIndex + match.toString().length; // If the match is the same as the input range, continue. |
| |
| if (!(matchStartIndex === startIndex || matchEndIndex === endIndex)) { |
| _context2.next = 30; |
| break; |
| } |
| |
| return _context2.abrupt("continue", 33); |
| |
| case 30: |
| // Determine how many prefix characters are shared. |
| prefixLength = overlapRight(text.substring(0, matchStartIndex), text.substring(0, startIndex)); // Determine how many suffix characters are shared. |
| |
| suffixLength = overlap(text.substring(matchEndIndex), text.substring(endIndex)); // Record the affix lengths that would have precluded this match. |
| |
| affixLengthPairs.push([prefixLength + 1, suffixLength + 1]); |
| |
| case 33: |
| _iteratorNormalCompletion = true; |
| _context2.next = 15; |
| break; |
| |
| case 36: |
| _context2.next = 42; |
| break; |
| |
| case 38: |
| _context2.prev = 38; |
| _context2.t0 = _context2["catch"](13); |
| _didIteratorError = true; |
| _iteratorError = _context2.t0; |
| |
| case 42: |
| _context2.prev = 42; |
| _context2.prev = 43; |
| |
| if (!(!_iteratorNormalCompletion && _iterator.return != null)) { |
| _context2.next = 47; |
| break; |
| } |
| |
| _context2.next = 47; |
| return _iterator.return(); |
| |
| case 47: |
| _context2.prev = 47; |
| |
| if (!_didIteratorError) { |
| _context2.next = 50; |
| break; |
| } |
| |
| throw _iteratorError; |
| |
| case 50: |
| return _context2.finish(47); |
| |
| case 51: |
| return _context2.finish(42); |
| |
| case 52: |
| // Construct and return an unambiguous selector. |
| result = { |
| type: 'TextQuoteSelector', |
| exact: exact |
| }; |
| |
| if (affixLengthPairs.length) { |
| _minimalSolution = minimalSolution(affixLengthPairs), _minimalSolution2 = Object(_babel_runtime_corejs3_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_minimalSolution, 2), _prefixLength = _minimalSolution2[0], _suffixLength = _minimalSolution2[1]; |
| |
| if (_prefixLength > 0 && startIndex > 0) { |
| result.prefix = text.substring(startIndex - _prefixLength, startIndex); |
| } |
| |
| if (_suffixLength > 0 && endIndex < text.length) { |
| result.suffix = text.substring(endIndex, endIndex + _suffixLength); |
| } |
| } |
| |
| return _context2.abrupt("return", result); |
| |
| case 55: |
| case "end": |
| return _context2.stop(); |
| } |
| } |
| }, _callee2, null, [[13, 38, 42, 52], [43,, 47, 51]]); |
| })); |
| return _describeTextQuote.apply(this, arguments); |
| } |
| |
| function overlap(text1, text2) { |
| var count = 0; |
| |
| while (count < text1.length && count < text2.length) { |
| var c1 = text1[count]; |
| var c2 = text2[count]; |
| if (c1 !== c2) break; |
| count++; |
| } |
| |
| return count; |
| } |
| |
| function overlapRight(text1, text2) { |
| var count = 0; |
| |
| while (count < text1.length && count < text2.length) { |
| var c1 = text1[text1.length - 1 - count]; |
| var c2 = text2[text2.length - 1 - count]; |
| if (c1 !== c2) break; |
| count++; |
| } |
| |
| return count; |
| } |
| |
| function minimalSolution(requirements) { |
| // Build all the pairs and order them by their sums. |
| var pairs = _babel_runtime_corejs3_core_js_stable_instance_flat_map__WEBPACK_IMPORTED_MODULE_6___default()(requirements).call(requirements, function (l) { |
| return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(requirements).call(requirements, function (r) { |
| return [l[0], r[1]]; |
| }); |
| }); |
| |
| _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_4___default()(pairs).call(pairs, function (a, b) { |
| return a[0] + a[1] - (b[0] + b[1]); |
| }); // Find the first pair that satisfies every requirement. |
| |
| |
| var _iteratorNormalCompletion2 = true; |
| var _didIteratorError2 = false; |
| var _iteratorError2 = undefined; |
| |
| try { |
| var _loop = function _loop() { |
| var pair = _step2.value; |
| |
| var _pair = Object(_babel_runtime_corejs3_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(pair, 2), |
| p0 = _pair[0], |
| p1 = _pair[1]; |
| |
| if (_babel_runtime_corejs3_core_js_stable_instance_every__WEBPACK_IMPORTED_MODULE_0___default()(requirements).call(requirements, function (_ref) { |
| var _ref2 = Object(_babel_runtime_corejs3_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, 2), |
| r0 = _ref2[0], |
| r1 = _ref2[1]; |
| |
| return r0 <= p0 || r1 <= p1; |
| })) { |
| return { |
| v: pair |
| }; |
| } |
| }; |
| |
| for (var _iterator2 = _babel_runtime_corejs3_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_3___default()(pairs), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { |
| var _ret = _loop(); |
| |
| if (Object(_babel_runtime_corejs3_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(_ret) === "object") return _ret.v; |
| } // Return the largest pairing (unreachable). |
| |
| } catch (err) { |
| _didIteratorError2 = true; |
| _iteratorError2 = err; |
| } finally { |
| try { |
| if (!_iteratorNormalCompletion2 && _iterator2.return != null) { |
| _iterator2.return(); |
| } |
| } finally { |
| if (_didIteratorError2) { |
| throw _iteratorError2; |
| } |
| } |
| } |
| |
| return pairs[pairs.length - 1]; |
| } |
| |
| /***/ }), |
| |
| /***/ "../packages/fragment-identifier/src/fragment.js": |
| /*!*******************************************************!*\ |
| !*** ../packages/fragment-identifier/src/fragment.js ***! |
| \*******************************************************/ |
| /*! exports provided: SyntaxError, parse, default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SyntaxError", function() { return peg$SyntaxError; }); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return peg$parse; }); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_slice__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/slice */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_slice__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_slice__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/sort */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_1__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/array/is-array */ "../node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_2__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__); |
| |
| |
| |
| |
| |
| // Generated by PEG.js v0.11.0-master.f69239d, https://pegjs.org/ |
| function peg$subclass(child, parent) { |
| function C() { |
| this.constructor = child; |
| } |
| |
| C.prototype = parent.prototype; |
| child.prototype = new C(); |
| } |
| |
| function peg$SyntaxError(message, expected, found, location) { |
| this.message = message; |
| this.expected = expected; |
| this.found = found; |
| this.location = location; |
| this.name = "SyntaxError"; // istanbul ignore next |
| |
| if (typeof Error.captureStackTrace === "function") { |
| Error.captureStackTrace(this, peg$SyntaxError); |
| } |
| } |
| |
| peg$subclass(peg$SyntaxError, Error); |
| |
| peg$SyntaxError.buildMessage = function (expected, found) { |
| var DESCRIBE_EXPECTATION_FNS = { |
| literal: function literal(expectation) { |
| return "\"" + literalEscape(expectation.text) + "\""; |
| }, |
| class: function _class(expectation) { |
| var _context; |
| |
| var escapedParts = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(_context = expectation.parts).call(_context, function (part) { |
| return _babel_runtime_corejs3_core_js_stable_array_is_array__WEBPACK_IMPORTED_MODULE_2___default()(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); |
| }); |
| |
| return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; |
| }, |
| any: function any() { |
| return "any character"; |
| }, |
| end: function end() { |
| return "end of input"; |
| }, |
| other: function other(expectation) { |
| return expectation.description; |
| }, |
| not: function not(expectation) { |
| return "not " + describeExpectation(expectation.expected); |
| } |
| }; |
| |
| function hex(ch) { |
| return ch.charCodeAt(0).toString(16).toUpperCase(); |
| } |
| |
| function literalEscape(s) { |
| return s.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function (ch) { |
| return "\\x0" + hex(ch); |
| }).replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { |
| return "\\x" + hex(ch); |
| }); |
| } |
| |
| function classEscape(s) { |
| return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function (ch) { |
| return "\\x0" + hex(ch); |
| }).replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { |
| return "\\x" + hex(ch); |
| }); |
| } |
| |
| function describeExpectation(expectation) { |
| return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); |
| } |
| |
| function describeExpected(expected) { |
| var descriptions = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(expected).call(expected, describeExpectation); |
| |
| var i, j; |
| |
| _babel_runtime_corejs3_core_js_stable_instance_sort__WEBPACK_IMPORTED_MODULE_1___default()(descriptions).call(descriptions); |
| |
| if (descriptions.length > 0) { |
| for (i = 1, j = 1; i < descriptions.length; i++) { |
| if (descriptions[i - 1] !== descriptions[i]) { |
| descriptions[j] = descriptions[i]; |
| j++; |
| } |
| } |
| |
| descriptions.length = j; |
| } |
| |
| switch (descriptions.length) { |
| case 1: |
| return descriptions[0]; |
| |
| case 2: |
| return descriptions[0] + " or " + descriptions[1]; |
| |
| default: |
| return _babel_runtime_corejs3_core_js_stable_instance_slice__WEBPACK_IMPORTED_MODULE_0___default()(descriptions).call(descriptions, 0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; |
| } |
| } |
| |
| function describeFound(found) { |
| return found ? "\"" + literalEscape(found) + "\"" : "end of input"; |
| } |
| |
| return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; |
| }; |
| |
| function peg$parse(input, options) { |
| options = options !== undefined ? options : {}; |
| var peg$FAILED = {}; |
| var peg$startRuleFunctions = { |
| start: peg$parsestart |
| }; |
| var peg$startRuleFunction = peg$parsestart; |
| var peg$c0 = "state"; |
| var peg$c1 = "("; |
| var peg$c2 = ")"; |
| var peg$c3 = "selector"; |
| var peg$c4 = "state="; |
| var peg$c5 = "selector="; |
| var peg$c6 = ","; |
| var peg$c7 = "refinedBy=selector("; |
| var peg$c8 = "refinedBy=state("; |
| var peg$c9 = "startSelector=selector("; |
| var peg$c10 = "endSelector=selector("; |
| var peg$c11 = "="; |
| var peg$r0 = /^[a-zA-Z0-9<>\/[\]:%+@.\-!$&;*_]/; |
| var peg$e0 = peg$literalExpectation("state", false); |
| var peg$e1 = peg$literalExpectation("(", false); |
| var peg$e2 = peg$literalExpectation(")", false); |
| var peg$e3 = peg$literalExpectation("selector", false); |
| var peg$e4 = peg$literalExpectation("state=", false); |
| var peg$e5 = peg$literalExpectation("selector=", false); |
| var peg$e6 = peg$literalExpectation(",", false); |
| var peg$e7 = peg$literalExpectation("refinedBy=selector(", false); |
| var peg$e8 = peg$literalExpectation("refinedBy=state(", false); |
| var peg$e9 = peg$literalExpectation("startSelector=selector(", false); |
| var peg$e10 = peg$literalExpectation("endSelector=selector(", false); |
| var peg$e11 = peg$literalExpectation("=", false); |
| var peg$e12 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "<", ">", "/", "[", "]", ":", "%", "+", "@", ".", "-", "!", "$", "&", ";", "*", "_"], false, false); |
| |
| var peg$f0 = function peg$f0(p) { |
| return { |
| state: p |
| }; |
| }; |
| |
| var peg$f1 = function peg$f1(p) { |
| return { |
| selector: p |
| }; |
| }; |
| |
| var peg$f2 = function peg$f2(v) { |
| return { |
| state: v |
| }; |
| }; |
| |
| var peg$f3 = function peg$f3(v) { |
| return { |
| selector: v |
| }; |
| }; |
| |
| var peg$f4 = function peg$f4(k1, k2) { |
| var f = k1; |
| |
| for (var i = 0; i < k2.length; i++) { |
| f = collect(f, k2[i][1]); |
| } |
| |
| return f; |
| }; |
| |
| var peg$f5 = function peg$f5(p) { |
| return { |
| refinedBy: p |
| }; |
| }; |
| |
| var peg$f6 = function peg$f6(p) { |
| return { |
| startSelector: p |
| }; |
| }; |
| |
| var peg$f7 = function peg$f7(p) { |
| return { |
| endSelector: p |
| }; |
| }; |
| |
| var peg$f8 = function peg$f8(key, value) { |
| var f = {}; |
| var num = Number(value); |
| f[key] = isNaN(num) ? decodeURIComponent(value) : num; |
| return f; |
| }; |
| |
| var peg$f9 = function peg$f9(chars) { |
| return chars.join(""); |
| }; |
| |
| var peg$currPos = 0; |
| var peg$savedPos = 0; |
| var peg$posDetailsCache = [{ |
| line: 1, |
| column: 1 |
| }]; |
| var peg$expected = []; |
| var peg$silentFails = 0; |
| var peg$result; |
| |
| if ("startRule" in options) { |
| if (!(options.startRule in peg$startRuleFunctions)) { |
| throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); |
| } |
| |
| peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; |
| } |
| |
| function text() { |
| return input.substring(peg$savedPos, peg$currPos); |
| } |
| |
| function offset() { |
| return peg$savedPos; |
| } |
| |
| function range() { |
| return [peg$savedPos, peg$currPos]; |
| } |
| |
| function location() { |
| return peg$computeLocation(peg$savedPos, peg$currPos); |
| } |
| |
| function expected(description, location) { |
| location = location !== undefined ? location : peg$computeLocation(peg$savedPos, peg$currPos); |
| throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location); |
| } |
| |
| function error(message, location) { |
| location = location !== undefined ? location : peg$computeLocation(peg$savedPos, peg$currPos); |
| throw peg$buildSimpleError(message, location); |
| } |
| |
| function peg$literalExpectation(text, ignoreCase) { |
| return { |
| type: "literal", |
| text: text, |
| ignoreCase: ignoreCase |
| }; |
| } |
| |
| function peg$classExpectation(parts, inverted, ignoreCase) { |
| return { |
| type: "class", |
| parts: parts, |
| inverted: inverted, |
| ignoreCase: ignoreCase |
| }; |
| } |
| |
| function peg$anyExpectation() { |
| return { |
| type: "any" |
| }; |
| } |
| |
| function peg$endExpectation() { |
| return { |
| type: "end" |
| }; |
| } |
| |
| function peg$otherExpectation(description) { |
| return { |
| type: "other", |
| description: description |
| }; |
| } |
| |
| function peg$computePosDetails(pos) { |
| var details = peg$posDetailsCache[pos]; |
| var p; |
| |
| if (details) { |
| return details; |
| } else { |
| p = pos - 1; |
| |
| while (!peg$posDetailsCache[p]) { |
| p--; |
| } |
| |
| details = peg$posDetailsCache[p]; |
| details = { |
| line: details.line, |
| column: details.column |
| }; |
| |
| while (p < pos) { |
| if (input.charCodeAt(p) === 10) { |
| details.line++; |
| details.column = 1; |
| } else { |
| details.column++; |
| } |
| |
| p++; |
| } |
| |
| peg$posDetailsCache[pos] = details; |
| return details; |
| } |
| } |
| |
| var peg$VALIDFILENAME = typeof options.filename === "string" && options.filename.length > 0; |
| |
| function peg$computeLocation(startPos, endPos) { |
| var loc = {}; |
| if (peg$VALIDFILENAME) loc.filename = options.filename; |
| var startPosDetails = peg$computePosDetails(startPos); |
| loc.start = { |
| offset: startPos, |
| line: startPosDetails.line, |
| column: startPosDetails.column |
| }; |
| var endPosDetails = peg$computePosDetails(endPos); |
| loc.end = { |
| offset: endPos, |
| line: endPosDetails.line, |
| column: endPosDetails.column |
| }; |
| return loc; |
| } |
| |
| function peg$begin() { |
| peg$expected.push({ |
| pos: peg$currPos, |
| variants: [] |
| }); |
| } |
| |
| function peg$expect(expected) { |
| var top = peg$expected[peg$expected.length - 1]; |
| |
| if (peg$currPos < top.pos) { |
| return; |
| } |
| |
| if (peg$currPos > top.pos) { |
| top.pos = peg$currPos; |
| top.variants = []; |
| } |
| |
| top.variants.push(expected); |
| } |
| |
| function peg$end(invert) { |
| var expected = peg$expected.pop(); |
| var top = peg$expected[peg$expected.length - 1]; |
| var variants = expected.variants; |
| |
| if (top.pos !== expected.pos) { |
| return; |
| } |
| |
| if (invert) { |
| variants = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(variants).call(variants, function (e) { |
| return e.type === "not" ? e.expected : { |
| type: "not", |
| expected: e |
| }; |
| }); |
| } |
| |
| Array.prototype.push.apply(top.variants, variants); |
| } |
| |
| function peg$buildSimpleError(message, location) { |
| return new peg$SyntaxError(message, null, null, location); |
| } |
| |
| function peg$buildStructuredError(expected, found, location) { |
| return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected, found), expected, found, location); |
| } |
| |
| function peg$buildError() { |
| var expected = peg$expected[0]; |
| var failPos = expected.pos; |
| return peg$buildStructuredError(expected.variants, failPos < input.length ? input.charAt(failPos) : null, failPos < input.length ? peg$computeLocation(failPos, failPos + 1) : peg$computeLocation(failPos, failPos)); |
| } |
| |
| function peg$parsestart() { |
| var s0; |
| |
| var rule$expects = function rule$expects(expected) { |
| if (peg$silentFails === 0) peg$expect(expected); |
| }; |
| |
| s0 = peg$parsetop(); |
| return s0; |
| } |
| |
| function peg$parsetop() { |
| var s0, s1, s2, s3, s4; |
| |
| var rule$expects = function rule$expects(expected) { |
| if (peg$silentFails === 0) peg$expect(expected); |
| }; |
| |
| s0 = peg$currPos; |
| rule$expects(peg$e0); |
| |
| if (input.substr(peg$currPos, 5) === peg$c0) { |
| s1 = peg$c0; |
| peg$currPos += 5; |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| rule$expects(peg$e1); |
| |
| if (input.charCodeAt(peg$currPos) === 40) { |
| s2 = peg$c1; |
| peg$currPos++; |
| } else { |
| s2 = peg$FAILED; |
| } |
| |
| if (s2 !== peg$FAILED) { |
| s3 = peg$parseparams(); |
| |
| if (s3 !== peg$FAILED) { |
| rule$expects(peg$e2); |
| |
| if (input.charCodeAt(peg$currPos) === 41) { |
| s4 = peg$c2; |
| peg$currPos++; |
| } else { |
| s4 = peg$FAILED; |
| } |
| |
| if (s4 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f0(s3); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| |
| if (s0 === peg$FAILED) { |
| s0 = peg$currPos; |
| rule$expects(peg$e3); |
| |
| if (input.substr(peg$currPos, 8) === peg$c3) { |
| s1 = peg$c3; |
| peg$currPos += 8; |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| rule$expects(peg$e1); |
| |
| if (input.charCodeAt(peg$currPos) === 40) { |
| s2 = peg$c1; |
| peg$currPos++; |
| } else { |
| s2 = peg$FAILED; |
| } |
| |
| if (s2 !== peg$FAILED) { |
| s3 = peg$parseparams(); |
| |
| if (s3 !== peg$FAILED) { |
| rule$expects(peg$e2); |
| |
| if (input.charCodeAt(peg$currPos) === 41) { |
| s4 = peg$c2; |
| peg$currPos++; |
| } else { |
| s4 = peg$FAILED; |
| } |
| |
| if (s4 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f1(s3); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| |
| if (s0 === peg$FAILED) { |
| s0 = peg$currPos; |
| rule$expects(peg$e4); |
| |
| if (input.substr(peg$currPos, 6) === peg$c4) { |
| s1 = peg$c4; |
| peg$currPos += 6; |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| s2 = peg$parseatom(); |
| |
| if (s2 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f2(s2); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| |
| if (s0 === peg$FAILED) { |
| s0 = peg$currPos; |
| rule$expects(peg$e5); |
| |
| if (input.substr(peg$currPos, 9) === peg$c5) { |
| s1 = peg$c5; |
| peg$currPos += 9; |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| s2 = peg$parseatom(); |
| |
| if (s2 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f3(s2); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } |
| } |
| } |
| |
| return s0; |
| } |
| |
| function peg$parseparams() { |
| var s0, s1, s2, s3, s4, s5; |
| |
| var rule$expects = function rule$expects(expected) { |
| if (peg$silentFails === 0) peg$expect(expected); |
| }; |
| |
| s0 = peg$currPos; |
| s1 = peg$parsekey_value_pair(); |
| |
| if (s1 !== peg$FAILED) { |
| s2 = []; |
| s3 = peg$currPos; |
| rule$expects(peg$e6); |
| |
| if (input.charCodeAt(peg$currPos) === 44) { |
| s4 = peg$c6; |
| peg$currPos++; |
| } else { |
| s4 = peg$FAILED; |
| } |
| |
| if (s4 !== peg$FAILED) { |
| s5 = peg$parsekey_value_pair(); |
| |
| if (s5 !== peg$FAILED) { |
| s4 = [s4, s5]; |
| s3 = s4; |
| } else { |
| peg$currPos = s3; |
| s3 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s3; |
| s3 = peg$FAILED; |
| } |
| |
| while (s3 !== peg$FAILED) { |
| s2.push(s3); |
| s3 = peg$currPos; |
| rule$expects(peg$e6); |
| |
| if (input.charCodeAt(peg$currPos) === 44) { |
| s4 = peg$c6; |
| peg$currPos++; |
| } else { |
| s4 = peg$FAILED; |
| } |
| |
| if (s4 !== peg$FAILED) { |
| s5 = peg$parsekey_value_pair(); |
| |
| if (s5 !== peg$FAILED) { |
| s4 = [s4, s5]; |
| s3 = s4; |
| } else { |
| peg$currPos = s3; |
| s3 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s3; |
| s3 = peg$FAILED; |
| } |
| } |
| |
| peg$savedPos = s0; |
| s0 = peg$f4(s1, s2); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| |
| return s0; |
| } |
| |
| function peg$parsekey_value_pair() { |
| var s0, s1, s2, s3; |
| |
| var rule$expects = function rule$expects(expected) { |
| if (peg$silentFails === 0) peg$expect(expected); |
| }; |
| |
| s0 = peg$currPos; |
| rule$expects(peg$e7); |
| |
| if (input.substr(peg$currPos, 19) === peg$c7) { |
| s1 = peg$c7; |
| peg$currPos += 19; |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| s2 = peg$parseparams(); |
| |
| if (s2 !== peg$FAILED) { |
| rule$expects(peg$e2); |
| |
| if (input.charCodeAt(peg$currPos) === 41) { |
| s3 = peg$c2; |
| peg$currPos++; |
| } else { |
| s3 = peg$FAILED; |
| } |
| |
| if (s3 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f5(s2); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| |
| if (s0 === peg$FAILED) { |
| s0 = peg$currPos; |
| rule$expects(peg$e8); |
| |
| if (input.substr(peg$currPos, 16) === peg$c8) { |
| s1 = peg$c8; |
| peg$currPos += 16; |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| s2 = peg$parseparams(); |
| |
| if (s2 !== peg$FAILED) { |
| rule$expects(peg$e2); |
| |
| if (input.charCodeAt(peg$currPos) === 41) { |
| s3 = peg$c2; |
| peg$currPos++; |
| } else { |
| s3 = peg$FAILED; |
| } |
| |
| if (s3 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f5(s2); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| |
| if (s0 === peg$FAILED) { |
| s0 = peg$currPos; |
| rule$expects(peg$e9); |
| |
| if (input.substr(peg$currPos, 23) === peg$c9) { |
| s1 = peg$c9; |
| peg$currPos += 23; |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| s2 = peg$parseparams(); |
| |
| if (s2 !== peg$FAILED) { |
| rule$expects(peg$e2); |
| |
| if (input.charCodeAt(peg$currPos) === 41) { |
| s3 = peg$c2; |
| peg$currPos++; |
| } else { |
| s3 = peg$FAILED; |
| } |
| |
| if (s3 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f6(s2); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| |
| if (s0 === peg$FAILED) { |
| s0 = peg$currPos; |
| rule$expects(peg$e10); |
| |
| if (input.substr(peg$currPos, 21) === peg$c10) { |
| s1 = peg$c10; |
| peg$currPos += 21; |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| s2 = peg$parseparams(); |
| |
| if (s2 !== peg$FAILED) { |
| rule$expects(peg$e2); |
| |
| if (input.charCodeAt(peg$currPos) === 41) { |
| s3 = peg$c2; |
| peg$currPos++; |
| } else { |
| s3 = peg$FAILED; |
| } |
| |
| if (s3 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f7(s2); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| |
| if (s0 === peg$FAILED) { |
| s0 = peg$currPos; |
| s1 = peg$parseatom(); |
| |
| if (s1 !== peg$FAILED) { |
| rule$expects(peg$e11); |
| |
| if (input.charCodeAt(peg$currPos) === 61) { |
| s2 = peg$c11; |
| peg$currPos++; |
| } else { |
| s2 = peg$FAILED; |
| } |
| |
| if (s2 !== peg$FAILED) { |
| s3 = peg$parseatom(); |
| |
| if (s3 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s0 = peg$f8(s1, s3); |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } else { |
| peg$currPos = s0; |
| s0 = peg$FAILED; |
| } |
| } |
| } |
| } |
| } |
| |
| return s0; |
| } |
| |
| function peg$parseatom() { |
| var s0, s1, s2; |
| |
| var rule$expects = function rule$expects(expected) { |
| if (peg$silentFails === 0) peg$expect(expected); |
| }; |
| |
| s0 = peg$currPos; |
| s1 = []; |
| s2 = peg$parsevalidchar(); |
| |
| if (s2 !== peg$FAILED) { |
| while (s2 !== peg$FAILED) { |
| s1.push(s2); |
| s2 = peg$parsevalidchar(); |
| } |
| } else { |
| s1 = peg$FAILED; |
| } |
| |
| if (s1 !== peg$FAILED) { |
| peg$savedPos = s0; |
| s1 = peg$f9(s1); |
| } |
| |
| s0 = s1; |
| return s0; |
| } |
| |
| function peg$parsevalidchar() { |
| var s0; |
| |
| var rule$expects = function rule$expects(expected) { |
| if (peg$silentFails === 0) peg$expect(expected); |
| }; |
| |
| rule$expects(peg$e12); |
| |
| if (peg$r0.test(input.charAt(peg$currPos))) { |
| s0 = input.charAt(peg$currPos); |
| peg$currPos++; |
| } else { |
| s0 = peg$FAILED; |
| } |
| |
| return s0; |
| } |
| |
| function collect() { |
| var ret = {}; |
| var len = arguments.length; |
| |
| for (var i = 0; i < len; i++) { |
| for (var p in arguments[i]) { |
| if (arguments[i].hasOwnProperty(p)) { |
| ret[p] = arguments[i][p]; |
| } |
| } |
| } |
| |
| return ret; |
| } |
| |
| peg$begin(); |
| peg$result = peg$startRuleFunction(); |
| |
| if (peg$result !== peg$FAILED && peg$currPos === input.length) { |
| return peg$result; |
| } else { |
| if (peg$result !== peg$FAILED && peg$currPos < input.length) { |
| peg$expect(peg$endExpectation()); |
| } |
| |
| throw peg$buildError(); |
| } |
| } |
| |
| |
| /* harmony default export */ __webpack_exports__["default"] = ({ |
| SyntaxError: peg$SyntaxError, |
| parse: peg$parse |
| }); |
| |
| /***/ }), |
| |
| /***/ "../packages/fragment-identifier/src/index.js": |
| /*!****************************************************!*\ |
| !*** ../packages/fragment-identifier/src/index.js ***! |
| \****************************************************/ |
| /*! exports provided: SyntaxError, parse, stringify */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stringify", function() { return stringify; }); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/keys */ "../node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__); |
| /* harmony import */ var _fragment_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fragment.js */ "../packages/fragment-identifier/src/fragment.js"); |
| /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SyntaxError", function() { return _fragment_js__WEBPACK_IMPORTED_MODULE_3__["SyntaxError"]; }); |
| |
| /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return _fragment_js__WEBPACK_IMPORTED_MODULE_3__["parse"]; }); |
| |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| |
| /** |
| * Convert a Selector or State into a fragment identifier string. |
| * @param {(Selector|State)} resource |
| * @return {string} |
| */ |
| |
| function stringify(resource) { |
| var _context; |
| |
| var data = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(_context = _babel_runtime_corejs3_core_js_stable_object_keys__WEBPACK_IMPORTED_MODULE_1___default()(resource)).call(_context, function (key) { |
| var _context3; |
| |
| var value = resource[key]; |
| if (value instanceof Object) value = value.valueOf(); |
| |
| if (value instanceof Object) { |
| var _context2; |
| |
| value = stringify(value); |
| return _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_0___default()(_context2 = "".concat(encodeURIComponent(key), "=")).call(_context2, value); |
| } |
| |
| return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(_context3 = [key, value]).call(_context3, encodeURIComponent).join('='); |
| }).join(','); |
| |
| if (/Selector$/.test(resource.type)) return "selector(".concat(data, ")"); |
| if (/State$/.test(resource.type)) return "state(".concat(data, ")"); |
| throw new TypeError('Resource must be a Selector or State'); |
| } |
| |
| /***/ }), |
| |
| /***/ "../packages/selector/src/index.js": |
| /*!*****************************************!*\ |
| !*** ../packages/selector/src/index.js ***! |
| \*****************************************/ |
| /*! exports provided: makeRefinable */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeRefinable", function() { return makeRefinable; }); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/regenerator */ "../node_modules/@babel/runtime-corejs3/regenerator/index.js"); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/wrapAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/awaitAsyncGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncGeneratorDelegate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncGeneratorDelegate */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncGeneratorDelegate.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncIterator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncIterator.js"); |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| |
| |
| function makeRefinable(selectorCreator) { |
| return function createSelector(source) { |
| var selector = selectorCreator(source); |
| |
| if (source.refinedBy) { |
| var refiningSelector = createSelector(source.refinedBy); |
| return (/*#__PURE__*/function () { |
| var _matchAll = Object(_babel_runtime_corejs3_helpers_esm_wrapAsyncGenerator__WEBPACK_IMPORTED_MODULE_1__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(scope) { |
| var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, match; |
| |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { |
| while (1) { |
| switch (_context.prev = _context.next) { |
| case 0: |
| _iteratorNormalCompletion = true; |
| _didIteratorError = false; |
| _context.prev = 2; |
| _iterator = Object(_babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_4__["default"])(selector(scope)); |
| |
| case 4: |
| _context.next = 6; |
| return Object(_babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(_iterator.next()); |
| |
| case 6: |
| _step = _context.sent; |
| _iteratorNormalCompletion = _step.done; |
| _context.next = 10; |
| return Object(_babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(_step.value); |
| |
| case 10: |
| _value = _context.sent; |
| |
| if (_iteratorNormalCompletion) { |
| _context.next = 17; |
| break; |
| } |
| |
| match = _value; |
| return _context.delegateYield(Object(_babel_runtime_corejs3_helpers_esm_asyncGeneratorDelegate__WEBPACK_IMPORTED_MODULE_3__["default"])(Object(_babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_4__["default"])(refiningSelector(match)), _babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__["default"]), "t0", 14); |
| |
| case 14: |
| _iteratorNormalCompletion = true; |
| _context.next = 4; |
| break; |
| |
| case 17: |
| _context.next = 23; |
| break; |
| |
| case 19: |
| _context.prev = 19; |
| _context.t1 = _context["catch"](2); |
| _didIteratorError = true; |
| _iteratorError = _context.t1; |
| |
| case 23: |
| _context.prev = 23; |
| _context.prev = 24; |
| |
| if (!(!_iteratorNormalCompletion && _iterator.return != null)) { |
| _context.next = 28; |
| break; |
| } |
| |
| _context.next = 28; |
| return Object(_babel_runtime_corejs3_helpers_esm_awaitAsyncGenerator__WEBPACK_IMPORTED_MODULE_2__["default"])(_iterator.return()); |
| |
| case 28: |
| _context.prev = 28; |
| |
| if (!_didIteratorError) { |
| _context.next = 31; |
| break; |
| } |
| |
| throw _iteratorError; |
| |
| case 31: |
| return _context.finish(28); |
| |
| case 32: |
| return _context.finish(23); |
| |
| case 33: |
| case "end": |
| return _context.stop(); |
| } |
| } |
| }, _callee, null, [[2, 19, 23, 33], [24,, 28, 32]]); |
| })); |
| |
| function matchAll(_x) { |
| return _matchAll.apply(this, arguments); |
| } |
| |
| return matchAll; |
| }() |
| ); |
| } |
| |
| return selector; |
| }; |
| } |
| |
| /***/ }), |
| |
| /***/ "./demo/index.html": |
| /*!*************************!*\ |
| !*** ./demo/index.html ***! |
| \*************************/ |
| /*! exports provided: default */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony default export */ __webpack_exports__["default"] = (__webpack_require__.p + "demo/index.html"); |
| |
| /***/ }), |
| |
| /***/ "./demo/index.js": |
| /*!***********************!*\ |
| !*** ./demo/index.js ***! |
| \***********************/ |
| /*! no exports provided */ |
| /***/ (function(module, __webpack_exports__, __webpack_require__) { |
| |
| "use strict"; |
| __webpack_require__.r(__webpack_exports__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/url */ "../node_modules/@babel/runtime-corejs3/core-js-stable/url.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_0__); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/regenerator */ "../node_modules/@babel/runtime-corejs3/regenerator/index.js"); |
| /* harmony import */ var _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/json/stringify */ "../node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_2__); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_slice__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/slice */ "../node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js"); |
| /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_slice__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_slice__WEBPACK_IMPORTED_MODULE_3__); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncToGenerator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncToGenerator.js"); |
| /* harmony import */ var _babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/asyncIterator */ "../node_modules/@babel/runtime-corejs3/helpers/esm/asyncIterator.js"); |
| /* harmony import */ var _annotator_fragment_identifier_src_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @annotator/fragment-identifier/src/index.js */ "../packages/fragment-identifier/src/index.js"); |
| /* harmony import */ var _annotator_dom_src_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @annotator/dom/src/index.js */ "../packages/dom/src/index.js"); |
| /* harmony import */ var _annotator_selector_src_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @annotator/selector/src/index.js */ "../packages/selector/src/index.js"); |
| /** |
| * @license |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| |
| |
| |
| |
| |
| /* global corpus, module, parsed, selectable */ |
| |
| |
| |
| var cleanupFunctions = []; |
| |
| function cleanup() { |
| var removeHighlight; |
| |
| while (removeHighlight = cleanupFunctions.shift()) { |
| removeHighlight(); |
| } |
| |
| corpus.normalize(); |
| } |
| |
| var createSelector = Object(_annotator_selector_src_index_js__WEBPACK_IMPORTED_MODULE_8__["makeRefinable"])(function (selector) { |
| var selectorCreator = { |
| TextQuoteSelector: _annotator_dom_src_index_js__WEBPACK_IMPORTED_MODULE_7__["createTextQuoteSelector"], |
| RangeSelector: Object(_annotator_dom_src_index_js__WEBPACK_IMPORTED_MODULE_7__["createRangeSelectorCreator"])(createSelector) |
| }[selector.type]; |
| |
| if (selectorCreator == null) { |
| throw new Error("Unsupported selector type: ".concat(selector.type)); |
| } |
| |
| return selectorCreator(selector); |
| }); |
| |
| var refresh = /*#__PURE__*/function () { |
| var _ref = Object(_babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee() { |
| var _context; |
| |
| var fragment, _parseFragment, selector, matchAll, ranges, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, range, _i, _ranges, _range, removeHighlight; |
| |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee$(_context2) { |
| while (1) { |
| switch (_context2.prev = _context2.next) { |
| case 0: |
| cleanup(); |
| fragment = _babel_runtime_corejs3_core_js_stable_instance_slice__WEBPACK_IMPORTED_MODULE_3___default()(_context = window.location.hash).call(_context, 1); |
| |
| if (fragment) { |
| _context2.next = 4; |
| break; |
| } |
| |
| return _context2.abrupt("return"); |
| |
| case 4: |
| _parseFragment = Object(_annotator_fragment_identifier_src_index_js__WEBPACK_IMPORTED_MODULE_6__["parse"])(fragment), selector = _parseFragment.selector; |
| matchAll = createSelector(selector); |
| ranges = []; |
| _iteratorNormalCompletion = true; |
| _didIteratorError = false; |
| _context2.prev = 9; |
| _iterator = Object(_babel_runtime_corejs3_helpers_esm_asyncIterator__WEBPACK_IMPORTED_MODULE_5__["default"])(matchAll(corpus)); |
| |
| case 11: |
| _context2.next = 13; |
| return _iterator.next(); |
| |
| case 13: |
| _step = _context2.sent; |
| _iteratorNormalCompletion = _step.done; |
| _context2.next = 17; |
| return _step.value; |
| |
| case 17: |
| _value = _context2.sent; |
| |
| if (_iteratorNormalCompletion) { |
| _context2.next = 24; |
| break; |
| } |
| |
| range = _value; |
| ranges.push(range); |
| |
| case 21: |
| _iteratorNormalCompletion = true; |
| _context2.next = 11; |
| break; |
| |
| case 24: |
| _context2.next = 30; |
| break; |
| |
| case 26: |
| _context2.prev = 26; |
| _context2.t0 = _context2["catch"](9); |
| _didIteratorError = true; |
| _iteratorError = _context2.t0; |
| |
| case 30: |
| _context2.prev = 30; |
| _context2.prev = 31; |
| |
| if (!(!_iteratorNormalCompletion && _iterator.return != null)) { |
| _context2.next = 35; |
| break; |
| } |
| |
| _context2.next = 35; |
| return _iterator.return(); |
| |
| case 35: |
| _context2.prev = 35; |
| |
| if (!_didIteratorError) { |
| _context2.next = 38; |
| break; |
| } |
| |
| throw _iteratorError; |
| |
| case 38: |
| return _context2.finish(35); |
| |
| case 39: |
| return _context2.finish(30); |
| |
| case 40: |
| for (_i = 0, _ranges = ranges; _i < _ranges.length; _i++) { |
| _range = _ranges[_i]; |
| removeHighlight = Object(_annotator_dom_src_index_js__WEBPACK_IMPORTED_MODULE_7__["highlightRange"])(_range); |
| cleanupFunctions.push(removeHighlight); |
| } |
| |
| parsed.innerText = _babel_runtime_corejs3_core_js_stable_json_stringify__WEBPACK_IMPORTED_MODULE_2___default()(selector, null, 2); |
| |
| case 42: |
| case "end": |
| return _context2.stop(); |
| } |
| } |
| }, _callee, null, [[9, 26, 30, 40], [31,, 35, 39]]); |
| })); |
| |
| return function refresh() { |
| return _ref.apply(this, arguments); |
| }; |
| }(); |
| |
| function describeSelection() { |
| return _describeSelection.apply(this, arguments); |
| } |
| |
| function _describeSelection() { |
| _describeSelection = Object(_babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee2() { |
| var selection, range, scope; |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee2$(_context3) { |
| while (1) { |
| switch (_context3.prev = _context3.next) { |
| case 0: |
| selection = document.getSelection(); |
| |
| if (!(selection.type !== 'Range')) { |
| _context3.next = 3; |
| break; |
| } |
| |
| return _context3.abrupt("return"); |
| |
| case 3: |
| range = selection.getRangeAt(0); |
| |
| if (!range.collapsed) { |
| _context3.next = 6; |
| break; |
| } |
| |
| return _context3.abrupt("return"); |
| |
| case 6: |
| scope = document.createRange(); |
| scope.selectNodeContents(selectable); |
| |
| if (scope.isPointInRange(range.startContainer, range.startOffset)) { |
| _context3.next = 10; |
| break; |
| } |
| |
| return _context3.abrupt("return"); |
| |
| case 10: |
| if (scope.isPointInRange(range.endContainer, range.endOffset)) { |
| _context3.next = 12; |
| break; |
| } |
| |
| return _context3.abrupt("return"); |
| |
| case 12: |
| return _context3.abrupt("return", Object(_annotator_dom_src_index_js__WEBPACK_IMPORTED_MODULE_7__["describeTextQuote"])(range, scope)); |
| |
| case 13: |
| case "end": |
| return _context3.stop(); |
| } |
| } |
| }, _callee2); |
| })); |
| return _describeSelection.apply(this, arguments); |
| } |
| |
| function onSelectionChange() { |
| return _onSelectionChange.apply(this, arguments); |
| } |
| |
| function _onSelectionChange() { |
| _onSelectionChange = Object(_babel_runtime_corejs3_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/_babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee3() { |
| var selector, fragment, url; |
| return _babel_runtime_corejs3_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee3$(_context4) { |
| while (1) { |
| switch (_context4.prev = _context4.next) { |
| case 0: |
| _context4.next = 2; |
| return describeSelection(); |
| |
| case 2: |
| selector = _context4.sent; |
| fragment = selector ? Object(_annotator_fragment_identifier_src_index_js__WEBPACK_IMPORTED_MODULE_6__["stringify"])(selector) : ''; |
| url = new _babel_runtime_corejs3_core_js_stable_url__WEBPACK_IMPORTED_MODULE_0___default.a(window.location.href); |
| url.hash = fragment ? "#".concat(fragment) : ''; |
| |
| if (url.href !== window.location.href) { |
| window.history.replaceState(selector, null, url.href); |
| refresh(); |
| } |
| |
| case 7: |
| case "end": |
| return _context4.stop(); |
| } |
| } |
| }, _callee3); |
| })); |
| return _onSelectionChange.apply(this, arguments); |
| } |
| |
| window.addEventListener('popstate', refresh); |
| document.addEventListener('DOMContentLoaded', refresh); |
| document.addEventListener('selectionchange', onSelectionChange); |
| |
| if (false) {} |
| |
| /***/ }), |
| |
| /***/ 1: |
| /*!***********************************************!*\ |
| !*** multi ./demo/index.html ./demo/index.js ***! |
| \***********************************************/ |
| /*! no static exports found */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| __webpack_require__(/*! ./demo/index.html */"./demo/index.html"); |
| module.exports = __webpack_require__(/*! ./demo/index.js */"./demo/index.js"); |
| |
| |
| /***/ }) |
| |
| /******/ }); |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2V2ZXJ5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NvcnQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sL2FzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS91cmwuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvYXJyYXkvZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pcy1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9wcm9taXNlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL3N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9zeW1ib2wvYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9Bc3luY0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vQXdhaXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3luY0dlbmVyYXRvckRlbGVnYXRlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3luY0l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hd2FpdEFzeW5jR2VuZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS93cmFwQXN5bmNHZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvYW5jZXN0b3JzL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY2FydGVzaWFuL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2Zyb20uanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9ldmVyeS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZsYXQtbWFwLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29tZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2V2ZXJ5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3Byb21pc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2FzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pcy1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWl0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS11cmwuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wdW55Y29kZS10by1hc2NpaS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zbG9wcHktYXJyYXktbWV0aG9kLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90YXNrLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dyYXBwZWQtd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb21lLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmFnZ3JlZ2F0ZS1lcnJvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2UuYW55LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC50by1qc29uLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9ldmVyeS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb21lLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3Byb21pc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvdXJsL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3dlYi91cmwuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kb20tbm9kZS1pdGVyYXRvci9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2RvbS1ub2RlLWl0ZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZG9tLW5vZGUtaXRlcmF0b3IvbGliL2FkYXB0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kb20tbm9kZS1pdGVyYXRvci9saWIvYnVpbHRpbi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2RvbS1ub2RlLWl0ZXJhdG9yL2xpYi9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2RvbS1ub2RlLWl0ZXJhdG9yL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2RvbS1ub2RlLWl0ZXJhdG9yL2xpYi9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2RvbS1ub2RlLWl0ZXJhdG9yL2xpYi9zaGltLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZG9tLW5vZGUtaXRlcmF0b3IvcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kb20tbm9kZS1pdGVyYXRvci9zaGltLmpzIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvZG9tLXNlZWsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9kb20tc2Vlay9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9pbmRleC1vZi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy94dGVuZC9pbW11dGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4uL3BhY2thZ2VzL2RvbS9zcmMvY2FydGVzaWFuLmpzIiwid2VicGFjazovLy8uLi9wYWNrYWdlcy9kb20vc3JjL2Nzcy5qcyIsIndlYnBhY2s6Ly8vLi4vcGFja2FnZXMvZG9tL3NyYy9oaWdobGlnaHQtcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4uL3BhY2thZ2VzL2RvbS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4uL3BhY2thZ2VzL2RvbS9zcmMvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4uL3BhY2thZ2VzL2RvbS9zcmMvc2NvcGUuanMiLCJ3ZWJwYWNrOi8vLy4uL3BhY2thZ2VzL2RvbS9zcmMvdGV4dC1xdW90ZS5qcyIsIndlYnBhY2s6Ly8vLi4vcGFja2FnZXMvZnJhZ21lbnQtaWRlbnRpZmllci9zcmMvZnJhZ21lbnQuanMiLCJ3ZWJwYWNrOi8vLy4uL3BhY2thZ2VzL2ZyYWdtZW50LWlkZW50aWZpZXIvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uLi9wYWNrYWdlcy9zZWxlY3Rvci9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vZGVtby9pbmRleC5odG1sIiwid2VicGFjazovLy8uL2RlbW8vaW5kZXguanMiXSwibmFtZXMiOlsicHJvZHVjdCIsIml0ZXJhYmxlcyIsIml0ZXJhdG9ycyIsIml0ZXJhYmxlIiwibG9ncyIsIm5leHRWYWx1ZVByb21pc2VzIiwiaXRlcmF0b3IiLCJpdGVyYWJsZU5yIiwibmV4dCIsInRoZW4iLCJ2YWx1ZSIsImRvbmUiLCJyYWNlIiwicCIsImFycmF5cyIsImNvbWJpbmF0aW9ucyIsImNhcnRlc2lhbkFycmF5cyIsImNyZWF0ZUNzc1NlbGVjdG9yIiwic2VsZWN0b3IiLCJzY29wZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtYXRjaEFsbCIsImhpZ2hsaWdodFJhbmdlIiwicmFuZ2UiLCJ0YWdOYW1lIiwiYXR0cmlidXRlcyIsImNvbGxhcHNlZCIsIm5vZGVzIiwidGV4dE5vZGVzSW5SYW5nZSIsImhpZ2hsaWdodEVsZW1lbnRzIiwibm9kZSIsImhpZ2hsaWdodEVsZW1lbnQiLCJ3cmFwTm9kZUluSGlnaGxpZ2h0IiwicHVzaCIsInJlbW92ZUhpZ2hsaWdodHMiLCJoaWdobGlnaHRJZHgiLCJyZW1vdmVIaWdobGlnaHQiLCJzdGFydENvbnRhaW5lciIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInN0YXJ0T2Zmc2V0IiwiZW5kT2Zmc2V0IiwiY3JlYXRlZE5vZGUiLCJzcGxpdFRleHQiLCJlbmRDb250YWluZXIiLCJzZXRFbmQiLCJzZXRTdGFydCIsImxlbmd0aCIsIndhbGtlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVUcmVlV2Fsa2VyIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwiaW50ZXJzZWN0c05vZGUiLCJGSUxURVJfQUNDRVBUIiwiRklMVEVSX1JFSkVDVCIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJjb21wYXJlUG9pbnQiLCJjcmVhdGVFbGVtZW50Iiwia2V5Iiwic2V0QXR0cmlidXRlIiwidGVtcFJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlIiwic3Vycm91bmRDb250ZW50cyIsImNoaWxkTm9kZXMiLCJwYXJlbnROb2RlIiwicmVwbGFjZUNoaWxkIiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsInJlbW92ZSIsImNyZWF0ZVJhbmdlU2VsZWN0b3JDcmVhdG9yIiwiY3JlYXRlU2VsZWN0b3IiLCJjcmVhdGVSYW5nZVNlbGVjdG9yIiwic3RhcnRTZWxlY3RvciIsImVuZFNlbGVjdG9yIiwiZG9jdW1lbnQiLCJzdGFydE1hdGNoZXMiLCJlbmRNYXRjaGVzIiwicGFpcnMiLCJzdGFydCIsImVuZCIsInJlc3VsdCIsInJhbmdlRnJvbVNjb3BlIiwic2VsZWN0Tm9kZUNvbnRlbnRzIiwiZmlyc3RUZXh0Tm9kZUluUmFuZ2UiLCJyb290IiwiaXRlciIsImNyZWF0ZU5vZGVJdGVyYXRvciIsImNyZWF0ZVRleHRRdW90ZVNlbGVjdG9yIiwidGV4dCIsInRvU3RyaW5nIiwiZXhhY3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJwYXR0ZXJuIiwiZnJvbUluZGV4IiwicmVmZXJlbmNlTm9kZUluZGV4IiwicGF0dGVyblN0YXJ0SW5kZXgiLCJtYXRjaCIsIm1hdGNoU3RhcnRJbmRleCIsIm1hdGNoRW5kSW5kZXgiLCJzZWVrIiwicG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VOb2RlIiwibm9kZVZhbHVlIiwicHJldmlvdXNOb2RlIiwiZGVzY3JpYmVUZXh0UXVvdGUiLCJkb2N1bWVudEVsZW1lbnQiLCJzdGFydE5vZGUiLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJhZmZpeExlbmd0aFBhaXJzIiwibWF0Y2hJdGVyIiwibWF0Y2hTdGFydE5vZGUiLCJwcmVmaXhMZW5ndGgiLCJvdmVybGFwUmlnaHQiLCJzdWJzdHJpbmciLCJzdWZmaXhMZW5ndGgiLCJvdmVybGFwIiwidHlwZSIsIm1pbmltYWxTb2x1dGlvbiIsInRleHQxIiwidGV4dDIiLCJjb3VudCIsImMxIiwiYzIiLCJyZXF1aXJlbWVudHMiLCJsIiwiciIsImEiLCJiIiwicGFpciIsInAwIiwicDEiLCJyMCIsInIxIiwicGVnJHN1YmNsYXNzIiwiY2hpbGQiLCJwYXJlbnQiLCJDIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJwZWckU3ludGF4RXJyb3IiLCJtZXNzYWdlIiwiZXhwZWN0ZWQiLCJmb3VuZCIsImxvY2F0aW9uIiwibmFtZSIsIkVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJidWlsZE1lc3NhZ2UiLCJERVNDUklCRV9FWFBFQ1RBVElPTl9GTlMiLCJsaXRlcmFsIiwiZXhwZWN0YXRpb24iLCJsaXRlcmFsRXNjYXBlIiwiY2xhc3MiLCJlc2NhcGVkUGFydHMiLCJwYXJ0cyIsInBhcnQiLCJjbGFzc0VzY2FwZSIsImludmVydGVkIiwiYW55Iiwib3RoZXIiLCJkZXNjcmlwdGlvbiIsIm5vdCIsImRlc2NyaWJlRXhwZWN0YXRpb24iLCJoZXgiLCJjaCIsImNoYXJDb2RlQXQiLCJ0b1VwcGVyQ2FzZSIsInMiLCJyZXBsYWNlIiwiZGVzY3JpYmVFeHBlY3RlZCIsImRlc2NyaXB0aW9ucyIsImkiLCJqIiwiam9pbiIsImRlc2NyaWJlRm91bmQiLCJwZWckcGFyc2UiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1bmRlZmluZWQiLCJwZWckRkFJTEVEIiwicGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucyIsInBlZyRwYXJzZXN0YXJ0IiwicGVnJHN0YXJ0UnVsZUZ1bmN0aW9uIiwicGVnJGMwIiwicGVnJGMxIiwicGVnJGMyIiwicGVnJGMzIiwicGVnJGM0IiwicGVnJGM1IiwicGVnJGM2IiwicGVnJGM3IiwicGVnJGM4IiwicGVnJGM5IiwicGVnJGMxMCIsInBlZyRjMTEiLCJwZWckcjAiLCJwZWckZTAiLCJwZWckbGl0ZXJhbEV4cGVjdGF0aW9uIiwicGVnJGUxIiwicGVnJGUyIiwicGVnJGUzIiwicGVnJGU0IiwicGVnJGU1IiwicGVnJGU2IiwicGVnJGU3IiwicGVnJGU4IiwicGVnJGU5IiwicGVnJGUxMCIsInBlZyRlMTEiLCJwZWckZTEyIiwicGVnJGNsYXNzRXhwZWN0YXRpb24iLCJwZWckZjAiLCJzdGF0ZSIsInBlZyRmMSIsInBlZyRmMiIsInYiLCJwZWckZjMiLCJwZWckZjQiLCJrMSIsImsyIiwiZiIsImNvbGxlY3QiLCJwZWckZjUiLCJyZWZpbmVkQnkiLCJwZWckZjYiLCJwZWckZjciLCJwZWckZjgiLCJudW0iLCJOdW1iZXIiLCJpc05hTiIsImRlY29kZVVSSUNvbXBvbmVudCIsInBlZyRmOSIsImNoYXJzIiwicGVnJGN1cnJQb3MiLCJwZWckc2F2ZWRQb3MiLCJwZWckcG9zRGV0YWlsc0NhY2hlIiwibGluZSIsImNvbHVtbiIsInBlZyRleHBlY3RlZCIsInBlZyRzaWxlbnRGYWlscyIsInBlZyRyZXN1bHQiLCJzdGFydFJ1bGUiLCJvZmZzZXQiLCJwZWckY29tcHV0ZUxvY2F0aW9uIiwicGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yIiwicGVnJG90aGVyRXhwZWN0YXRpb24iLCJlcnJvciIsInBlZyRidWlsZFNpbXBsZUVycm9yIiwiaWdub3JlQ2FzZSIsInBlZyRhbnlFeHBlY3RhdGlvbiIsInBlZyRlbmRFeHBlY3RhdGlvbiIsInBlZyRjb21wdXRlUG9zRGV0YWlscyIsInBvcyIsImRldGFpbHMiLCJwZWckVkFMSURGSUxFTkFNRSIsImZpbGVuYW1lIiwic3RhcnRQb3MiLCJlbmRQb3MiLCJsb2MiLCJzdGFydFBvc0RldGFpbHMiLCJlbmRQb3NEZXRhaWxzIiwicGVnJGJlZ2luIiwidmFyaWFudHMiLCJwZWckZXhwZWN0IiwidG9wIiwicGVnJGVuZCIsImludmVydCIsInBvcCIsImUiLCJBcnJheSIsImFwcGx5IiwicGVnJGJ1aWxkRXJyb3IiLCJmYWlsUG9zIiwiY2hhckF0IiwiczAiLCJydWxlJGV4cGVjdHMiLCJwZWckcGFyc2V0b3AiLCJzMSIsInMyIiwiczMiLCJzNCIsInN1YnN0ciIsInBlZyRwYXJzZXBhcmFtcyIsInBlZyRwYXJzZWF0b20iLCJzNSIsInBlZyRwYXJzZWtleV92YWx1ZV9wYWlyIiwicGVnJHBhcnNldmFsaWRjaGFyIiwidGVzdCIsInJldCIsImxlbiIsImFyZ3VtZW50cyIsImhhc093blByb3BlcnR5IiwiU3ludGF4RXJyb3IiLCJwYXJzZSIsInN0cmluZ2lmeSIsInJlc291cmNlIiwiZGF0YSIsIk9iamVjdCIsInZhbHVlT2YiLCJlbmNvZGVVUklDb21wb25lbnQiLCJUeXBlRXJyb3IiLCJtYWtlUmVmaW5hYmxlIiwic2VsZWN0b3JDcmVhdG9yIiwic291cmNlIiwicmVmaW5pbmdTZWxlY3RvciIsImNsZWFudXBGdW5jdGlvbnMiLCJjbGVhbnVwIiwic2hpZnQiLCJjb3JwdXMiLCJub3JtYWxpemUiLCJUZXh0UXVvdGVTZWxlY3RvciIsIlJhbmdlU2VsZWN0b3IiLCJyZWZyZXNoIiwiZnJhZ21lbnQiLCJ3aW5kb3ciLCJoYXNoIiwicGFyc2VGcmFnbWVudCIsInJhbmdlcyIsInBhcnNlZCIsImlubmVyVGV4dCIsImRlc2NyaWJlU2VsZWN0aW9uIiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiZ2V0UmFuZ2VBdCIsInNlbGVjdGFibGUiLCJpc1BvaW50SW5SYW5nZSIsIm9uU2VsZWN0aW9uQ2hhbmdlIiwic3RyaW5naWZ5RnJhZ21lbnQiLCJ1cmwiLCJocmVmIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJtb2R1bGUiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQSxpQkFBaUIsbUJBQU8sQ0FBQyxpR0FBb0MsRTs7Ozs7Ozs7Ozs7QUNBN0QsaUJBQWlCLG1CQUFPLENBQUMsbUdBQXFDLEU7Ozs7Ozs7Ozs7O0FDQTlELGlCQUFpQixtQkFBTyxDQUFDLGlHQUFvQyxFOzs7Ozs7Ozs7OztBQ0E3RCxpQkFBaUIsbUJBQU8sQ0FBQyxtR0FBcUMsRTs7Ozs7Ozs7Ozs7QUNBOUQsaUJBQWlCLG1CQUFPLENBQUMsdUdBQXVDLEU7Ozs7Ozs7Ozs7O0FDQWhFLGlCQUFpQixt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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDZCQUE2QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGNBQWM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsdUJBQXVCO0FBQzVDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsdUJBQXVCO0FBQzVDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRyxtQkFBbUI7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHLG1CQUFtQjs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7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QTs7QUFBQTtBQUFBLDhDQWFTb0UscUZBQWlCLENBQUN2RixLQUFELEVBQVFKLEtBQVIsQ0FiMUI7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRzs7OztTQWdCZTBULGlCOzs7Ozt3TkFBZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUN5Qk4saUJBQWlCLEVBRDFDOztBQUFBO0FBQ1FyVCxvQkFEUjtBQUVROFMsb0JBRlIsR0FFbUI5UyxRQUFRLEdBQUc0VCw2RkFBaUIsQ0FBQzVULFFBQUQsQ0FBcEIsR0FBaUMsRUFGNUQ7QUFHUTZULGVBSFIsR0FHYyxJQUFJLGlGQUFJZCxNQUFNLENBQUMzSyxRQUFQLENBQWdCMEwsSUFBeEIsQ0FIZDtBQUlFRCxlQUFHLENBQUNiLElBQUosR0FBV0YsUUFBUSxjQUFPQSxRQUFQLElBQW9CLEVBQXZDOztBQUVBLGdCQUFJZSxHQUFHLENBQUNDLElBQUosS0FBYWYsTUFBTSxDQUFDM0ssUUFBUCxDQUFnQjBMLElBQWpDLEVBQXVDO0FBQ3JDZixvQkFBTSxDQUFDZ0IsT0FBUCxDQUFlQyxZQUFmLENBQTRCaFUsUUFBNUIsRUFBc0MsSUFBdEMsRUFBNEM2VCxHQUFHLENBQUNDLElBQWhEO0FBQ0FqQixxQkFBTztBQUNSOztBQVRIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEc7Ozs7QUFZQUUsTUFBTSxDQUFDa0IsZ0JBQVAsQ0FBd0IsVUFBeEIsRUFBb0NwQixPQUFwQztBQUNBaFAsUUFBUSxDQUFDb1EsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDcEIsT0FBOUM7QUFDQWhQLFFBQVEsQ0FBQ29RLGdCQUFULENBQTBCLGlCQUExQixFQUE2Q04saUJBQTdDOztBQUVBLElBQUlPLEtBQUosRUFBZ0IsRSIsImZpbGUiOiJkZW1vL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2V2ZXJ5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc2xpY2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb21lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2pzb24vc3RyaW5naWZ5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2tleXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2FzeW5jLWl0ZXJhdG9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvdXJsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pcy1pdGVyYWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvcHJvbWlzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvYXN5bmMtaXRlcmF0b3JcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvclwiKTsiLCJpbXBvcnQgX1N5bWJvbCRhc3luY0l0ZXJhdG9yIGZyb20gXCIuLi8uLi9jb3JlLWpzL3N5bWJvbC9hc3luYy1pdGVyYXRvclwiO1xuaW1wb3J0IF9TeW1ib2wgZnJvbSBcIi4uLy4uL2NvcmUtanMvc3ltYm9sXCI7XG5pbXBvcnQgX1Byb21pc2UgZnJvbSBcIi4uLy4uL2NvcmUtanMvcHJvbWlzZVwiO1xuaW1wb3J0IEF3YWl0VmFsdWUgZnJvbSBcIi4vQXdhaXRWYWx1ZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXN5bmNHZW5lcmF0b3IoZ2VuKSB7XG4gIHZhciBmcm9udCwgYmFjaztcblxuICBmdW5jdGlvbiBzZW5kKGtleSwgYXJnKSB7XG4gICAgcmV0dXJuIG5ldyBfUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFyZzogYXJnLFxuICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICByZWplY3Q6IHJlamVjdCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcblxuICAgICAgaWYgKGJhY2spIHtcbiAgICAgICAgYmFjayA9IGJhY2submV4dCA9IHJlcXVlc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcm9udCA9IGJhY2sgPSByZXF1ZXN0O1xuICAgICAgICByZXN1bWUoa2V5LCBhcmcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lKGtleSwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXN1bHQgPSBnZW5ba2V5XShhcmcpO1xuICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgdmFyIHdyYXBwZWRBd2FpdCA9IHZhbHVlIGluc3RhbmNlb2YgQXdhaXRWYWx1ZTtcblxuICAgICAgX1Byb21pc2UucmVzb2x2ZSh3cmFwcGVkQXdhaXQgPyB2YWx1ZS53cmFwcGVkIDogdmFsdWUpLnRoZW4oZnVuY3Rpb24gKGFyZykge1xuICAgICAgICBpZiAod3JhcHBlZEF3YWl0KSB7XG4gICAgICAgICAgcmVzdW1lKGtleSA9PT0gXCJyZXR1cm5cIiA/IFwicmV0dXJuXCIgOiBcIm5leHRcIiwgYXJnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXR0bGUocmVzdWx0LmRvbmUgPyBcInJldHVyblwiIDogXCJub3JtYWxcIiwgYXJnKTtcbiAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmVzdW1lKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc2V0dGxlKFwidGhyb3dcIiwgZXJyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXR0bGUodHlwZSwgdmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJyZXR1cm5cIjpcbiAgICAgICAgZnJvbnQucmVzb2x2ZSh7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidGhyb3dcIjpcbiAgICAgICAgZnJvbnQucmVqZWN0KHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZyb250LnJlc29sdmUoe1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZnJvbnQgPSBmcm9udC5uZXh0O1xuXG4gICAgaWYgKGZyb250KSB7XG4gICAgICByZXN1bWUoZnJvbnQua2V5LCBmcm9udC5hcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB0aGlzLl9pbnZva2UgPSBzZW5kO1xuXG4gIGlmICh0eXBlb2YgZ2VuW1wicmV0dXJuXCJdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aGlzW1wicmV0dXJuXCJdID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmlmICh0eXBlb2YgX1N5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF9TeW1ib2wkYXN5bmNJdGVyYXRvcikge1xuICBBc3luY0dlbmVyYXRvci5wcm90b3R5cGVbX1N5bWJvbCRhc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cblxuQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiB0aGlzLl9pbnZva2UoXCJuZXh0XCIsIGFyZyk7XG59O1xuXG5Bc3luY0dlbmVyYXRvci5wcm90b3R5cGVbXCJ0aHJvd1wiXSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuIHRoaXMuX2ludm9rZShcInRocm93XCIsIGFyZyk7XG59O1xuXG5Bc3luY0dlbmVyYXRvci5wcm90b3R5cGVbXCJyZXR1cm5cIl0gPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiB0aGlzLl9pbnZva2UoXCJyZXR1cm5cIiwgYXJnKTtcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX0F3YWl0VmFsdWUodmFsdWUpIHtcbiAgdGhpcy53cmFwcGVkID0gdmFsdWU7XG59IiwiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCIuLi8uLi9jb3JlLWpzL2FycmF5L2lzLWFycmF5XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiLi4vLi4vY29yZS1qcy9hcnJheS9pcy1hcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59IiwiaW1wb3J0IF9TeW1ib2wkaXRlcmF0b3IgZnJvbSBcIi4uLy4uL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCI7XG5pbXBvcnQgX1N5bWJvbCBmcm9tIFwiLi4vLi4vY29yZS1qcy9zeW1ib2xcIjtcbmltcG9ydCBfUHJvbWlzZSBmcm9tIFwiLi4vLi4vY29yZS1qcy9wcm9taXNlXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXN5bmNHZW5lcmF0b3JEZWxlZ2F0ZShpbm5lciwgYXdhaXRXcmFwKSB7XG4gIHZhciBpdGVyID0ge30sXG4gICAgICB3YWl0aW5nID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gcHVtcChrZXksIHZhbHVlKSB7XG4gICAgd2FpdGluZyA9IHRydWU7XG4gICAgdmFsdWUgPSBuZXcgX1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoaW5uZXJba2V5XSh2YWx1ZSkpO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBhd2FpdFdyYXAodmFsdWUpXG4gICAgfTtcbiAgfVxuXG4gIDtcblxuICBpZiAodHlwZW9mIF9TeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfU3ltYm9sJGl0ZXJhdG9yKSB7XG4gICAgaXRlcltfU3ltYm9sJGl0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gIH1cblxuICBpdGVyLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAod2FpdGluZykge1xuICAgICAgd2FpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBwdW1wKFwibmV4dFwiLCB2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKHR5cGVvZiBpbm5lcltcInRocm93XCJdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpdGVyW1widGhyb3dcIl0gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh3YWl0aW5nKSB7XG4gICAgICAgIHdhaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwdW1wKFwidGhyb3dcIiwgdmFsdWUpO1xuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIGlubmVyW1wicmV0dXJuXCJdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpdGVyW1wicmV0dXJuXCJdID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAod2FpdGluZykge1xuICAgICAgICB3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHB1bXAoXCJyZXR1cm5cIiwgdmFsdWUpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gaXRlcjtcbn0iLCJpbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCIuLi8uLi9jb3JlLWpzL2dldC1pdGVyYXRvci1tZXRob2RcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCIuLi8uLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiO1xuaW1wb3J0IF9TeW1ib2wkYXN5bmNJdGVyYXRvciBmcm9tIFwiLi4vLi4vY29yZS1qcy9zeW1ib2wvYXN5bmMtaXRlcmF0b3JcIjtcbmltcG9ydCBfU3ltYm9sIGZyb20gXCIuLi8uLi9jb3JlLWpzL3N5bWJvbFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FzeW5jSXRlcmF0b3IoaXRlcmFibGUpIHtcbiAgdmFyIG1ldGhvZDtcblxuICBpZiAodHlwZW9mIF9TeW1ib2wgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBpZiAoX1N5bWJvbCRhc3luY0l0ZXJhdG9yKSB7XG4gICAgICBtZXRob2QgPSBpdGVyYWJsZVtfU3ltYm9sJGFzeW5jSXRlcmF0b3JdO1xuICAgICAgaWYgKG1ldGhvZCAhPSBudWxsKSByZXR1cm4gbWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgIH1cblxuICAgIGlmIChfU3ltYm9sJGl0ZXJhdG9yKSB7XG4gICAgICBtZXRob2QgPSBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgICAgaWYgKG1ldGhvZCAhPSBudWxsKSByZXR1cm4gbWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgaXMgbm90IGFzeW5jIGl0ZXJhYmxlXCIpO1xufSIsImltcG9ydCBfUHJvbWlzZSBmcm9tIFwiLi4vLi4vY29yZS1qcy9wcm9taXNlXCI7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBfUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgX1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59IiwiaW1wb3J0IEF3YWl0VmFsdWUgZnJvbSBcIi4vQXdhaXRWYWx1ZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2F3YWl0QXN5bmNHZW5lcmF0b3IodmFsdWUpIHtcbiAgcmV0dXJuIG5ldyBBd2FpdFZhbHVlKHZhbHVlKTtcbn0iLCJpbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcIi4uLy4uL2NvcmUtanMvYXJyYXkvZnJvbVwiO1xuaW1wb3J0IF9pc0l0ZXJhYmxlIGZyb20gXCIuLi8uLi9jb3JlLWpzL2lzLWl0ZXJhYmxlXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKF9pc0l0ZXJhYmxlKE9iamVjdChpdGVyKSkgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwiaW1wb3J0IF9nZXRJdGVyYXRvciBmcm9tIFwiLi4vLi4vY29yZS1qcy9nZXQtaXRlcmF0b3JcIjtcbmltcG9ydCBfaXNJdGVyYWJsZSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pcy1pdGVyYWJsZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICBpZiAoIShfaXNJdGVyYWJsZShPYmplY3QoYXJyKSkgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pID0gX2dldEl0ZXJhdG9yKGFyciksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdFwiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsImltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCIuLi8uLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiO1xuaW1wb3J0IF9TeW1ib2wgZnJvbSBcIi4uLy4uL2NvcmUtanMvc3ltYm9sXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBfU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBfU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG9iaiAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn0iLCJpbXBvcnQgQXN5bmNHZW5lcmF0b3IgZnJvbSBcIi4vQXN5bmNHZW5lcmF0b3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF93cmFwQXN5bmNHZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEFzeW5jR2VuZXJhdG9yKGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHBhcmVudHNcblxuZnVuY3Rpb24gcGFyZW50cyhub2RlLCBmaWx0ZXIpIHtcbiAgdmFyIG91dCA9IFtdXG5cbiAgZmlsdGVyID0gZmlsdGVyIHx8IG5vb3BcblxuICBkbyB7XG4gICAgb3V0LnB1c2gobm9kZSlcbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlXG4gIH0gd2hpbGUobm9kZSAmJiBub2RlLnRhZ05hbWUgJiYgZmlsdGVyKG5vZGUpKVxuXG4gIHJldHVybiBvdXQuc2xpY2UoMSlcbn1cblxuZnVuY3Rpb24gbm9vcChuKSB7XG4gIHJldHVybiB0cnVlXG59XG4iLCJ2YXIgZXh0ZW5kID0gcmVxdWlyZSgneHRlbmQvaW1tdXRhYmxlJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gY2FydGVzaWFuO1xuXG4vKipcbiAqIENyZWF0ZXMgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdGhlIHByb3ZpZGVkIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gICB7b2JqZWN0fGFycmF5fSBsaXN0IC0gbGlzdCBvZiAoYXJyYXkpIHByb3BlcnRpZXMgb3IgYXJyYXkgb2YgYXJyYXlzXG4gKiBAcmV0dXJucyB7YXJyYXl9IGFsbCB0aGUgY29tYmluYXRpb25zIG9mIHRoZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGNhcnRlc2lhbihsaXN0KVxue1xuICB2YXIgbGFzdCwgaW5pdCwga2V5cywgcHJvZHVjdCA9IFtdO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKVxuICB7XG4gICAgaW5pdCA9IFtdO1xuICAgIGxhc3QgPSBsaXN0Lmxlbmd0aCAtIDE7XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIGxpc3QgPT0gJ29iamVjdCcgJiYgbGlzdCAhPT0gbnVsbClcbiAge1xuICAgIGluaXQgPSB7fTtcbiAgICBrZXlzID0gT2JqZWN0LmtleXMobGlzdCk7XG4gICAgbGFzdCA9IGtleXMubGVuZ3RoIC0gMTtcbiAgfVxuICBlbHNlXG4gIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RpbmcgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBidXQgYCcgKyAobGlzdCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBsaXN0KSArICdgIHByb3ZpZGVkLicpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkKHJvdywgaSlcbiAge1xuICAgIHZhciBqLCBrLCByO1xuXG4gICAgayA9IGtleXMgPyBrZXlzW2ldIDogaTtcblxuICAgIC8vIGVpdGhlciBhcnJheSBvciBub3QsIG5vdCBleHBlY3Rpbmcgb2JqZWN0cyBoZXJlXG4gICAgQXJyYXkuaXNBcnJheShsaXN0W2tdKSB8fCAodHlwZW9mIGxpc3Rba10gPT0gJ3VuZGVmaW5lZCcgPyBsaXN0W2tdID0gW10gOiBsaXN0W2tdID0gW2xpc3Rba11dKTtcblxuICAgIGZvciAoaj0wOyBqIDwgbGlzdFtrXS5sZW5ndGg7IGorKylcbiAgICB7XG4gICAgICByID0gY2xvbmUocm93KTtcbiAgICAgIHN0b3JlKHIsIGxpc3Rba11bal0sIGspO1xuXG4gICAgICBpZiAoaSA+PSBsYXN0KVxuICAgICAge1xuICAgICAgICBwcm9kdWN0LnB1c2gocik7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIGFkZChyLCBpICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkKGluaXQsIDApO1xuXG4gIHJldHVybiBwcm9kdWN0O1xufVxuXG4vKipcbiAqIENsb25lcyAoc2hhbGxvdyBjb3B5KSBwcm92aWRlZCBvYmplY3Qgb3IgYXJyYXlcbiAqXG4gKiBAcGFyYW0gICB7b2JqZWN0fGFycmF5fSBvYmogLSBvYmplY3Qgb3IgYXJyYXkgdG8gY2xvbmVcbiAqIEByZXR1cm5zIHtvYmplY3R8YXJyYXl9IC0gc2hhbGxvdyBjb3B5IG9mIHRoZSBwcm92aWRlZCBvYmplY3Qgb3IgYXJyYXlcbiAqL1xuZnVuY3Rpb24gY2xvbmUob2JqKVxue1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopID8gW10uY29uY2F0KG9iaikgOiBleHRlbmQob2JqKTtcbn1cblxuLyoqXG4gKiBTdG9yZXMgcHJvdmlkZWQgZWxlbWVudCBpbiB0aGUgcHJvdmlkZWQgb2JqZWN0IG9yIGFycmF5XG4gKlxuICogQHBhcmFtICAge29iamVjdHxhcnJheX0gb2JqIC0gb2JqZWN0IG9yIGFycmF5IHRvIGFkZCB0b1xuICogQHBhcmFtICAge21peGVkfSBlbGVtIC0gZWxlbWVudCB0byBhZGRcbiAqIEBwYXJhbSAgIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBvYmplY3QncyBwcm9wZXJ0eSBrZXkgdG8gYWRkIHRvXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc3RvcmUob2JqLCBlbGVtLCBrZXkpXG57XG4gIEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5wdXNoKGVsZW0pIDogKG9ialtrZXldID0gZWxlbSk7XG59XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuaXNBcnJheTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuY29uY2F0O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5ldmVyeScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmV2ZXJ5O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWx0ZXInKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maWx0ZXI7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmxhdE1hcDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5mb3JFYWNoO1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmluZGV4T2Y7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zbGljZTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29tZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNvbWU7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvcnQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zb3J0O1xuIiwidmFyIGNvbmNhdCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBjb25jYXQgOiBvd247XG59O1xuIiwidmFyIGV2ZXJ5ID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9ldmVyeScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5ldmVyeTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmV2ZXJ5KSA/IGV2ZXJ5IDogb3duO1xufTtcbiIsInZhciBmaWx0ZXIgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gZmlsdGVyIDogb3duO1xufTtcbiIsInZhciBmbGF0TWFwID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mbGF0LW1hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mbGF0TWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmxhdE1hcCkgPyBmbGF0TWFwIDogb3duO1xufTtcbiIsInZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmRleE9mO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5kZXhPZikgPyBpbmRleE9mIDogb3duO1xufTtcbiIsInZhciBtYXAgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWFwIDogb3duO1xufTtcbiIsInZhciBzbGljZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc2xpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc2xpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBzbGljZSA6IG93bjtcbn07XG4iLCJ2YXIgc29tZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29tZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb21lO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBzb21lIDogb3duO1xufTtcbiIsInZhciBzb3J0ID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb3J0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvcnQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IHNvcnQgOiBvd247XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyICRKU09OID0gY29yZS5KU09OIHx8IChjb3JlLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuICRKU09OLnN0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJndW1lbnRzKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dyYXBwZWQtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlN5bWJvbDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93cmFwcGVkLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCdpdGVyYXRvcicpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2lzLWFycmF5Jyk7XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbiIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWl0ZXJhYmxlJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL3Byb21pc2UnKTtcblxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnByb21pc2UuYW55Jyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC9hc3luYy1pdGVyYXRvcicpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcblxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvaXRlcmF0b3InKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9IHNsb3BweUFycmF5TWV0aG9kKCdmb3JFYWNoJykgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59IDogW10uZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2JpbmQtY29udGV4dCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0O1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yTWV0aG9kLmNhbGwoTyk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gbmV3IEMoKTtcbiAgICBmb3IgKDshKHN0ZXAgPSBuZXh0LmNhbGwoaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nXG4gICAgICAgID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpXG4gICAgICAgIDogc3RlcC52YWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2JpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXggfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7ICAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdmFyIHJldHVybk1ldGhvZCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0dXJuTWV0aG9kICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldHVybk1ldGhvZC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsInZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmF0aXZlSXRlcmF0b3IuY2FsbCh0aGlzKTsgfTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd3JhcHBlZC13ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SKSB7XG4gIHJldHVybiBwYXRoW0NPTlNUUlVDVE9SICsgJ1Byb3RvdHlwZSddO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIE5hdGl2ZUNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IChwYXRoW1RBUkdFVF0gPSB7fSk7XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXMobmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ3MgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiB0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gJ2Z1bmN0aW9uJykgcmVzdWx0UHJvcGVydHkgPSBiaW5kKEZ1bmN0aW9uLmNhbGwsIHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGFyZ2V0W2tleV0gPSByZXN1bHRQcm9wZXJ0eTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXVtrZXldID0gc291cmNlUHJvcGVydHk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgIXRhcmdldFByb3RvdHlwZVtrZXldKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50O1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIGVsZW1lbnQsIHRvTGVuZ3RoKGVsZW1lbnQubGVuZ3RoKSwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID49IDB4MUZGRkZGRkZGRkZGRkYpIHRocm93IFR5cGVFcnJvcignRXhjZWVkIHRoZSBhY2NlcHRhYmxlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgICB0YXJnZXRbdGFyZ2V0SW5kZXhdID0gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgc291cmNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gdGFyZ2V0SW5kZXg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNoYXJlZCgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YXJpYWJsZSA9PSAnZnVuY3Rpb24nID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChpdCk7XG4gIGlmICh0eXBlb2YgaXRlcmF0b3JNZXRob2QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgfSByZXR1cm4gYW5PYmplY3QoaXRlcmF0b3JNZXRob2QuY2FsbChpdCkpO1xufTtcbiIsInZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgc3BsaXQgPSAnJy5zcGxpdDtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgcmV0dXJuICFPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PSAnU3RyaW5nJyA/IHNwbGl0LmNhbGwoaXQsICcnKSA6IE9iamVjdChpdCk7XG59IDogT2JqZWN0O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVApIHtcbiAgdmFyIHN0b3JlID0gbmV3IFdlYWtNYXAoKTtcbiAgdmFyIHdtZ2V0ID0gc3RvcmUuZ2V0O1xuICB2YXIgd21oYXMgPSBzdG9yZS5oYXM7XG4gIHZhciB3bXNldCA9IHN0b3JlLnNldDtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIHdtc2V0LmNhbGwoc3RvcmUsIGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21nZXQuY2FsbChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMuY2FsbChzdG9yZSwgaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPID0gT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBJdGVyYXRvcnMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihPKSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgaXRlcmF0ZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBmbiwgdGhhdCwgQVNfRU5UUklFUywgSVNfSVRFUkFUT1IpIHtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGZuLCB0aGF0LCBBU19FTlRSSUVTID8gMiA6IDEpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcignVGFyZ2V0IGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gQVNfRU5UUklFU1xuICAgICAgICAgID8gYm91bmRGdW5jdGlvbihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSlcbiAgICAgICAgICA6IGJvdW5kRnVuY3Rpb24oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7XG4gIH1cblxuICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBib3VuZEZ1bmN0aW9uLCBzdGVwLnZhbHVlLCBBU19FTlRSSUVTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG5cbml0ZXJhdGUuc3RvcCA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgcmVzdWx0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG5pZiAoSXRlcmF0b3JQcm90b3R5cGUgPT0gdW5kZWZpbmVkKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxuaWYgKCFJU19QVVJFICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSkge1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZXItYWdlbnQnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE11dGF0aW9uT2JzZXJ2ZXIgJiYgIS8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpKSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB0aGVuID0gcHJvbWlzZS50aGVuO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4uY2FsbChwcm9taXNlLCBmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBxdWV1ZU1pY3JvdGFzayB8fCBmdW5jdGlvbiAoZm4pIHtcbiAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICBpZiAoIWhlYWQpIHtcbiAgICBoZWFkID0gdGFzaztcbiAgICBub3RpZnkoKTtcbiAgfSBsYXN0ID0gdGFzaztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICByZXR1cm4gIVN0cmluZyhTeW1ib2woKSk7XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHVybCA9IG5ldyBVUkwoJ2I/YT0xJmI9MiZjPTMnLCAnaHR0cDovL2EnKTtcbiAgdmFyIHNlYXJjaFBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXM7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdXJsLnBhdGhuYW1lID0gJ2MlMjBkJztcbiAgc2VhcmNoUGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICBzZWFyY2hQYXJhbXNbJ2RlbGV0ZSddKCdiJyk7XG4gICAgcmVzdWx0ICs9IGtleSArIHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIChJU19QVVJFICYmICF1cmwudG9KU09OKVxuICAgIHx8ICFzZWFyY2hQYXJhbXMuc29ydFxuICAgIHx8IHVybC5ocmVmICE9PSAnaHR0cDovL2EvYyUyMGQ/YT0xJmM9MydcbiAgICB8fCBzZWFyY2hQYXJhbXMuZ2V0KCdjJykgIT09ICczJ1xuICAgIHx8IFN0cmluZyhuZXcgVVJMU2VhcmNoUGFyYW1zKCc/YT0xJykpICE9PSAnYT0xJ1xuICAgIHx8ICFzZWFyY2hQYXJhbXNbSVRFUkFUT1JdXG4gICAgLy8gdGhyb3dzIGluIEVkZ2VcbiAgICB8fCBuZXcgVVJMKCdodHRwczovL2FAYicpLnVzZXJuYW1lICE9PSAnYSdcbiAgICB8fCBuZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoJ2E9YicpKS5nZXQoJ2EnKSAhPT0gJ2InXG4gICAgLy8gbm90IHB1bnljb2RlZCBpbiBFZGdlXG4gICAgfHwgbmV3IFVSTCgnaHR0cDovL9GC0LXRgdGCJykuaG9zdCAhPT0gJ3huLS1lMWF5YmMnXG4gICAgLy8gbm90IGVzY2FwZWQgaW4gQ2hyb21lIDYyLVxuICAgIHx8IG5ldyBVUkwoJ2h0dHA6Ly9hI9CxJykuaGFzaCAhPT0gJyMlRDAlQjEnXG4gICAgLy8gZmFpbHMgaW4gQ2hyb21lIDY2LVxuICAgIHx8IHJlc3VsdCAhPT0gJ2ExYzMnXG4gICAgLy8gdGhyb3dzIGluIFNhZmFyaVxuICAgIHx8IG5ldyBVUkwoJ2h0dHA6Ly94JywgdW5kZWZpbmVkKS5ob3N0ICE9PSAneCc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgbmF0aXZlRnVuY3Rpb25Ub1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi10by1zdHJpbmcnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QobmF0aXZlRnVuY3Rpb25Ub1N0cmluZy5jYWxsKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufTtcblxuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbnZhciBuYXRpdmVBc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gIW5hdGl2ZUFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuIG5hdGl2ZUFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPSA3IHx8IG9iamVjdEtleXMobmF0aXZlQXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBvYmplY3RLZXlzKFMpLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6IG5hdGl2ZUFzc2lnbjtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIHNjcmlwdCA9ICdzY3JpcHQnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBqcyA9ICdqYXZhJyArIHNjcmlwdCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gU3RyaW5nKGpzKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArIHNjcmlwdCArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy8nICsgc2NyaXB0ICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG5cbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlRGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG5cbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XSdcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXMoaGlkZGVuS2V5cywga2V5KSAmJiBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0O1xuICAgIHNldHRlci5jYWxsKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyLmNhbGwoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgIT09ICdbb2JqZWN0IHpdJyA/IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59IDogdGVzdC50b1N0cmluZztcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcy9ibG9iL21hc3Rlci9wdW55Y29kZS5qc1xudmFyIG1heEludCA9IDIxNDc0ODM2NDc7IC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcbnZhciBiYXNlID0gMzY7XG52YXIgdE1pbiA9IDE7XG52YXIgdE1heCA9IDI2O1xudmFyIHNrZXcgPSAzODtcbnZhciBkYW1wID0gNzAwO1xudmFyIGluaXRpYWxCaWFzID0gNzI7XG52YXIgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbnZhciBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcbnZhciByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxcdTAwN0VdLzsgLy8gbm9uLUFTQ0lJIGNoYXJzXG52YXIgcmVnZXhTZXBhcmF0b3JzID0gL1suXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nOyAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG52YXIgT1ZFUkZMT1dfRVJST1IgPSAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnO1xudmFyIGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG4gKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG4gKiBtYXRjaGluZyBVVEYtMTYuXG4gKi9cbnZhciB1Y3MyZGVjb2RlID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIHZhciBjb3VudGVyID0gMDtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAvLyBJdCdzIGEgaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyLlxuICAgICAgdmFyIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcbiAgICAgIGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBMb3cgc3Vycm9nYXRlLlxuICAgICAgICBvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG4gICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqL1xudmFyIGRpZ2l0VG9CYXNpYyA9IGZ1bmN0aW9uIChkaWdpdCkge1xuICAvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuICAvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcbiAgcmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KTtcbn07XG5cbi8qKlxuICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cbiAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG4gKi9cbnZhciBhZGFwdCA9IGZ1bmN0aW9uIChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcbiAgdmFyIGsgPSAwO1xuICBkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuICBkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG4gIGZvciAoOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuICAgIGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcbiAgfVxuICByZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAgbWF4LXN0YXRlbWVudHNcbnZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuXG4gIC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIGFuIGFycmF5IG9mIFVuaWNvZGUgY29kZSBwb2ludHMuXG4gIGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cbiAgLy8gQ2FjaGUgdGhlIGxlbmd0aC5cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlLlxuICB2YXIgbiA9IGluaXRpYWxOO1xuICB2YXIgZGVsdGEgPSAwO1xuICB2YXIgYmlhcyA9IGluaXRpYWxCaWFzO1xuICB2YXIgaSwgY3VycmVudFZhbHVlO1xuXG4gIC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgIGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG4gICAgICBvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDsgLy8gbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuICB2YXIgaGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aDsgLy8gbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cbiAgLy8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgd2l0aCBhIGRlbGltaXRlciB1bmxlc3MgaXQncyBlbXB0eS5cbiAgaWYgKGJhc2ljTGVuZ3RoKSB7XG4gICAgb3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcbiAgfVxuXG4gIC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcbiAgd2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcbiAgICAvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0IGxhcmdlciBvbmU6XG4gICAgdmFyIG0gPSBtYXhJbnQ7XG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG4gICAgICAgIG0gPSBjdXJyZW50VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LCBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdy5cbiAgICB2YXIgaGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuICAgIGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG4gICAgICB0aHJvdyBSYW5nZUVycm9yKE9WRVJGTE9XX0VSUk9SKTtcbiAgICB9XG5cbiAgICBkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuICAgIG4gPSBtO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihPVkVSRkxPV19FUlJPUik7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFZhbHVlID09IG4pIHtcbiAgICAgICAgLy8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIuXG4gICAgICAgIHZhciBxID0gZGVsdGE7XG4gICAgICAgIGZvciAodmFyIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuICAgICAgICAgIHZhciB0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcbiAgICAgICAgICBpZiAocSA8IHQpIGJyZWFrO1xuICAgICAgICAgIHZhciBxTWludXNUID0gcSAtIHQ7XG4gICAgICAgICAgdmFyIGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCkpKTtcbiAgICAgICAgICBxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxKSkpO1xuICAgICAgICBiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuICAgICAgICBkZWx0YSA9IDA7XG4gICAgICAgICsraGFuZGxlZENQQ291bnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgKytkZWx0YTtcbiAgICArK247XG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBlbmNvZGVkID0gW107XG4gIHZhciBsYWJlbHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx1MDAyRScpLnNwbGl0KCcuJyk7XG4gIHZhciBpLCBsYWJlbDtcbiAgZm9yIChpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgIGxhYmVsID0gbGFiZWxzW2ldO1xuICAgIGVuY29kZWQucHVzaChyZWdleE5vbkFTQ0lJLnRlc3QobGFiZWwpID8gJ3huLS0nICsgZW5jb2RlKGxhYmVsKSA6IGxhYmVsKTtcbiAgfVxuICByZXR1cm4gZW5jb2RlZC5qb2luKCcuJyk7XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsLCBrZXksIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIE1FVEhPRF9SRVFVSVJFRCA9IHRvU3RyaW5nICE9PSAoe30pLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmIE1FVEhPRF9SRVFVSVJFRCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwidmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMy40JyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhbWV0aG9kIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCxuby10aHJvdy1saXRlcmFsXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyB0aHJvdyAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3BlY2llc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBkZWZhdWx0Q29uc3RydWN0b3IpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgY29kZVBvaW50QXQsIGF0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklORyA/IFMuY2hhckF0KHBvc2l0aW9uKSA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkcgPyBTLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2VyLWFnZW50Jyk7XG5cbnZhciBsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBwb3N0ID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIS8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiYgIWZhaWxzKHBvc3QpKSB7XG4gICAgZGVmZXIgPSBwb3N0O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGxlbmd0aCwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbiAmJiArdmVyc2lvbjtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgc3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIFN5bWJvbFtuYW1lXVxuICAgIHx8IChOQVRJVkVfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG52YXIgTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEID0gJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCc7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBTUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxudmFyIGlzQ29uY2F0U3ByZWFkYWJsZSA9IGZ1bmN0aW9uIChPKSB7XG4gIGlmICghaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNwcmVhZGFibGUgPSBPW0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgcmV0dXJuIHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoTyk7XG59O1xuXG52YXIgRk9SQ0VEID0gIUlTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgfHwgIVNQRUNJRVNfU1VQUE9SVDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgdmFyIG4gPSAwO1xuICAgIHZhciBpLCBrLCBsZW5ndGgsIGxlbiwgRTtcbiAgICBmb3IgKGkgPSAtMSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBFID0gaSA9PT0gLTEgPyBPIDogYXJndW1lbnRzW2ldO1xuICAgICAgaWYgKGlzQ29uY2F0U3ByZWFkYWJsZShFKSkge1xuICAgICAgICBsZW4gPSB0b0xlbmd0aChFLmxlbmd0aCk7XG4gICAgICAgIGlmIChuICsgbGVuID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID49IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShBLCBuKyssIEUpO1xuICAgICAgfVxuICAgIH1cbiAgICBBLmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmV2ZXJ5O1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IHNsb3BweUFycmF5TWV0aG9kKCdldmVyeScpIH0sIHtcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZsYXRNYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZmxhdE1hcFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgc2xvcHB5QXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2xvcHB5LWFycmF5LW1ldGhvZCcpO1xuXG52YXIgbmF0aXZlSW5kZXhPZiA9IFtdLmluZGV4T2Y7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xudmFyIFNMT1BQWV9NRVRIT0QgPSBzbG9wcHlBcnJheU1ldGhvZCgnaW5kZXhPZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IE5FR0FUSVZFX1pFUk8gfHwgU0xPUFBZX01FVEhPRCB9LCB7XG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyBuYXRpdmVJbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5pc2FycmF5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNBcnJheTogaXNBcnJheVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4geyB2YWx1ZTogaW5kZXgsIGRvbmU6IGZhbHNlIH07XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogdGFyZ2V0W2luZGV4XSwgZG9uZTogZmFsc2UgfTtcbiAgcmV0dXJuIHsgdmFsdWU6IFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGRvbmU6IGZhbHNlIH07XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBuYXRpdmVTbGljZSA9IFtdLnNsaWNlO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIWFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJykgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmICh0eXBlb2YgQ29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZS5jYWxsKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5zb21lO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBzbG9wcHlBcnJheU1ldGhvZCgnc29tZScpIH0sIHtcbiAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkc29tZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHNsb3BweUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Nsb3BweS1hcnJheS1tZXRob2QnKTtcblxudmFyIG5hdGl2ZVNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbi8vIElFOC1cbnZhciBGQUlMU19PTl9VTkRFRklORUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSk7XG4vLyBWOCBidWdcbnZhciBGQUlMU19PTl9OVUxMID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQobnVsbCk7XG59KTtcbi8vIE9sZCBXZWJLaXRcbnZhciBTTE9QUFlfTUVUSE9EID0gc2xvcHB5QXJyYXlNZXRob2QoJ3NvcnQnKTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCBTTE9QUFlfTUVUSE9EO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/IG5hdGl2ZVNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogbmF0aXZlU29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwiLy8gdGhpcyBtZXRob2Qgd2FzIGFkZGVkIHRvIHVuc2NvcGFibGVzIGFmdGVyIGltcGxlbWVudGF0aW9uXG4vLyBpbiBwb3B1bGFyIGVuZ2luZXMsIHNvIGl0J3MgbW92ZWQgdG8gYSBzZXBhcmF0ZSBtb2R1bGVcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdmbGF0TWFwJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCJ2YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gTWF0aFtAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbWF0aC1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVLZXlzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtYWxsU2V0dGxlZFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgYWxsU2V0dGxlZDogZnVuY3Rpb24gYWxsU2V0dGxlZChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBwcm9taXNlUmVzb2x2ZS5jYWxsKEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmZpbmFsbHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBwYXRjaCBuYXRpdmUgUHJvbWlzZS5wcm90b3R5cGUgZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbmlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nICYmICFOYXRpdmVQcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddKSB7XG4gIHJlZGVmaW5lKE5hdGl2ZVByb21pc2UucHJvdG90eXBlLCAnZmluYWxseScsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciAkZmV0Y2ggPSBnZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcbnZhciBJU19OT0RFID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxudmFyIEZPUkNFRCA9IGlzRm9yY2VkKFBST01JU0UsIGZ1bmN0aW9uICgpIHtcbiAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoMSk7XG4gIHZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbU1BFQ0lFU10gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgfTtcbiAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICByZXR1cm4gISgoSVNfTk9ERSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgJiYgKCFJU19QVVJFIHx8IHByb21pc2VbJ2ZpbmFsbHknXSlcbiAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAmJiBWOF9WRVJTSU9OICE9PSA2Nik7XG59KTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSBGT1JDRUQgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSlbJ2NhdGNoJ10oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlLCBzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnJlYWN0aW9ucyA9IFtdO1xuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHByb21pc2UsIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHByb21pc2UsIHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkocHJvbWlzZSwgc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRCkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgdGhpcywgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCB0aGlzLCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdCh0aGlzLCBzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogW10sXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHtcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVhY3Rpb25zLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeSh0aGlzLCBzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgcHJvbWlzZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgcHJvbWlzZSwgc3RhdGUpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgdHlwZW9mIE5hdGl2ZVByb21pc2UgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlLnByb3RvdHlwZS50aGVuO1xuXG4gICAgLy8gd3JhcCBuYXRpdmUgUHJvbWlzZSN0aGVuIGZvciBuYXRpdmUgYXN5bmMgZnVuY3Rpb25zXG4gICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZS5wcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBuYXRpdmVUaGVuLmNhbGwodGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcblxuICAgIC8vIHdyYXAgZmV0Y2ggcmVzdWx0XG4gICAgaWYgKHR5cGVvZiAkZmV0Y2ggPT0gJ2Z1bmN0aW9uJykgJCh7IGdsb2JhbDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoUHJvbWlzZUNvbnN0cnVjdG9yLCAkZmV0Y2guYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcblxuUHJvbWlzZVdyYXBwZXIgPSBnZXRCdWlsdEluKFBST01JU0UpO1xuXG4vLyBzdGF0aWNzXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIGNhcGFiaWxpdHkucmVqZWN0LmNhbGwodW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKElTX1BVUkUgJiYgdGhpcyA9PT0gUHJvbWlzZVdyYXBwZXIgPyBQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIC8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyBgUHJvbWlzZS5yYWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IFN0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCIvLyBlbXB0eVxuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5oYXNJbnN0YW5jZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dyYXBwZWQtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBKU09OID0gZ2xvYmFsLkpTT047XG52YXIgbmF0aXZlSlNPTlN0cmluZ2lmeSA9IEpTT04gJiYgSlNPTi5zdHJpbmdpZnk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyIGlzU3ltYm9sID0gTkFUSVZFX1NZTUJPTCAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGl0KSBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9QcmltaXRpdmUoViwgdHJ1ZSk7XG4gIHZhciBlbnVtZXJhYmxlID0gbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXMoQWxsU3ltYm9scywgUCkgJiYgIWhhcyhPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzKHRoaXMsIFApIHx8ICFoYXMoQWxsU3ltYm9scywgUCkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhoaWRkZW5LZXlzLCBrZXkpKSByZXN1bHQucHVzaChrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXMoT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSkgc2V0dGVyLmNhbGwoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKHRoaXMsIHRhZywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eSgkU3ltYm9sW1BST1RPVFlQRV0sICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgcmVkZWZpbmUoT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5mb3JcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhcyhTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSAkU3ltYm9sKHN0cmluZyk7XG4gICAgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddID0gc3ltYm9sO1xuICAgIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltYm9sXSA9IHN0cmluZztcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9LFxuICAvLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KSB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZCBiZWhhdmlvciB3aXRoIHN5bWJvbHNcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG5KU09OICYmICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiBuYXRpdmVKU09OU3RyaW5naWZ5KFtzeW1ib2xdKSAhPSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8IG5hdGl2ZUpTT05TdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgbmF0aXZlSlNPTlN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT0gJ3t9Jztcbn0pIH0sIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGluZGV4ID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGluZGV4KSBhcmdzLnB1c2goYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBuYXRpdmVKU09OU3RyaW5naWZ5LmFwcGx5KEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5pZiAoISRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xufVxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbEFnZ3JlZ2F0ZUVycm9yU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcignQWdncmVnYXRlRXJyb3InKTtcblxudmFyICRBZ2dyZWdhdGVFcnJvciA9IGZ1bmN0aW9uIEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSkge1xuICB2YXIgdGhhdCA9IHRoaXM7XG4gIGlmICghKHRoYXQgaW5zdGFuY2VvZiAkQWdncmVnYXRlRXJyb3IpKSByZXR1cm4gbmV3ICRBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UpO1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3IEVycm9yKG1lc3NhZ2UpLCBnZXRQcm90b3R5cGVPZih0aGF0KSk7XG4gIH1cbiAgdmFyIGVycm9yc0FycmF5ID0gW107XG4gIGl0ZXJhdGUoZXJyb3JzLCBlcnJvcnNBcnJheS5wdXNoLCBlcnJvcnNBcnJheSk7XG4gIGlmIChERVNDUklQVE9SUykgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7IGVycm9yczogZXJyb3JzQXJyYXksIHR5cGU6ICdBZ2dyZWdhdGVFcnJvcicgfSk7XG4gIGVsc2UgdGhhdC5lcnJvcnMgPSBlcnJvcnNBcnJheTtcbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdtZXNzYWdlJywgU3RyaW5nKG1lc3NhZ2UpKTtcbiAgcmV0dXJuIHRoYXQ7XG59O1xuXG4kQWdncmVnYXRlRXJyb3IucHJvdG90eXBlID0gY3JlYXRlKEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDUsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcig1LCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcig1LCAnQWdncmVnYXRlRXJyb3InKSxcbiAgdG9TdHJpbmc6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcig1LCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgbmFtZSA9IGFuT2JqZWN0KHRoaXMpLm5hbWU7XG4gICAgbmFtZSA9IG5hbWUgPT09IHVuZGVmaW5lZCA/ICdBZ2dyZWdhdGVFcnJvcicgOiBTdHJpbmcobmFtZSk7XG4gICAgdmFyIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2U7XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKG1lc3NhZ2UpO1xuICAgIHJldHVybiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG4gIH0pXG59KTtcblxuaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eS5mKCRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUsICdlcnJvcnMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbEFnZ3JlZ2F0ZUVycm9yU3RhdGUodGhpcykuZXJyb3JzO1xuICB9LFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgQWdncmVnYXRlRXJyb3I6ICRBZ2dyZWdhdGVFcnJvclxufSk7XG4iLCIvLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi9lcy5wcm9taXNlLmFsbC1zZXR0bGVkLmpzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIHZhciBhbHJlYWR5UmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlSZWplY3RlZCA9IGZhbHNlO1xuICAgICAgICBlcnJvcnMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyAoZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKSkoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyAoZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKSkoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gICAgKHJlc3VsdC5lcnJvciA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC11c2luZy1zdGF0ZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC11c2luZy1zdGF0ZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCIvLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCJyZXF1aXJlKCcuL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiAhQ29sbGVjdGlvblByb3RvdHlwZVtUT19TVFJJTkdfVEFHXSkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICB9XG4gIEl0ZXJhdG9yc1tDT0xMRUNUSU9OX05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXVybCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYmluZC1jb250ZXh0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkZmV0Y2ggPSBnZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIEhlYWRlcnMgPSBnZXRCdWlsdEluKCdIZWFkZXJzJyk7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgVVJMX1NFQVJDSF9QQVJBTVMgPSAnVVJMU2VhcmNoUGFyYW1zJztcbnZhciBVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUiA9IFVSTF9TRUFSQ0hfUEFSQU1TICsgJ0l0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFVSTF9TRUFSQ0hfUEFSQU1TKTtcbnZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUik7XG5cbnZhciBwbHVzID0gL1xcKy9nO1xudmFyIHNlcXVlbmNlcyA9IEFycmF5KDQpO1xuXG52YXIgcGVyY2VudFNlcXVlbmNlID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHJldHVybiBzZXF1ZW5jZXNbYnl0ZXMgLSAxXSB8fCAoc2VxdWVuY2VzW2J5dGVzIC0gMV0gPSBSZWdFeHAoJygoPzolW1xcXFxkYS1mXXsyfSl7JyArIGJ5dGVzICsgJ30pJywgJ2dpJykpO1xufTtcblxudmFyIHBlcmNlbnREZWNvZGUgPSBmdW5jdGlvbiAoc2VxdWVuY2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHNlcXVlbmNlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2VxdWVuY2U7XG4gIH1cbn07XG5cbnZhciBkZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gaXQucmVwbGFjZShwbHVzLCAnICcpO1xuICB2YXIgYnl0ZXMgPSA0O1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3aGlsZSAoYnl0ZXMpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHBlcmNlbnRTZXF1ZW5jZShieXRlcy0tKSwgcGVyY2VudERlY29kZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbnZhciBmaW5kID0gL1shJygpfl18JTIwL2c7XG5cbnZhciByZXBsYWNlID0ge1xuICAnISc6ICclMjEnLFxuICBcIidcIjogJyUyNycsXG4gICcoJzogJyUyOCcsXG4gICcpJzogJyUyOScsXG4gICd+JzogJyU3RScsXG4gICclMjAnOiAnKydcbn07XG5cbnZhciByZXBsYWNlciA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICByZXR1cm4gcmVwbGFjZVttYXRjaF07XG59O1xuXG52YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaXQpLnJlcGxhY2UoZmluZCwgcmVwbGFjZXIpO1xufTtcblxudmFyIHBhcnNlU2VhcmNoUGFyYW1zID0gZnVuY3Rpb24gKHJlc3VsdCwgcXVlcnkpIHtcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBxdWVyeS5zcGxpdCgnJicpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGF0dHJpYnV0ZSwgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaW5kZXgrK107XG4gICAgICBpZiAoYXR0cmlidXRlLmxlbmd0aCkge1xuICAgICAgICBlbnRyeSA9IGF0dHJpYnV0ZS5zcGxpdCgnPScpO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAga2V5OiBkZXNlcmlhbGl6ZShlbnRyeS5zaGlmdCgpKSxcbiAgICAgICAgICB2YWx1ZTogZGVzZXJpYWxpemUoZW50cnkuam9pbignPScpKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbnZhciB1cGRhdGVTZWFyY2hQYXJhbXMgPSBmdW5jdGlvbiAocXVlcnkpIHtcbiAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gIHBhcnNlU2VhcmNoUGFyYW1zKHRoaXMuZW50cmllcywgcXVlcnkpO1xufTtcblxudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gZnVuY3Rpb24gKHBhc3NlZCwgcmVxdWlyZWQpIHtcbiAgaWYgKHBhc3NlZCA8IHJlcXVpcmVkKSB0aHJvdyBUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKGZ1bmN0aW9uIEl0ZXJhdG9yKHBhcmFtcywga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUixcbiAgICBpdGVyYXRvcjogZ2V0SXRlcmF0b3IoZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZShwYXJhbXMpLmVudHJpZXMpLFxuICAgIGtpbmQ6IGtpbmRcbiAgfSk7XG59LCAnSXRlcmF0b3InLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIHN0ZXAgPSBzdGF0ZS5pdGVyYXRvci5uZXh0KCk7XG4gIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gIGlmICghc3RlcC5kb25lKSB7XG4gICAgc3RlcC52YWx1ZSA9IGtpbmQgPT09ICdrZXlzJyA/IGVudHJ5LmtleSA6IGtpbmQgPT09ICd2YWx1ZXMnID8gZW50cnkudmFsdWUgOiBbZW50cnkua2V5LCBlbnRyeS52YWx1ZV07XG4gIH0gcmV0dXJuIHN0ZXA7XG59KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtc2AgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLXVybHNlYXJjaHBhcmFtc1xudmFyIFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yID0gZnVuY3Rpb24gVVJMU2VhcmNoUGFyYW1zKC8qIGluaXQgKi8pIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciwgVVJMX1NFQVJDSF9QQVJBTVMpO1xuICB2YXIgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuICB2YXIgdGhhdCA9IHRoaXM7XG4gIHZhciBlbnRyaWVzID0gW107XG4gIHZhciBpdGVyYXRvck1ldGhvZCwgaXRlcmF0b3IsIG5leHQsIHN0ZXAsIGVudHJ5SXRlcmF0b3IsIGVudHJ5TmV4dCwgZmlyc3QsIHNlY29uZCwga2V5O1xuXG4gIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgIHR5cGU6IFVSTF9TRUFSQ0hfUEFSQU1TLFxuICAgIGVudHJpZXM6IGVudHJpZXMsXG4gICAgdXBkYXRlVVJMOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sXG4gICAgdXBkYXRlU2VhcmNoUGFyYW1zOiB1cGRhdGVTZWFyY2hQYXJhbXNcbiAgfSk7XG5cbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChpc09iamVjdChpbml0KSkge1xuICAgICAgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChpbml0KTtcbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JNZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBpdGVyYXRvck1ldGhvZC5jYWxsKGluaXQpO1xuICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmUpIHtcbiAgICAgICAgICBlbnRyeUl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoYW5PYmplY3Qoc3RlcC52YWx1ZSkpO1xuICAgICAgICAgIGVudHJ5TmV4dCA9IGVudHJ5SXRlcmF0b3IubmV4dDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZmlyc3QgPSBlbnRyeU5leHQuY2FsbChlbnRyeUl0ZXJhdG9yKSkuZG9uZSB8fFxuICAgICAgICAgICAgKHNlY29uZCA9IGVudHJ5TmV4dC5jYWxsKGVudHJ5SXRlcmF0b3IpKS5kb25lIHx8XG4gICAgICAgICAgICAhZW50cnlOZXh0LmNhbGwoZW50cnlJdGVyYXRvcikuZG9uZVxuICAgICAgICAgICkgdGhyb3cgVHlwZUVycm9yKCdFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyJyk7XG4gICAgICAgICAgZW50cmllcy5wdXNoKHsga2V5OiBmaXJzdC52YWx1ZSArICcnLCB2YWx1ZTogc2Vjb25kLnZhbHVlICsgJycgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBmb3IgKGtleSBpbiBpbml0KSBpZiAoaGFzT3duKGluaXQsIGtleSkpIGVudHJpZXMucHVzaCh7IGtleToga2V5LCB2YWx1ZTogaW5pdFtrZXldICsgJycgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlU2VhcmNoUGFyYW1zKGVudHJpZXMsIHR5cGVvZiBpbml0ID09PSAnc3RyaW5nJyA/IGluaXQuY2hhckF0KDApID09PSAnPycgPyBpbml0LnNsaWNlKDEpIDogaW5pdCA6IGluaXQgKyAnJyk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG5yZWRlZmluZUFsbChVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsIHtcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuYXBwZW50YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWFwcGVuZFxuICBhcHBlbmQ6IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDIpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgc3RhdGUuZW50cmllcy5wdXNoKHsga2V5OiBuYW1lICsgJycsIHZhbHVlOiB2YWx1ZSArICcnIH0pO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5kZWxldGVgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZGVsZXRlXG4gICdkZWxldGUnOiBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFyIGVudHJpZXMgPSBzdGF0ZS5lbnRyaWVzO1xuICAgIHZhciBrZXkgPSBuYW1lICsgJyc7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSBlbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICBlbHNlIGluZGV4Kys7XG4gICAgfVxuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0XG4gIGdldDogZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIga2V5ID0gbmFtZSArICcnO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChlbnRyaWVzW2luZGV4XS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJpZXNbaW5kZXhdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZ2V0QWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldGFsbFxuICBnZXRBbGw6IGZ1bmN0aW9uIGdldEFsbChuYW1lKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGtleSA9IG5hbWUgKyAnJztcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSByZXN1bHQucHVzaChlbnRyaWVzW2luZGV4XS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmhhc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1oYXNcbiAgaGFzOiBmdW5jdGlvbiBoYXMobmFtZSkge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhciBrZXkgPSBuYW1lICsgJyc7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXgrK10ua2V5ID09PSBrZXkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zZXRcbiAgc2V0OiBmdW5jdGlvbiBzZXQobmFtZSwgdmFsdWUpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICB2YXIga2V5ID0gbmFtZSArICcnO1xuICAgIHZhciB2YWwgPSB2YWx1ZSArICcnO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChmb3VuZCkgZW50cmllcy5zcGxpY2UoaW5kZXgtLSwgMSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvdW5kKSBlbnRyaWVzLnB1c2goeyBrZXk6IGtleSwgdmFsdWU6IHZhbCB9KTtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zb3J0XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgLy8gQXJyYXkjc29ydCBpcyBub3Qgc3RhYmxlIGluIHNvbWUgZW5naW5lc1xuICAgIHZhciBzbGljZSA9IGVudHJpZXMuc2xpY2UoKTtcbiAgICB2YXIgZW50cnksIGVudHJpZXNJbmRleCwgc2xpY2VJbmRleDtcbiAgICBlbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgZm9yIChzbGljZUluZGV4ID0gMDsgc2xpY2VJbmRleCA8IHNsaWNlLmxlbmd0aDsgc2xpY2VJbmRleCsrKSB7XG4gICAgICBlbnRyeSA9IHNsaWNlW3NsaWNlSW5kZXhdO1xuICAgICAgZm9yIChlbnRyaWVzSW5kZXggPSAwOyBlbnRyaWVzSW5kZXggPCBzbGljZUluZGV4OyBlbnRyaWVzSW5kZXgrKykge1xuICAgICAgICBpZiAoZW50cmllc1tlbnRyaWVzSW5kZXhdLmtleSA+IGVudHJ5LmtleSkge1xuICAgICAgICAgIGVudHJpZXMuc3BsaWNlKGVudHJpZXNJbmRleCwgMCwgZW50cnkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW50cmllc0luZGV4ID09PSBzbGljZUluZGV4KSBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH1cbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgfVxuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5rZXlzYCBtZXRob2RcbiAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICdrZXlzJyk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ3ZhbHVlcycpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2RcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICdlbnRyaWVzJyk7XG4gIH1cbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxucmVkZWZpbmUoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCBJVEVSQVRPUiwgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmVudHJpZXMpO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHNlYXJjaHBhcmFtcy1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbnJlZGVmaW5lKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBlbnRyeTtcbiAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgcmVzdWx0LnB1c2goc2VyaWFsaXplKGVudHJ5LmtleSkgKyAnPScgKyBzZXJpYWxpemUoZW50cnkudmFsdWUpKTtcbiAgfSByZXR1cm4gcmVzdWx0LmpvaW4oJyYnKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuc2V0VG9TdHJpbmdUYWcoVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsIFVSTF9TRUFSQ0hfUEFSQU1TKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwgfSwge1xuICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yXG59KTtcblxuLy8gV3JhcCBgZmV0Y2hgIGZvciBjb3JyZWN0IHdvcmsgd2l0aCBwb2x5ZmlsbGVkIGBVUkxTZWFyY2hQYXJhbXNgXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc0XG5pZiAoIVVTRV9OQVRJVkVfVVJMICYmIHR5cGVvZiAkZmV0Y2ggPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSGVhZGVycyA9PSAnZnVuY3Rpb24nKSB7XG4gICQoeyBnbG9iYWw6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgdmFyIGFyZ3MgPSBbaW5wdXRdO1xuICAgICAgdmFyIGluaXQsIGJvZHksIGhlYWRlcnM7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaW5pdCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGluaXQpKSB7XG4gICAgICAgICAgYm9keSA9IGluaXQuYm9keTtcbiAgICAgICAgICBpZiAoY2xhc3NvZihib2R5KSA9PT0gVVJMX1NFQVJDSF9QQVJBTVMpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbml0LmhlYWRlcnMpO1xuICAgICAgICAgICAgaWYgKCFoZWFkZXJzLmhhcygnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5pdCA9IGNyZWF0ZShpbml0LCB7XG4gICAgICAgICAgICAgIGJvZHk6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBTdHJpbmcoYm9keSkpLFxuICAgICAgICAgICAgICBoZWFkZXJzOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgaGVhZGVycylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcmdzLnB1c2goaW5pdCk7XG4gICAgICB9IHJldHVybiAkZmV0Y2guYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsXG4gIGdldFN0YXRlOiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS11cmwnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcbnZhciBhcnJheUZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNvZGVBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY29kZUF0O1xudmFyIHRvQVNDSUkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHVueWNvZGUtdG8tYXNjaWknKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIFVSTFNlYXJjaFBhcmFtc01vZHVsZSA9IHJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgTmF0aXZlVVJMID0gZ2xvYmFsLlVSTDtcbnZhciBVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuVVJMU2VhcmNoUGFyYW1zO1xudmFyIGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuZ2V0U3RhdGU7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsVVJMU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcignVVJMJyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIHBvdyA9IE1hdGgucG93O1xuXG52YXIgSU5WQUxJRF9BVVRIT1JJVFkgPSAnSW52YWxpZCBhdXRob3JpdHknO1xudmFyIElOVkFMSURfU0NIRU1FID0gJ0ludmFsaWQgc2NoZW1lJztcbnZhciBJTlZBTElEX0hPU1QgPSAnSW52YWxpZCBob3N0JztcbnZhciBJTlZBTElEX1BPUlQgPSAnSW52YWxpZCBwb3J0JztcblxudmFyIEFMUEhBID0gL1tBLVphLXpdLztcbnZhciBBTFBIQU5VTUVSSUMgPSAvW1xcZCtcXC0uQS1aYS16XS87XG52YXIgRElHSVQgPSAvXFxkLztcbnZhciBIRVhfU1RBUlQgPSAvXigweHwwWCkvO1xudmFyIE9DVCA9IC9eWzAtN10rJC87XG52YXIgREVDID0gL15cXGQrJC87XG52YXIgSEVYID0gL15bXFxkQS1GYS1mXSskLztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG52YXIgRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCA9IC9bXFx1MDAwMFxcdTAwMDlcXHUwMDBBXFx1MDAwRCAjJS86P0BbXFxcXF1dLztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG52YXIgRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVF9FWENMVURJTkdfUEVSQ0VOVCA9IC9bXFx1MDAwMFxcdTAwMDlcXHUwMDBBXFx1MDAwRCAjLzo/QFtcXFxcXV0vO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbnZhciBMRUFESU5HX0FORF9UUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFID0gL15bXFx1MDAwMC1cXHUwMDFGIF0rfFtcXHUwMDAwLVxcdTAwMUYgXSskL2c7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxudmFyIFRBQl9BTkRfTkVXX0xJTkUgPSAvW1xcdTAwMDlcXHUwMDBBXFx1MDAwRF0vZztcbnZhciBFT0Y7XG5cbnZhciBwYXJzZUhvc3QgPSBmdW5jdGlvbiAodXJsLCBpbnB1dCkge1xuICB2YXIgcmVzdWx0LCBjb2RlUG9pbnRzLCBpbmRleDtcbiAgaWYgKGlucHV0LmNoYXJBdCgwKSA9PSAnWycpIHtcbiAgICBpZiAoaW5wdXQuY2hhckF0KGlucHV0Lmxlbmd0aCAtIDEpICE9ICddJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICByZXN1bHQgPSBwYXJzZUlQdjYoaW5wdXQuc2xpY2UoMSwgLTEpKTtcbiAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICB1cmwuaG9zdCA9IHJlc3VsdDtcbiAgLy8gb3BhcXVlIGhvc3RcbiAgfSBlbHNlIGlmICghaXNTcGVjaWFsKHVybCkpIHtcbiAgICBpZiAoRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVF9FWENMVURJTkdfUEVSQ0VOVC50ZXN0KGlucHV0KSkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICByZXN1bHQgPSAnJztcbiAgICBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKGlucHV0KTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb2RlUG9pbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0ICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpbmRleF0sIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgIH1cbiAgICB1cmwuaG9zdCA9IHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dCA9IHRvQVNDSUkoaW5wdXQpO1xuICAgIGlmIChGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5ULnRlc3QoaW5wdXQpKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgIHJlc3VsdCA9IHBhcnNlSVB2NChpbnB1dCk7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICB1cmwuaG9zdCA9IHJlc3VsdDtcbiAgfVxufTtcblxudmFyIHBhcnNlSVB2NCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgcGFydHMgPSBpbnB1dC5zcGxpdCgnLicpO1xuICB2YXIgcGFydHNMZW5ndGgsIG51bWJlcnMsIGluZGV4LCBwYXJ0LCByYWRpeCwgbnVtYmVyLCBpcHY0O1xuICBpZiAocGFydHMubGVuZ3RoICYmIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09ICcnKSB7XG4gICAgcGFydHMucG9wKCk7XG4gIH1cbiAgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChwYXJ0c0xlbmd0aCA+IDQpIHJldHVybiBpbnB1dDtcbiAgbnVtYmVycyA9IFtdO1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0c0xlbmd0aDsgaW5kZXgrKykge1xuICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07XG4gICAgaWYgKHBhcnQgPT0gJycpIHJldHVybiBpbnB1dDtcbiAgICByYWRpeCA9IDEwO1xuICAgIGlmIChwYXJ0Lmxlbmd0aCA+IDEgJiYgcGFydC5jaGFyQXQoMCkgPT0gJzAnKSB7XG4gICAgICByYWRpeCA9IEhFWF9TVEFSVC50ZXN0KHBhcnQpID8gMTYgOiA4O1xuICAgICAgcGFydCA9IHBhcnQuc2xpY2UocmFkaXggPT0gOCA/IDEgOiAyKTtcbiAgICB9XG4gICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICBudW1iZXIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIShyYWRpeCA9PSAxMCA/IERFQyA6IHJhZGl4ID09IDggPyBPQ1QgOiBIRVgpLnRlc3QocGFydCkpIHJldHVybiBpbnB1dDtcbiAgICAgIG51bWJlciA9IHBhcnNlSW50KHBhcnQsIHJhZGl4KTtcbiAgICB9XG4gICAgbnVtYmVycy5wdXNoKG51bWJlcik7XG4gIH1cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFydHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBudW1iZXIgPSBudW1iZXJzW2luZGV4XTtcbiAgICBpZiAoaW5kZXggPT0gcGFydHNMZW5ndGggLSAxKSB7XG4gICAgICBpZiAobnVtYmVyID49IHBvdygyNTYsIDUgLSBwYXJ0c0xlbmd0aCkpIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID4gMjU1KSByZXR1cm4gbnVsbDtcbiAgfVxuICBpcHY0ID0gbnVtYmVycy5wb3AoKTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpcHY0ICs9IG51bWJlcnNbaW5kZXhdICogcG93KDI1NiwgMyAtIGluZGV4KTtcbiAgfVxuICByZXR1cm4gaXB2NDtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xudmFyIHBhcnNlSVB2NiA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgYWRkcmVzcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgdmFyIHBpZWNlSW5kZXggPSAwO1xuICB2YXIgY29tcHJlc3MgPSBudWxsO1xuICB2YXIgcG9pbnRlciA9IDA7XG4gIHZhciB2YWx1ZSwgbGVuZ3RoLCBudW1iZXJzU2VlbiwgaXB2NFBpZWNlLCBudW1iZXIsIHN3YXBzLCBzd2FwO1xuXG4gIHZhciBjaGFyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnB1dC5jaGFyQXQocG9pbnRlcik7XG4gIH07XG5cbiAgaWYgKGNoYXIoKSA9PSAnOicpIHtcbiAgICBpZiAoaW5wdXQuY2hhckF0KDEpICE9ICc6JykgcmV0dXJuO1xuICAgIHBvaW50ZXIgKz0gMjtcbiAgICBwaWVjZUluZGV4Kys7XG4gICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xuICB9XG4gIHdoaWxlIChjaGFyKCkpIHtcbiAgICBpZiAocGllY2VJbmRleCA9PSA4KSByZXR1cm47XG4gICAgaWYgKGNoYXIoKSA9PSAnOicpIHtcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgcGllY2VJbmRleCsrO1xuICAgICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhbHVlID0gbGVuZ3RoID0gMDtcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBIRVgudGVzdChjaGFyKCkpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlICogMTYgKyBwYXJzZUludChjaGFyKCksIDE2KTtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIGxlbmd0aCsrO1xuICAgIH1cbiAgICBpZiAoY2hhcigpID09ICcuJykge1xuICAgICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikgcmV0dXJuO1xuICAgICAgbnVtYmVyc1NlZW4gPSAwO1xuICAgICAgd2hpbGUgKGNoYXIoKSkge1xuICAgICAgICBpcHY0UGllY2UgPSBudWxsO1xuICAgICAgICBpZiAobnVtYmVyc1NlZW4gPiAwKSB7XG4gICAgICAgICAgaWYgKGNoYXIoKSA9PSAnLicgJiYgbnVtYmVyc1NlZW4gPCA0KSBwb2ludGVyKys7XG4gICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFESUdJVC50ZXN0KGNoYXIoKSkpIHJldHVybjtcbiAgICAgICAgd2hpbGUgKERJR0lULnRlc3QoY2hhcigpKSkge1xuICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50KGNoYXIoKSwgMTApO1xuICAgICAgICAgIGlmIChpcHY0UGllY2UgPT09IG51bGwpIGlwdjRQaWVjZSA9IG51bWJlcjtcbiAgICAgICAgICBlbHNlIGlmIChpcHY0UGllY2UgPT0gMCkgcmV0dXJuO1xuICAgICAgICAgIGVsc2UgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA+IDI1NSkgcmV0dXJuO1xuICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gYWRkcmVzc1twaWVjZUluZGV4XSAqIDI1NiArIGlwdjRQaWVjZTtcbiAgICAgICAgbnVtYmVyc1NlZW4rKztcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09IDIgfHwgbnVtYmVyc1NlZW4gPT0gNCkgcGllY2VJbmRleCsrO1xuICAgICAgfVxuICAgICAgaWYgKG51bWJlcnNTZWVuICE9IDQpIHJldHVybjtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoY2hhcigpID09ICc6Jykge1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgaWYgKCFjaGFyKCkpIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGNoYXIoKSkgcmV0dXJuO1xuICAgIGFkZHJlc3NbcGllY2VJbmRleCsrXSA9IHZhbHVlO1xuICB9XG4gIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xuICAgIHN3YXBzID0gcGllY2VJbmRleCAtIGNvbXByZXNzO1xuICAgIHBpZWNlSW5kZXggPSA3O1xuICAgIHdoaWxlIChwaWVjZUluZGV4ICE9IDAgJiYgc3dhcHMgPiAwKSB7XG4gICAgICBzd2FwID0gYWRkcmVzc1twaWVjZUluZGV4XTtcbiAgICAgIGFkZHJlc3NbcGllY2VJbmRleC0tXSA9IGFkZHJlc3NbY29tcHJlc3MgKyBzd2FwcyAtIDFdO1xuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIC0tc3dhcHNdID0gc3dhcDtcbiAgICB9XG4gIH0gZWxzZSBpZiAocGllY2VJbmRleCAhPSA4KSByZXR1cm47XG4gIHJldHVybiBhZGRyZXNzO1xufTtcblxudmFyIGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlID0gZnVuY3Rpb24gKGlwdjYpIHtcbiAgdmFyIG1heEluZGV4ID0gbnVsbDtcbiAgdmFyIG1heExlbmd0aCA9IDE7XG4gIHZhciBjdXJyU3RhcnQgPSBudWxsO1xuICB2YXIgY3Vyckxlbmd0aCA9IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIGZvciAoOyBpbmRleCA8IDg7IGluZGV4KyspIHtcbiAgICBpZiAoaXB2NltpbmRleF0gIT09IDApIHtcbiAgICAgIGlmIChjdXJyTGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIG1heEluZGV4ID0gY3VyclN0YXJ0O1xuICAgICAgICBtYXhMZW5ndGggPSBjdXJyTGVuZ3RoO1xuICAgICAgfVxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcbiAgICAgIGN1cnJMZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSBjdXJyU3RhcnQgPSBpbmRleDtcbiAgICAgICsrY3Vyckxlbmd0aDtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJMZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICBtYXhJbmRleCA9IGN1cnJTdGFydDtcbiAgICBtYXhMZW5ndGggPSBjdXJyTGVuZ3RoO1xuICB9XG4gIHJldHVybiBtYXhJbmRleDtcbn07XG5cbnZhciBzZXJpYWxpemVIb3N0ID0gZnVuY3Rpb24gKGhvc3QpIHtcbiAgdmFyIHJlc3VsdCwgaW5kZXgsIGNvbXByZXNzLCBpZ25vcmUwO1xuICAvLyBpcHY0XG4gIGlmICh0eXBlb2YgaG9zdCA9PSAnbnVtYmVyJykge1xuICAgIHJlc3VsdCA9IFtdO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KGhvc3QgJSAyNTYpO1xuICAgICAgaG9zdCA9IGZsb29yKGhvc3QgLyAyNTYpO1xuICAgIH0gcmV0dXJuIHJlc3VsdC5qb2luKCcuJyk7XG4gIC8vIGlwdjZcbiAgfSBlbHNlIGlmICh0eXBlb2YgaG9zdCA9PSAnb2JqZWN0Jykge1xuICAgIHJlc3VsdCA9ICcnO1xuICAgIGNvbXByZXNzID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoaG9zdCk7XG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgODsgaW5kZXgrKykge1xuICAgICAgaWYgKGlnbm9yZTAgJiYgaG9zdFtpbmRleF0gPT09IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKGlnbm9yZTApIGlnbm9yZTAgPSBmYWxzZTtcbiAgICAgIGlmIChjb21wcmVzcyA9PT0gaW5kZXgpIHtcbiAgICAgICAgcmVzdWx0ICs9IGluZGV4ID8gJzonIDogJzo6JztcbiAgICAgICAgaWdub3JlMCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gaG9zdFtpbmRleF0udG9TdHJpbmcoMTYpO1xuICAgICAgICBpZiAoaW5kZXggPCA3KSByZXN1bHQgKz0gJzonO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ1snICsgcmVzdWx0ICsgJ10nO1xuICB9IHJldHVybiBob3N0O1xufTtcblxudmFyIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQgPSB7fTtcbnZhciBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJyAnOiAxLCAnXCInOiAxLCAnPCc6IDEsICc+JzogMSwgJ2AnOiAxXG59KTtcbnZhciBwYXRoUGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcjJzogMSwgJz8nOiAxLCAneyc6IDEsICd9JzogMVxufSk7XG52YXIgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBwYXRoUGVyY2VudEVuY29kZVNldCwge1xuICAnLyc6IDEsICc6JzogMSwgJzsnOiAxLCAnPSc6IDEsICdAJzogMSwgJ1snOiAxLCAnXFxcXCc6IDEsICddJzogMSwgJ14nOiAxLCAnfCc6IDFcbn0pO1xuXG52YXIgcGVyY2VudEVuY29kZSA9IGZ1bmN0aW9uIChjaGFyLCBzZXQpIHtcbiAgdmFyIGNvZGUgPSBjb2RlQXQoY2hhciwgMCk7XG4gIHJldHVybiBjb2RlID4gMHgyMCAmJiBjb2RlIDwgMHg3RiAmJiAhaGFzKHNldCwgY2hhcikgPyBjaGFyIDogZW5jb2RlVVJJQ29tcG9uZW50KGNoYXIpO1xufTtcblxudmFyIHNwZWNpYWxTY2hlbWVzID0ge1xuICBmdHA6IDIxLFxuICBmaWxlOiBudWxsLFxuICBodHRwOiA4MCxcbiAgaHR0cHM6IDQ0MyxcbiAgd3M6IDgwLFxuICB3c3M6IDQ0M1xufTtcblxudmFyIGlzU3BlY2lhbCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgcmV0dXJuIGhhcyhzcGVjaWFsU2NoZW1lcywgdXJsLnNjaGVtZSk7XG59O1xuXG52YXIgaW5jbHVkZXNDcmVkZW50aWFscyA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgcmV0dXJuIHVybC51c2VybmFtZSAhPSAnJyB8fCB1cmwucGFzc3dvcmQgIT0gJyc7XG59O1xuXG52YXIgY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0ID0gZnVuY3Rpb24gKHVybCkge1xuICByZXR1cm4gIXVybC5ob3N0IHx8IHVybC5jYW5ub3RCZUFCYXNlVVJMIHx8IHVybC5zY2hlbWUgPT0gJ2ZpbGUnO1xufTtcblxudmFyIGlzV2luZG93c0RyaXZlTGV0dGVyID0gZnVuY3Rpb24gKHN0cmluZywgbm9ybWFsaXplZCkge1xuICB2YXIgc2Vjb25kO1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PSAyICYmIEFMUEhBLnRlc3Qoc3RyaW5nLmNoYXJBdCgwKSlcbiAgICAmJiAoKHNlY29uZCA9IHN0cmluZy5jaGFyQXQoMSkpID09ICc6JyB8fCAoIW5vcm1hbGl6ZWQgJiYgc2Vjb25kID09ICd8JykpO1xufTtcblxudmFyIHN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciB0aGlyZDtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPiAxICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZy5zbGljZSgwLCAyKSkgJiYgKFxuICAgIHN0cmluZy5sZW5ndGggPT0gMiB8fFxuICAgICgodGhpcmQgPSBzdHJpbmcuY2hhckF0KDIpKSA9PT0gJy8nIHx8IHRoaXJkID09PSAnXFxcXCcgfHwgdGhpcmQgPT09ICc/JyB8fCB0aGlyZCA9PT0gJyMnKVxuICApO1xufTtcblxudmFyIHNob3J0ZW5VUkxzUGF0aCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgdmFyIHBhdGggPSB1cmwucGF0aDtcbiAgdmFyIHBhdGhTaXplID0gcGF0aC5sZW5ndGg7XG4gIGlmIChwYXRoU2l6ZSAmJiAodXJsLnNjaGVtZSAhPSAnZmlsZScgfHwgcGF0aFNpemUgIT0gMSB8fCAhaXNXaW5kb3dzRHJpdmVMZXR0ZXIocGF0aFswXSwgdHJ1ZSkpKSB7XG4gICAgcGF0aC5wb3AoKTtcbiAgfVxufTtcblxudmFyIGlzU2luZ2xlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuJyB8fCBzZWdtZW50LnRvTG93ZXJDYXNlKCkgPT09ICclMmUnO1xufTtcblxudmFyIGlzRG91YmxlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgc2VnbWVudCA9IHNlZ21lbnQudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuLicgfHwgc2VnbWVudCA9PT0gJyUyZS4nIHx8IHNlZ21lbnQgPT09ICcuJTJlJyB8fCBzZWdtZW50ID09PSAnJTJlJTJlJztcbn07XG5cbi8vIFN0YXRlczpcbnZhciBTQ0hFTUVfU1RBUlQgPSB7fTtcbnZhciBTQ0hFTUUgPSB7fTtcbnZhciBOT19TQ0hFTUUgPSB7fTtcbnZhciBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWSA9IHt9O1xudmFyIFBBVEhfT1JfQVVUSE9SSVRZID0ge307XG52YXIgUkVMQVRJVkUgPSB7fTtcbnZhciBSRUxBVElWRV9TTEFTSCA9IHt9O1xudmFyIFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVMgPSB7fTtcbnZhciBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUyA9IHt9O1xudmFyIEFVVEhPUklUWSA9IHt9O1xudmFyIEhPU1QgPSB7fTtcbnZhciBIT1NUTkFNRSA9IHt9O1xudmFyIFBPUlQgPSB7fTtcbnZhciBGSUxFID0ge307XG52YXIgRklMRV9TTEFTSCA9IHt9O1xudmFyIEZJTEVfSE9TVCA9IHt9O1xudmFyIFBBVEhfU1RBUlQgPSB7fTtcbnZhciBQQVRIID0ge307XG52YXIgQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSCA9IHt9O1xudmFyIFFVRVJZID0ge307XG52YXIgRlJBR01FTlQgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG52YXIgcGFyc2VVUkwgPSBmdW5jdGlvbiAodXJsLCBpbnB1dCwgc3RhdGVPdmVycmlkZSwgYmFzZSkge1xuICB2YXIgc3RhdGUgPSBzdGF0ZU92ZXJyaWRlIHx8IFNDSEVNRV9TVEFSVDtcbiAgdmFyIHBvaW50ZXIgPSAwO1xuICB2YXIgYnVmZmVyID0gJyc7XG4gIHZhciBzZWVuQXQgPSBmYWxzZTtcbiAgdmFyIHNlZW5CcmFja2V0ID0gZmFsc2U7XG4gIHZhciBzZWVuUGFzc3dvcmRUb2tlbiA9IGZhbHNlO1xuICB2YXIgY29kZVBvaW50cywgY2hhciwgYnVmZmVyQ29kZVBvaW50cywgZmFpbHVyZTtcblxuICBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICB1cmwuc2NoZW1lID0gJyc7XG4gICAgdXJsLnVzZXJuYW1lID0gJyc7XG4gICAgdXJsLnBhc3N3b3JkID0gJyc7XG4gICAgdXJsLmhvc3QgPSBudWxsO1xuICAgIHVybC5wb3J0ID0gbnVsbDtcbiAgICB1cmwucGF0aCA9IFtdO1xuICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IGZhbHNlO1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShMRUFESU5HX0FORF9UUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFLCAnJyk7XG4gIH1cblxuICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoVEFCX0FORF9ORVdfTElORSwgJycpO1xuXG4gIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuXG4gIHdoaWxlIChwb2ludGVyIDw9IGNvZGVQb2ludHMubGVuZ3RoKSB7XG4gICAgY2hhciA9IGNvZGVQb2ludHNbcG9pbnRlcl07XG4gICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgY2FzZSBTQ0hFTUVfU1RBUlQ6XG4gICAgICAgIGlmIChjaGFyICYmIEFMUEhBLnRlc3QoY2hhcikpIHtcbiAgICAgICAgICBidWZmZXIgKz0gY2hhci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHN0YXRlID0gU0NIRU1FO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgc3RhdGUgPSBOT19TQ0hFTUU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNDSEVNRTpcbiAgICAgICAgaWYgKGNoYXIgJiYgKEFMUEhBTlVNRVJJQy50ZXN0KGNoYXIpIHx8IGNoYXIgPT0gJysnIHx8IGNoYXIgPT0gJy0nIHx8IGNoYXIgPT0gJy4nKSkge1xuICAgICAgICAgIGJ1ZmZlciArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSAnOicpIHtcbiAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiAoXG4gICAgICAgICAgICAoaXNTcGVjaWFsKHVybCkgIT0gaGFzKHNwZWNpYWxTY2hlbWVzLCBidWZmZXIpKSB8fFxuICAgICAgICAgICAgKGJ1ZmZlciA9PSAnZmlsZScgJiYgKGluY2x1ZGVzQ3JlZGVudGlhbHModXJsKSB8fCB1cmwucG9ydCAhPT0gbnVsbCkpIHx8XG4gICAgICAgICAgICAodXJsLnNjaGVtZSA9PSAnZmlsZScgJiYgIXVybC5ob3N0KVxuICAgICAgICAgICkpIHJldHVybjtcbiAgICAgICAgICB1cmwuc2NoZW1lID0gYnVmZmVyO1xuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBpZiAoaXNTcGVjaWFsKHVybCkgJiYgc3BlY2lhbFNjaGVtZXNbdXJsLnNjaGVtZV0gPT0gdXJsLnBvcnQpIHVybC5wb3J0ID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEZJTEU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1NwZWNpYWwodXJsKSAmJiBiYXNlICYmIGJhc2Uuc2NoZW1lID09IHVybC5zY2hlbWUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1NwZWNpYWwodXJsKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50c1twb2ludGVyICsgMV0gPT0gJy8nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEhfT1JfQVVUSE9SSVRZO1xuICAgICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XG4gICAgICAgICAgICB1cmwucGF0aC5wdXNoKCcnKTtcbiAgICAgICAgICAgIHN0YXRlID0gQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IE5PX1NDSEVNRTtcbiAgICAgICAgICBwb2ludGVyID0gMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTk9fU0NIRU1FOlxuICAgICAgICBpZiAoIWJhc2UgfHwgKGJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjaGFyICE9ICcjJykpIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgaWYgKGJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjaGFyID09ICcjJykge1xuICAgICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBiYXNlLnNjaGVtZSA9PSAnZmlsZScgPyBGSUxFIDogUkVMQVRJVkU7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlIFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZOlxuICAgICAgICBpZiAoY2hhciA9PSAnLycgJiYgY29kZVBvaW50c1twb2ludGVyICsgMV0gPT0gJy8nKSB7XG4gICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBSRUxBVElWRTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBQQVRIX09SX0FVVEhPUklUWTpcbiAgICAgICAgaWYgKGNoYXIgPT0gJy8nKSB7XG4gICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVMQVRJVkU6XG4gICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgaWYgKGNoYXIgPT0gRU9GKSB7XG4gICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFyID09ICcvJyB8fCAoY2hhciA9PSAnXFxcXCcgJiYgaXNTcGVjaWFsKHVybCkpKSB7XG4gICAgICAgICAgc3RhdGUgPSBSRUxBVElWRV9TTEFTSDtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFyID09ICc/Jykge1xuICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSAnIycpIHtcbiAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgdXJsLnBhdGggPSBiYXNlLnBhdGguc2xpY2UoKTtcbiAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgdXJsLnBhdGgucG9wKCk7XG4gICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICBjYXNlIFJFTEFUSVZFX1NMQVNIOlxuICAgICAgICBpZiAoaXNTcGVjaWFsKHVybCkgJiYgKGNoYXIgPT0gJy8nIHx8IGNoYXIgPT0gJ1xcXFwnKSkge1xuICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSAnLycpIHtcbiAgICAgICAgICBzdGF0ZSA9IEFVVEhPUklUWTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICBjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVM6XG4gICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgIGlmIChjaGFyICE9ICcvJyB8fCBidWZmZXIuY2hhckF0KHBvaW50ZXIgKyAxKSAhPSAnLycpIGNvbnRpbnVlO1xuICAgICAgICBwb2ludGVyKys7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTOlxuICAgICAgICBpZiAoY2hhciAhPSAnLycgJiYgY2hhciAhPSAnXFxcXCcpIHtcbiAgICAgICAgICBzdGF0ZSA9IEFVVEhPUklUWTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBBVVRIT1JJVFk6XG4gICAgICAgIGlmIChjaGFyID09ICdAJykge1xuICAgICAgICAgIGlmIChzZWVuQXQpIGJ1ZmZlciA9ICclNDAnICsgYnVmZmVyO1xuICAgICAgICAgIHNlZW5BdCA9IHRydWU7XG4gICAgICAgICAgYnVmZmVyQ29kZVBvaW50cyA9IGFycmF5RnJvbShidWZmZXIpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyQ29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IGJ1ZmZlckNvZGVQb2ludHNbaV07XG4gICAgICAgICAgICBpZiAoY29kZVBvaW50ID09ICc6JyAmJiAhc2VlblBhc3N3b3JkVG9rZW4pIHtcbiAgICAgICAgICAgICAgc2VlblBhc3N3b3JkVG9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBlbmNvZGVkQ29kZVBvaW50cyA9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50LCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgICAgaWYgKHNlZW5QYXNzd29yZFRva2VuKSB1cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XG4gICAgICAgICAgICBlbHNlIHVybC51c2VybmFtZSArPSBlbmNvZGVkQ29kZVBvaW50cztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgY2hhciA9PSBFT0YgfHwgY2hhciA9PSAnLycgfHwgY2hhciA9PSAnPycgfHwgY2hhciA9PSAnIycgfHxcbiAgICAgICAgICAoY2hhciA9PSAnXFxcXCcgJiYgaXNTcGVjaWFsKHVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChzZWVuQXQgJiYgYnVmZmVyID09ICcnKSByZXR1cm4gSU5WQUxJRF9BVVRIT1JJVFk7XG4gICAgICAgICAgcG9pbnRlciAtPSBhcnJheUZyb20oYnVmZmVyKS5sZW5ndGggKyAxO1xuICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gSE9TVDtcbiAgICAgICAgfSBlbHNlIGJ1ZmZlciArPSBjaGFyO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIT1NUOlxuICAgICAgY2FzZSBIT1NUTkFNRTpcbiAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgdXJsLnNjaGVtZSA9PSAnZmlsZScpIHtcbiAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFyID09ICc6JyAmJiAhc2VlbkJyYWNrZXQpIHtcbiAgICAgICAgICBpZiAoYnVmZmVyID09ICcnKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgICAgIGZhaWx1cmUgPSBwYXJzZUhvc3QodXJsLCBidWZmZXIpO1xuICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IFBPUlQ7XG4gICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgPT0gSE9TVE5BTUUpIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjaGFyID09IEVPRiB8fCBjaGFyID09ICcvJyB8fCBjaGFyID09ICc/JyB8fCBjaGFyID09ICcjJyB8fFxuICAgICAgICAgIChjaGFyID09ICdcXFxcJyAmJiBpc1NwZWNpYWwodXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGlzU3BlY2lhbCh1cmwpICYmIGJ1ZmZlciA9PSAnJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiBidWZmZXIgPT0gJycgJiYgKGluY2x1ZGVzQ3JlZGVudGlhbHModXJsKSB8fCB1cmwucG9ydCAhPT0gbnVsbCkpIHJldHVybjtcbiAgICAgICAgICBmYWlsdXJlID0gcGFyc2VIb3N0KHVybCwgYnVmZmVyKTtcbiAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGNoYXIgPT0gJ1snKSBzZWVuQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgZWxzZSBpZiAoY2hhciA9PSAnXScpIHNlZW5CcmFja2V0ID0gZmFsc2U7XG4gICAgICAgICAgYnVmZmVyICs9IGNoYXI7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgUE9SVDpcbiAgICAgICAgaWYgKERJR0lULnRlc3QoY2hhcikpIHtcbiAgICAgICAgICBidWZmZXIgKz0gY2hhcjtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjaGFyID09IEVPRiB8fCBjaGFyID09ICcvJyB8fCBjaGFyID09ICc/JyB8fCBjaGFyID09ICcjJyB8fFxuICAgICAgICAgIChjaGFyID09ICdcXFxcJyAmJiBpc1NwZWNpYWwodXJsKSkgfHxcbiAgICAgICAgICBzdGF0ZU92ZXJyaWRlXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChidWZmZXIgIT0gJycpIHtcbiAgICAgICAgICAgIHZhciBwb3J0ID0gcGFyc2VJbnQoYnVmZmVyLCAxMCk7XG4gICAgICAgICAgICBpZiAocG9ydCA+IDB4RkZGRikgcmV0dXJuIElOVkFMSURfUE9SVDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gKGlzU3BlY2lhbCh1cmwpICYmIHBvcnQgPT09IHNwZWNpYWxTY2hlbWVzW3VybC5zY2hlbWVdKSA/IG51bGwgOiBwb3J0O1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfUE9SVDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRklMRTpcbiAgICAgICAgdXJsLnNjaGVtZSA9ICdmaWxlJztcbiAgICAgICAgaWYgKGNoYXIgPT0gJy8nIHx8IGNoYXIgPT0gJ1xcXFwnKSBzdGF0ZSA9IEZJTEVfU0xBU0g7XG4gICAgICAgIGVsc2UgaWYgKGJhc2UgJiYgYmFzZS5zY2hlbWUgPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgaWYgKGNoYXIgPT0gRU9GKSB7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSAnPycpIHtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBiYXNlLnBhdGguc2xpY2UoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoY29kZVBvaW50cy5zbGljZShwb2ludGVyKS5qb2luKCcnKSkpIHtcbiAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICAgIHNob3J0ZW5VUkxzUGF0aCh1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBGSUxFX1NMQVNIOlxuICAgICAgICBpZiAoY2hhciA9PSAnLycgfHwgY2hhciA9PSAnXFxcXCcpIHtcbiAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFzZSAmJiBiYXNlLnNjaGVtZSA9PSAnZmlsZScgJiYgIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoY29kZVBvaW50cy5zbGljZShwb2ludGVyKS5qb2luKCcnKSkpIHtcbiAgICAgICAgICBpZiAoaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYmFzZS5wYXRoWzBdLCB0cnVlKSkgdXJsLnBhdGgucHVzaChiYXNlLnBhdGhbMF0pO1xuICAgICAgICAgIGVsc2UgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSBGSUxFX0hPU1Q6XG4gICAgICAgIGlmIChjaGFyID09IEVPRiB8fCBjaGFyID09ICcvJyB8fCBjaGFyID09ICdcXFxcJyB8fCBjaGFyID09ICc/JyB8fCBjaGFyID09ICcjJykge1xuICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihidWZmZXIpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgfSBlbHNlIGlmIChidWZmZXIgPT0gJycpIHtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmYWlsdXJlID0gcGFyc2VIb3N0KHVybCwgYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICAgIGlmICh1cmwuaG9zdCA9PSAnbG9jYWxob3N0JykgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICB9IGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgYnVmZmVyICs9IGNoYXI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFBBVEhfU1RBUlQ6XG4gICAgICAgIGlmIChpc1NwZWNpYWwodXJsKSkge1xuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBpZiAoY2hhciAhPSAnLycgJiYgY2hhciAhPSAnXFxcXCcpIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNoYXIgPT0gJz8nKSB7XG4gICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaGFyID09ICcjJykge1xuICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhciAhPSBFT0YpIHtcbiAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgaWYgKGNoYXIgIT0gJy8nKSBjb250aW51ZTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBQQVRIOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hhciA9PSBFT0YgfHwgY2hhciA9PSAnLycgfHxcbiAgICAgICAgICAoY2hhciA9PSAnXFxcXCcgJiYgaXNTcGVjaWFsKHVybCkpIHx8XG4gICAgICAgICAgKCFzdGF0ZU92ZXJyaWRlICYmIChjaGFyID09ICc/JyB8fCBjaGFyID09ICcjJykpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChpc0RvdWJsZURvdChidWZmZXIpKSB7XG4gICAgICAgICAgICBzaG9ydGVuVVJMc1BhdGgodXJsKTtcbiAgICAgICAgICAgIGlmIChjaGFyICE9ICcvJyAmJiAhKGNoYXIgPT0gJ1xcXFwnICYmIGlzU3BlY2lhbCh1cmwpKSkge1xuICAgICAgICAgICAgICB1cmwucGF0aC5wdXNoKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU2luZ2xlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgIGlmIChjaGFyICE9ICcvJyAmJiAhKGNoYXIgPT0gJ1xcXFwnICYmIGlzU3BlY2lhbCh1cmwpKSkge1xuICAgICAgICAgICAgICB1cmwucGF0aC5wdXNoKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT0gJ2ZpbGUnICYmICF1cmwucGF0aC5sZW5ndGggJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYnVmZmVyKSkge1xuICAgICAgICAgICAgICBpZiAodXJsLmhvc3QpIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5jaGFyQXQoMCkgKyAnOic7IC8vIG5vcm1hbGl6ZSB3aW5kb3dzIGRyaXZlIGxldHRlclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXJsLnBhdGgucHVzaChidWZmZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PSAnZmlsZScgJiYgKGNoYXIgPT0gRU9GIHx8IGNoYXIgPT0gJz8nIHx8IGNoYXIgPT0gJyMnKSkge1xuICAgICAgICAgICAgd2hpbGUgKHVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdXJsLnBhdGhbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgIHVybC5wYXRoLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGFyID09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyICs9IHBlcmNlbnRFbmNvZGUoY2hhciwgcGF0aFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICBjYXNlIENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEg6XG4gICAgICAgIGlmIChjaGFyID09ICc/Jykge1xuICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSAnIycpIHtcbiAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICB9IGVsc2UgaWYgKGNoYXIgIT0gRU9GKSB7XG4gICAgICAgICAgdXJsLnBhdGhbMF0gKz0gcGVyY2VudEVuY29kZShjaGFyLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBRVUVSWTpcbiAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNoYXIgPT0gJyMnKSB7XG4gICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFyICE9IEVPRikge1xuICAgICAgICAgIGlmIChjaGFyID09IFwiJ1wiICYmIGlzU3BlY2lhbCh1cmwpKSB1cmwucXVlcnkgKz0gJyUyNyc7XG4gICAgICAgICAgZWxzZSBpZiAoY2hhciA9PSAnIycpIHVybC5xdWVyeSArPSAnJTIzJztcbiAgICAgICAgICBlbHNlIHVybC5xdWVyeSArPSBwZXJjZW50RW5jb2RlKGNoYXIsIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICBjYXNlIEZSQUdNRU5UOlxuICAgICAgICBpZiAoY2hhciAhPSBFT0YpIHVybC5mcmFnbWVudCArPSBwZXJjZW50RW5jb2RlKGNoYXIsIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHBvaW50ZXIrKztcbiAgfVxufTtcblxuLy8gYFVSTGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLWNsYXNzXG52YXIgVVJMQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBVUkwodXJsIC8qICwgYmFzZSAqLykge1xuICB2YXIgdGhhdCA9IGFuSW5zdGFuY2UodGhpcywgVVJMQ29uc3RydWN0b3IsICdVUkwnKTtcbiAgdmFyIGJhc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHVybFN0cmluZyA9IFN0cmluZyh1cmwpO1xuICB2YXIgc3RhdGUgPSBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHsgdHlwZTogJ1VSTCcgfSk7XG4gIHZhciBiYXNlU3RhdGUsIGZhaWx1cmU7XG4gIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYmFzZSBpbnN0YW5jZW9mIFVSTENvbnN0cnVjdG9yKSBiYXNlU3RhdGUgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKGJhc2UpO1xuICAgIGVsc2Uge1xuICAgICAgZmFpbHVyZSA9IHBhcnNlVVJMKGJhc2VTdGF0ZSA9IHt9LCBTdHJpbmcoYmFzZSkpO1xuICAgICAgaWYgKGZhaWx1cmUpIHRocm93IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICB9XG4gIH1cbiAgZmFpbHVyZSA9IHBhcnNlVVJMKHN0YXRlLCB1cmxTdHJpbmcsIG51bGwsIGJhc2VTdGF0ZSk7XG4gIGlmIChmYWlsdXJlKSB0aHJvdyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gIHZhciBzZWFyY2hQYXJhbXMgPSBzdGF0ZS5zZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHZhciBzZWFyY2hQYXJhbXNTdGF0ZSA9IGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUoc2VhcmNoUGFyYW1zKTtcbiAgc2VhcmNoUGFyYW1zU3RhdGUudXBkYXRlU2VhcmNoUGFyYW1zKHN0YXRlLnF1ZXJ5KTtcbiAgc2VhcmNoUGFyYW1zU3RhdGUudXBkYXRlVVJMID0gZnVuY3Rpb24gKCkge1xuICAgIHN0YXRlLnF1ZXJ5ID0gU3RyaW5nKHNlYXJjaFBhcmFtcykgfHwgbnVsbDtcbiAgfTtcbiAgaWYgKCFERVNDUklQVE9SUykge1xuICAgIHRoYXQuaHJlZiA9IHNlcmlhbGl6ZVVSTC5jYWxsKHRoYXQpO1xuICAgIHRoYXQub3JpZ2luID0gZ2V0T3JpZ2luLmNhbGwodGhhdCk7XG4gICAgdGhhdC5wcm90b2NvbCA9IGdldFByb3RvY29sLmNhbGwodGhhdCk7XG4gICAgdGhhdC51c2VybmFtZSA9IGdldFVzZXJuYW1lLmNhbGwodGhhdCk7XG4gICAgdGhhdC5wYXNzd29yZCA9IGdldFBhc3N3b3JkLmNhbGwodGhhdCk7XG4gICAgdGhhdC5ob3N0ID0gZ2V0SG9zdC5jYWxsKHRoYXQpO1xuICAgIHRoYXQuaG9zdG5hbWUgPSBnZXRIb3N0bmFtZS5jYWxsKHRoYXQpO1xuICAgIHRoYXQucG9ydCA9IGdldFBvcnQuY2FsbCh0aGF0KTtcbiAgICB0aGF0LnBhdGhuYW1lID0gZ2V0UGF0aG5hbWUuY2FsbCh0aGF0KTtcbiAgICB0aGF0LnNlYXJjaCA9IGdldFNlYXJjaC5jYWxsKHRoYXQpO1xuICAgIHRoYXQuc2VhcmNoUGFyYW1zID0gZ2V0U2VhcmNoUGFyYW1zLmNhbGwodGhhdCk7XG4gICAgdGhhdC5oYXNoID0gZ2V0SGFzaC5jYWxsKHRoYXQpO1xuICB9XG59O1xuXG52YXIgVVJMUHJvdG90eXBlID0gVVJMQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG52YXIgc2VyaWFsaXplVVJMID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgdmFyIHNjaGVtZSA9IHVybC5zY2hlbWU7XG4gIHZhciB1c2VybmFtZSA9IHVybC51c2VybmFtZTtcbiAgdmFyIHBhc3N3b3JkID0gdXJsLnBhc3N3b3JkO1xuICB2YXIgaG9zdCA9IHVybC5ob3N0O1xuICB2YXIgcG9ydCA9IHVybC5wb3J0O1xuICB2YXIgcGF0aCA9IHVybC5wYXRoO1xuICB2YXIgcXVlcnkgPSB1cmwucXVlcnk7XG4gIHZhciBmcmFnbWVudCA9IHVybC5mcmFnbWVudDtcbiAgdmFyIG91dHB1dCA9IHNjaGVtZSArICc6JztcbiAgaWYgKGhvc3QgIT09IG51bGwpIHtcbiAgICBvdXRwdXQgKz0gJy8vJztcbiAgICBpZiAoaW5jbHVkZXNDcmVkZW50aWFscyh1cmwpKSB7XG4gICAgICBvdXRwdXQgKz0gdXNlcm5hbWUgKyAocGFzc3dvcmQgPyAnOicgKyBwYXNzd29yZCA6ICcnKSArICdAJztcbiAgICB9XG4gICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QoaG9zdCk7XG4gICAgaWYgKHBvcnQgIT09IG51bGwpIG91dHB1dCArPSAnOicgKyBwb3J0O1xuICB9IGVsc2UgaWYgKHNjaGVtZSA9PSAnZmlsZScpIG91dHB1dCArPSAnLy8nO1xuICBvdXRwdXQgKz0gdXJsLmNhbm5vdEJlQUJhc2VVUkwgPyBwYXRoWzBdIDogcGF0aC5sZW5ndGggPyAnLycgKyBwYXRoLmpvaW4oJy8nKSA6ICcnO1xuICBpZiAocXVlcnkgIT09IG51bGwpIG91dHB1dCArPSAnPycgKyBxdWVyeTtcbiAgaWYgKGZyYWdtZW50ICE9PSBudWxsKSBvdXRwdXQgKz0gJyMnICsgZnJhZ21lbnQ7XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG52YXIgZ2V0T3JpZ2luID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgdmFyIHNjaGVtZSA9IHVybC5zY2hlbWU7XG4gIHZhciBwb3J0ID0gdXJsLnBvcnQ7XG4gIGlmIChzY2hlbWUgPT0gJ2Jsb2InKSB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMKHNjaGVtZS5wYXRoWzBdKS5vcmlnaW47XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuICBpZiAoc2NoZW1lID09ICdmaWxlJyB8fCAhaXNTcGVjaWFsKHVybCkpIHJldHVybiAnbnVsbCc7XG4gIHJldHVybiBzY2hlbWUgKyAnOi8vJyArIHNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpICsgKHBvcnQgIT09IG51bGwgPyAnOicgKyBwb3J0IDogJycpO1xufTtcblxudmFyIGdldFByb3RvY29sID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5zY2hlbWUgKyAnOic7XG59O1xuXG52YXIgZ2V0VXNlcm5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnVzZXJuYW1lO1xufTtcblxudmFyIGdldFBhc3N3b3JkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5wYXNzd29yZDtcbn07XG5cbnZhciBnZXRIb3N0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgdmFyIGhvc3QgPSB1cmwuaG9zdDtcbiAgdmFyIHBvcnQgPSB1cmwucG9ydDtcbiAgcmV0dXJuIGhvc3QgPT09IG51bGwgPyAnJ1xuICAgIDogcG9ydCA9PT0gbnVsbCA/IHNlcmlhbGl6ZUhvc3QoaG9zdClcbiAgICA6IHNlcmlhbGl6ZUhvc3QoaG9zdCkgKyAnOicgKyBwb3J0O1xufTtcblxudmFyIGdldEhvc3RuYW1lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaG9zdCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcykuaG9zdDtcbiAgcmV0dXJuIGhvc3QgPT09IG51bGwgPyAnJyA6IHNlcmlhbGl6ZUhvc3QoaG9zdCk7XG59O1xuXG52YXIgZ2V0UG9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBvcnQgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnBvcnQ7XG4gIHJldHVybiBwb3J0ID09PSBudWxsID8gJycgOiBTdHJpbmcocG9ydCk7XG59O1xuXG52YXIgZ2V0UGF0aG5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICB2YXIgcGF0aCA9IHVybC5wYXRoO1xuICByZXR1cm4gdXJsLmNhbm5vdEJlQUJhc2VVUkwgPyBwYXRoWzBdIDogcGF0aC5sZW5ndGggPyAnLycgKyBwYXRoLmpvaW4oJy8nKSA6ICcnO1xufTtcblxudmFyIGdldFNlYXJjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHF1ZXJ5ID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5xdWVyeTtcbiAgcmV0dXJuIHF1ZXJ5ID8gJz8nICsgcXVlcnkgOiAnJztcbn07XG5cbnZhciBnZXRTZWFyY2hQYXJhbXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNlYXJjaFBhcmFtcztcbn07XG5cbnZhciBnZXRIYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZnJhZ21lbnQgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLmZyYWdtZW50O1xuICByZXR1cm4gZnJhZ21lbnQgPyAnIycgKyBmcmFnbWVudCA6ICcnO1xufTtcblxudmFyIGFjY2Vzc29yRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChnZXR0ZXIsIHNldHRlcikge1xuICByZXR1cm4geyBnZXQ6IGdldHRlciwgc2V0OiBzZXR0ZXIsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9O1xufTtcblxuaWYgKERFU0NSSVBUT1JTKSB7XG4gIGRlZmluZVByb3BlcnRpZXMoVVJMUHJvdG90eXBlLCB7XG4gICAgLy8gYFVSTC5wcm90b3R5cGUuaHJlZmAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaHJlZlxuICAgIGhyZWY6IGFjY2Vzc29yRGVzY3JpcHRvcihzZXJpYWxpemVVUkwsIGZ1bmN0aW9uIChocmVmKSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciB1cmxTdHJpbmcgPSBTdHJpbmcoaHJlZik7XG4gICAgICB2YXIgZmFpbHVyZSA9IHBhcnNlVVJMKHVybCwgdXJsU3RyaW5nKTtcbiAgICAgIGlmIChmYWlsdXJlKSB0aHJvdyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gICAgICBnZXRJbnRlcm5hbFNlYXJjaFBhcmFtc1N0YXRlKHVybC5zZWFyY2hQYXJhbXMpLnVwZGF0ZVNlYXJjaFBhcmFtcyh1cmwucXVlcnkpO1xuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLm9yaWdpbmAgZ2V0dGVyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLW9yaWdpblxuICAgIG9yaWdpbjogYWNjZXNzb3JEZXNjcmlwdG9yKGdldE9yaWdpbiksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUucHJvdG9jb2xgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXByb3RvY29sXG4gICAgcHJvdG9jb2w6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRQcm90b2NvbCwgZnVuY3Rpb24gKHByb3RvY29sKSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIHBhcnNlVVJMKHVybCwgU3RyaW5nKHByb3RvY29sKSArICc6JywgU0NIRU1FX1NUQVJUKTtcbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS51c2VybmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdXNlcm5hbWVcbiAgICB1c2VybmFtZTogYWNjZXNzb3JEZXNjcmlwdG9yKGdldFVzZXJuYW1lLCBmdW5jdGlvbiAodXNlcm5hbWUpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGNvZGVQb2ludHMgPSBhcnJheUZyb20oU3RyaW5nKHVzZXJuYW1lKSk7XG4gICAgICBpZiAoY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkpIHJldHVybjtcbiAgICAgIHVybC51c2VybmFtZSA9ICcnO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHVybC51c2VybmFtZSArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaV0sIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUucGFzc3dvcmRgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhc3N3b3JkXG4gICAgcGFzc3dvcmQ6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRQYXNzd29yZCwgZnVuY3Rpb24gKHBhc3N3b3JkKSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKFN0cmluZyhwYXNzd29yZCkpO1xuICAgICAgaWYgKGNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCh1cmwpKSByZXR1cm47XG4gICAgICB1cmwucGFzc3dvcmQgPSAnJztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1cmwucGFzc3dvcmQgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2ldLCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLmhvc3RgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RcbiAgICBob3N0OiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0SG9zdCwgZnVuY3Rpb24gKGhvc3QpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgICBwYXJzZVVSTCh1cmwsIFN0cmluZyhob3N0KSwgSE9TVCk7XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUuaG9zdG5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RuYW1lXG4gICAgaG9zdG5hbWU6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRIb3N0bmFtZSwgZnVuY3Rpb24gKGhvc3RuYW1lKSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIGlmICh1cmwuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgICAgcGFyc2VVUkwodXJsLCBTdHJpbmcoaG9zdG5hbWUpLCBIT1NUTkFNRSk7XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUucG9ydGAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcG9ydFxuICAgIHBvcnQ6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRQb3J0LCBmdW5jdGlvbiAocG9ydCkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICBpZiAoY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkpIHJldHVybjtcbiAgICAgIHBvcnQgPSBTdHJpbmcocG9ydCk7XG4gICAgICBpZiAocG9ydCA9PSAnJykgdXJsLnBvcnQgPSBudWxsO1xuICAgICAgZWxzZSBwYXJzZVVSTCh1cmwsIHBvcnQsIFBPUlQpO1xuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLnBhdGhuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXRobmFtZVxuICAgIHBhdGhuYW1lOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0UGF0aG5hbWUsIGZ1bmN0aW9uIChwYXRobmFtZSkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICBpZiAodXJsLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICAgIHVybC5wYXRoID0gW107XG4gICAgICBwYXJzZVVSTCh1cmwsIHBhdGhuYW1lICsgJycsIFBBVEhfU1RBUlQpO1xuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLnNlYXJjaGAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNoXG4gICAgc2VhcmNoOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0U2VhcmNoLCBmdW5jdGlvbiAoc2VhcmNoKSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIHNlYXJjaCA9IFN0cmluZyhzZWFyY2gpO1xuICAgICAgaWYgKHNlYXJjaCA9PSAnJykge1xuICAgICAgICB1cmwucXVlcnkgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCc/JyA9PSBzZWFyY2guY2hhckF0KDApKSBzZWFyY2ggPSBzZWFyY2guc2xpY2UoMSk7XG4gICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICBwYXJzZVVSTCh1cmwsIHNlYXJjaCwgUVVFUlkpO1xuICAgICAgfVxuICAgICAgZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZSh1cmwuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXModXJsLnF1ZXJ5KTtcbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5zZWFyY2hQYXJhbXNgIGdldHRlclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hwYXJhbXNcbiAgICBzZWFyY2hQYXJhbXM6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRTZWFyY2hQYXJhbXMpLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLmhhc2hgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhhc2hcbiAgICBoYXNoOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0SGFzaCwgZnVuY3Rpb24gKGhhc2gpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgaGFzaCA9IFN0cmluZyhoYXNoKTtcbiAgICAgIGlmIChoYXNoID09ICcnKSB7XG4gICAgICAgIHVybC5mcmFnbWVudCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICgnIycgPT0gaGFzaC5jaGFyQXQoMCkpIGhhc2ggPSBoYXNoLnNsaWNlKDEpO1xuICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICBwYXJzZVVSTCh1cmwsIGhhc2gsIEZSQUdNRU5UKTtcbiAgICB9KVxuICB9KTtcbn1cblxuLy8gYFVSTC5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC10b2pzb25cbnJlZGVmaW5lKFVSTFByb3RvdHlwZSwgJ3RvSlNPTicsIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgcmV0dXJuIHNlcmlhbGl6ZVVSTC5jYWxsKHRoaXMpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI1VSTC1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbnJlZGVmaW5lKFVSTFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBzZXJpYWxpemVVUkwuY2FsbCh0aGlzKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuaWYgKE5hdGl2ZVVSTCkge1xuICB2YXIgbmF0aXZlQ3JlYXRlT2JqZWN0VVJMID0gTmF0aXZlVVJMLmNyZWF0ZU9iamVjdFVSTDtcbiAgdmFyIG5hdGl2ZVJldm9rZU9iamVjdFVSTCA9IE5hdGl2ZVVSTC5yZXZva2VPYmplY3RVUkw7XG4gIC8vIGBVUkwuY3JlYXRlT2JqZWN0VVJMYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9jcmVhdGVPYmplY3RVUkxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGlmIChuYXRpdmVDcmVhdGVPYmplY3RVUkwpIHJlZGVmaW5lKFVSTENvbnN0cnVjdG9yLCAnY3JlYXRlT2JqZWN0VVJMJywgZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGJsb2IpIHtcbiAgICByZXR1cm4gbmF0aXZlQ3JlYXRlT2JqZWN0VVJMLmFwcGx5KE5hdGl2ZVVSTCwgYXJndW1lbnRzKTtcbiAgfSk7XG4gIC8vIGBVUkwucmV2b2tlT2JqZWN0VVJMYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9yZXZva2VPYmplY3RVUkxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGlmIChuYXRpdmVSZXZva2VPYmplY3RVUkwpIHJlZGVmaW5lKFVSTENvbnN0cnVjdG9yLCAncmV2b2tlT2JqZWN0VVJMJywgZnVuY3Rpb24gcmV2b2tlT2JqZWN0VVJMKHVybCkge1xuICAgIHJldHVybiBuYXRpdmVSZXZva2VPYmplY3RVUkwuYXBwbHkoTmF0aXZlVVJMLCBhcmd1bWVudHMpO1xuICB9KTtcbn1cblxuc2V0VG9TdHJpbmdUYWcoVVJMQ29uc3RydWN0b3IsICdVUkwnKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIFVSTDogVVJMQ29uc3RydWN0b3Jcbn0pO1xuIiwiLy8gZW1wdHlcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvaXMtYXJyYXknKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZXZlcnknKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmlsdGVyJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZsYXQtbWFwJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyBmb3JFYWNoIDogb3duO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5kZXgtb2YnKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbWFwJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NsaWNlJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvbWUnKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc29ydCcpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qva2V5cycpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC9hc3luYy1pdGVyYXRvcicpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi93ZWIvdXJsJyk7XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC50by1qc29uJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguVVJMO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9pbXBsZW1lbnRhdGlvbicpWydkZWZhdWx0J107XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliJylbJ2RlZmF1bHQnXTtcbm1vZHVsZS5leHBvcnRzLmdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xubW9kdWxlLmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cy5zaGltID0gcmVxdWlyZSgnLi9zaGltJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGNyZWF0ZU5vZGVJdGVyYXRvcjtcblxuXG5mdW5jdGlvbiBjcmVhdGVOb2RlSXRlcmF0b3Iocm9vdCkge1xuICB2YXIgd2hhdFRvU2hvdyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDB4RkZGRkZGRkYgOiBhcmd1bWVudHNbMV07XG4gIHZhciBmaWx0ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBudWxsIDogYXJndW1lbnRzWzJdO1xuXG4gIHZhciBkb2MgPSByb290Lm5vZGVUeXBlID09IDkgfHwgcm9vdC5vd25lckRvY3VtZW50O1xuICB2YXIgaXRlciA9IGRvYy5jcmVhdGVOb2RlSXRlcmF0b3Iocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyLCBmYWxzZSk7XG4gIHJldHVybiBuZXcgTm9kZUl0ZXJhdG9yKGl0ZXIsIHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcik7XG59XG5cbnZhciBOb2RlSXRlcmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vZGVJdGVyYXRvcihpdGVyLCByb290LCB3aGF0VG9TaG93LCBmaWx0ZXIpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm9kZUl0ZXJhdG9yKTtcblxuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy53aGF0VG9TaG93ID0gd2hhdFRvU2hvdztcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjtcbiAgICB0aGlzLnJlZmVyZW5jZU5vZGUgPSByb290O1xuICAgIHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUgPSB0cnVlO1xuICAgIHRoaXMuX2l0ZXIgPSBpdGVyO1xuICB9XG5cbiAgTm9kZUl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0Tm9kZSA9IGZ1bmN0aW9uIG5leHROb2RlKCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLl9pdGVyLm5leHROb2RlKCk7XG4gICAgdGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSA9IGZhbHNlO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IHJlc3VsdDtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VOb2RlO1xuICB9O1xuXG4gIE5vZGVJdGVyYXRvci5wcm90b3R5cGUucHJldmlvdXNOb2RlID0gZnVuY3Rpb24gcHJldmlvdXNOb2RlKCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLl9pdGVyLnByZXZpb3VzTm9kZSgpO1xuICAgIHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUgPSB0cnVlO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IHJlc3VsdDtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VOb2RlO1xuICB9O1xuXG4gIE5vZGVJdGVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgTm9kZUl0ZXJhdG9yXSc7XG4gIH07XG5cbiAgcmV0dXJuIE5vZGVJdGVyYXRvcjtcbn0oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OWhaR0Z3ZEdWeUxtcHpJbDBzSW01aGJXVnpJanBiSW1OeVpXRjBaVTV2WkdWSmRHVnlZWFJ2Y2lJc0luSnZiM1FpTENKM2FHRjBWRzlUYUc5M0lpd2labWxzZEdWeUlpd2laRzlqSWl3aWJtOWtaVlI1Y0dVaUxDSnZkMjVsY2tSdlkzVnRaVzUwSWl3aWFYUmxjaUlzSWs1dlpHVkpkR1Z5WVhSdmNpSXNJbkpsWm1WeVpXNWpaVTV2WkdVaUxDSndiMmx1ZEdWeVFtVm1iM0psVW1WbVpYSmxibU5sVG05a1pTSXNJbDlwZEdWeUlpd2libVY0ZEU1dlpHVWlMQ0p5WlhOMWJIUWlMQ0p3Y21WMmFXOTFjMDV2WkdVaUxDSjBiMU4wY21sdVp5SmRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPM0ZDUVVGbFFTeHJRanM3TzBGQlIyWXNVMEZCVTBFc2EwSkJRVlFzUTBGQk5FSkRMRWxCUVRWQ0xFVkJRVEJGTzBGQlFVRXNUVUZCZUVORExGVkJRWGRETEhsRVFVRXpRaXhWUVVFeVFqdEJRVUZCTEUxQlFXWkRMRTFCUVdVc2VVUkJRVTRzU1VGQlRUczdRVUZEZUVVc1RVRkJUVU1zVFVGQlQwZ3NTMEZCUzBrc1VVRkJUQ3hKUVVGcFFpeERRVUZzUWl4SlFVRjNRa29zUzBGQlMwc3NZVUZCZWtNN1FVRkRRU3hOUVVGTlF5eFBRVUZQU0N4SlFVRkpTaXhyUWtGQlNpeERRVUYxUWtNc1NVRkJka0lzUlVGQk5rSkRMRlZCUVRkQ0xFVkJRWGxEUXl4TlFVRjZReXhGUVVGcFJDeExRVUZxUkN4RFFVRmlPMEZCUTBFc1UwRkJUeXhKUVVGSlN5eFpRVUZLTEVOQlFXbENSQ3hKUVVGcVFpeEZRVUYxUWs0c1NVRkJka0lzUlVGQk5rSkRMRlZCUVRkQ0xFVkJRWGxEUXl4TlFVRjZReXhEUVVGUU8wRkJRMFE3TzBsQlIwdExMRms3UVVGRFNpeDNRa0ZCV1VRc1NVRkJXaXhGUVVGclFrNHNTVUZCYkVJc1JVRkJkMEpETEZWQlFYaENMRVZCUVc5RFF5eE5RVUZ3UXl4RlFVRTBRenRCUVVGQk96dEJRVU14UXl4VFFVRkxSaXhKUVVGTUxFZEJRVmxCTEVsQlFWbzdRVUZEUVN4VFFVRkxReXhWUVVGTUxFZEJRV3RDUVN4VlFVRnNRanRCUVVOQkxGTkJRVXRETEUxQlFVd3NSMEZCWTBFc1RVRkJaRHRCUVVOQkxGTkJRVXROTEdGQlFVd3NSMEZCY1VKU0xFbEJRWEpDTzBGQlEwRXNVMEZCUzFNc01FSkJRVXdzUjBGQmEwTXNTVUZCYkVNN1FVRkRRU3hUUVVGTFF5eExRVUZNTEVkQlFXRktMRWxCUVdJN1FVRkRSRHM3ZVVKQlJVUkxMRkVzZFVKQlFWYzdRVUZEVkN4UlFVRk5ReXhUUVVGVExFdEJRVXRHTEV0QlFVd3NRMEZCVjBNc1VVRkJXQ3hGUVVGbU8wRkJRMEVzVTBGQlMwWXNNRUpCUVV3c1IwRkJhME1zUzBGQmJFTTdRVUZEUVN4UlFVRkpSeXhYUVVGWExFbEJRV1lzUlVGQmNVSXNUMEZCVHl4SlFVRlFPMEZCUTNKQ0xGTkJRVXRLTEdGQlFVd3NSMEZCY1VKSkxFMUJRWEpDTzBGQlEwRXNWMEZCVHl4TFFVRkxTaXhoUVVGYU8wRkJRMFFzUnpzN2VVSkJSVVJMTEZrc01rSkJRV1U3UVVGRFlpeFJRVUZOUkN4VFFVRlRMRXRCUVV0R0xFdEJRVXdzUTBGQlYwY3NXVUZCV0N4RlFVRm1PMEZCUTBFc1UwRkJTMG9zTUVKQlFVd3NSMEZCYTBNc1NVRkJiRU03UVVGRFFTeFJRVUZKUnl4WFFVRlhMRWxCUVdZc1JVRkJjVUlzVDBGQlR5eEpRVUZRTzBGQlEzSkNMRk5CUVV0S0xHRkJRVXdzUjBGQmNVSkpMRTFCUVhKQ08wRkJRMEVzVjBGQlR5eExRVUZMU2l4aFFVRmFPMEZCUTBRc1J6czdlVUpCUlVSTkxGRXNkVUpCUVZjN1FVRkRWQ3hYUVVGUExIVkNRVUZRTzBGQlEwUXNSeUlzSW1acGJHVWlPaUpoWkdGd2RHVnlMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdSbFptRjFiSFFnWTNKbFlYUmxUbTlrWlVsMFpYSmhkRzl5WEc1Y2JseHVablZ1WTNScGIyNGdZM0psWVhSbFRtOWtaVWwwWlhKaGRHOXlLSEp2YjNRc0lIZG9ZWFJVYjFOb2IzY2dQU0F3ZUVaR1JrWkdSa1pHTENCbWFXeDBaWElnUFNCdWRXeHNLU0I3WEc0Z0lHTnZibk4wSUdSdll5QTlJQ2h5YjI5MExtNXZaR1ZVZVhCbElEMDlJRGtwSUh4OElISnZiM1F1YjNkdVpYSkViMk4xYldWdWRGeHVJQ0JqYjI1emRDQnBkR1Z5SUQwZ1pHOWpMbU55WldGMFpVNXZaR1ZKZEdWeVlYUnZjaWh5YjI5MExDQjNhR0YwVkc5VGFHOTNMQ0JtYVd4MFpYSXNJR1poYkhObEtWeHVJQ0J5WlhSMWNtNGdibVYzSUU1dlpHVkpkR1Z5WVhSdmNpaHBkR1Z5TENCeWIyOTBMQ0IzYUdGMFZHOVRhRzkzTENCbWFXeDBaWElwWEc1OVhHNWNibHh1WTJ4aGMzTWdUbTlrWlVsMFpYSmhkRzl5SUh0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYVhSbGNpd2djbTl2ZEN3Z2QyaGhkRlJ2VTJodmR5d2dabWxzZEdWeUtTQjdYRzRnSUNBZ2RHaHBjeTV5YjI5MElEMGdjbTl2ZEZ4dUlDQWdJSFJvYVhNdWQyaGhkRlJ2VTJodmR5QTlJSGRvWVhSVWIxTm9iM2RjYmlBZ0lDQjBhR2x6TG1acGJIUmxjaUE5SUdacGJIUmxjbHh1SUNBZ0lIUm9hWE11Y21WbVpYSmxibU5sVG05a1pTQTlJSEp2YjNSY2JpQWdJQ0IwYUdsekxuQnZhVzUwWlhKQ1pXWnZjbVZTWldabGNtVnVZMlZPYjJSbElEMGdkSEoxWlZ4dUlDQWdJSFJvYVhNdVgybDBaWElnUFNCcGRHVnlYRzRnSUgxY2JseHVJQ0J1WlhoMFRtOWtaU2dwSUh0Y2JpQWdJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQjBhR2x6TGw5cGRHVnlMbTVsZUhST2IyUmxLQ2xjYmlBZ0lDQjBhR2x6TG5CdmFXNTBaWEpDWldadmNtVlNaV1psY21WdVkyVk9iMlJsSUQwZ1ptRnNjMlZjYmlBZ0lDQnBaaUFvY21WemRXeDBJRDA5UFNCdWRXeHNLU0J5WlhSMWNtNGdiblZzYkZ4dUlDQWdJSFJvYVhNdWNtVm1aWEpsYm1ObFRtOWtaU0E5SUhKbGMzVnNkRnh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkpsWm1WeVpXNWpaVTV2WkdWY2JpQWdmVnh1WEc0Z0lIQnlaWFpwYjNWelRtOWtaU2dwSUh0Y2JpQWdJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQjBhR2x6TGw5cGRHVnlMbkJ5WlhacGIzVnpUbTlrWlNncFhHNGdJQ0FnZEdocGN5NXdiMmx1ZEdWeVFtVm1iM0psVW1WbVpYSmxibU5sVG05a1pTQTlJSFJ5ZFdWY2JpQWdJQ0JwWmlBb2NtVnpkV3gwSUQwOVBTQnVkV3hzS1NCeVpYUjFjbTRnYm5Wc2JGeHVJQ0FnSUhSb2FYTXVjbVZtWlhKbGJtTmxUbTlrWlNBOUlISmxjM1ZzZEZ4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5KbFptVnlaVzVqWlU1dlpHVmNiaUFnZlZ4dVhHNGdJSFJ2VTNSeWFXNW5LQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQW5XMjlpYW1WamRDQk9iMlJsU1hSbGNtRjBiM0pkSjF4dUlDQjlYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gY3JlYXRlTm9kZUl0ZXJhdG9yO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVJdGVyYXRvcihyb290KSB7XG4gIHZhciB3aGF0VG9TaG93ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gMHhGRkZGRkZGRiA6IGFyZ3VtZW50c1sxXTtcbiAgdmFyIGZpbHRlciA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IG51bGwgOiBhcmd1bWVudHNbMl07XG5cbiAgdmFyIGRvYyA9IHJvb3Qub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIGRvYy5jcmVhdGVOb2RlSXRlcmF0b3IuY2FsbChkb2MsIHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlpZFdsc2RHbHVMbXB6SWwwc0ltNWhiV1Z6SWpwYkltTnlaV0YwWlU1dlpHVkpkR1Z5WVhSdmNpSXNJbkp2YjNRaUxDSjNhR0YwVkc5VGFHOTNJaXdpWm1sc2RHVnlJaXdpWkc5aklpd2liM2R1WlhKRWIyTjFiV1Z1ZENJc0ltTmhiR3dpWFN3aWJXRndjR2x1WjNNaU9pSTdPenR4UWtGQlpVRXNhMEk3T3p0QlFVZG1MRk5CUVZOQkxHdENRVUZVTEVOQlFUUkNReXhKUVVFMVFpeEZRVUV3UlR0QlFVRkJMRTFCUVhoRFF5eFZRVUYzUXl4NVJFRkJNMElzVlVGQk1rSTdRVUZCUVN4TlFVRm1ReXhOUVVGbExIbEVRVUZPTEVsQlFVMDdPMEZCUTNoRkxFMUJRVTFETEUxQlFVMUlMRXRCUVV0SkxHRkJRV3BDTzBGQlEwRXNVMEZCVDBRc1NVRkJTVW9zYTBKQlFVb3NRMEZCZFVKTkxFbEJRWFpDTEVOQlFUUkNSaXhIUVVFMVFpeEZRVUZwUTBnc1NVRkJha01zUlVGQmRVTkRMRlZCUVhaRExFVkJRVzFFUXl4TlFVRnVSQ3hEUVVGUU8wRkJRMFFpTENKbWFXeGxJam9pWW5WcGJIUnBiaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltVjRjRzl5ZENCa1pXWmhkV3gwSUdOeVpXRjBaVTV2WkdWSmRHVnlZWFJ2Y2x4dVhHNWNibVoxYm1OMGFXOXVJR055WldGMFpVNXZaR1ZKZEdWeVlYUnZjaWh5YjI5MExDQjNhR0YwVkc5VGFHOTNJRDBnTUhoR1JrWkdSa1pHUml3Z1ptbHNkR1Z5SUQwZ2JuVnNiQ2tnZTF4dUlDQmpiMjV6ZENCa2IyTWdQU0J5YjI5MExtOTNibVZ5Ukc5amRXMWxiblJjYmlBZ2NtVjBkWEp1SUdSdll5NWpjbVZoZEdWT2IyUmxTWFJsY21GMGIzSXVZMkZzYkNoa2IyTXNJSEp2YjNRc0lIZG9ZWFJVYjFOb2IzY3NJR1pwYkhSbGNpbGNibjFjYmlKZGZRPT0iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGNyZWF0ZU5vZGVJdGVyYXRvcjtcblxuXG5mdW5jdGlvbiBjcmVhdGVOb2RlSXRlcmF0b3Iocm9vdCkge1xuICB2YXIgd2hhdFRvU2hvdyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDB4RkZGRkZGRkYgOiBhcmd1bWVudHNbMV07XG4gIHZhciBmaWx0ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBudWxsIDogYXJndW1lbnRzWzJdO1xuXG4gIHJldHVybiBuZXcgTm9kZUl0ZXJhdG9yKHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcik7XG59XG5cbnZhciBOb2RlSXRlcmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vZGVJdGVyYXRvcihyb290LCB3aGF0VG9TaG93LCBmaWx0ZXIpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm9kZUl0ZXJhdG9yKTtcblxuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy53aGF0VG9TaG93ID0gd2hhdFRvU2hvdztcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjtcbiAgICB0aGlzLnJlZmVyZW5jZU5vZGUgPSByb290O1xuICAgIHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUgPSB0cnVlO1xuICAgIHRoaXMuX2ZpbHRlciA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyID8gZmlsdGVyKG5vZGUpID09PSAxIDogdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuX3Nob3cgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIHdoYXRUb1Nob3cgPj4gbm9kZS5ub2RlVHlwZSAtIDEgJiAxID09PSAxO1xuICAgIH07XG4gIH1cblxuICBOb2RlSXRlcmF0b3IucHJvdG90eXBlLm5leHROb2RlID0gZnVuY3Rpb24gbmV4dE5vZGUoKSB7XG4gICAgdmFyIGJlZm9yZSA9IHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGU7XG4gICAgdGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSA9IGZhbHNlO1xuXG4gICAgdmFyIG5vZGUgPSB0aGlzLnJlZmVyZW5jZU5vZGU7XG4gICAgaWYgKGJlZm9yZSAmJiB0aGlzLl9zaG93KG5vZGUpICYmIHRoaXMuX2ZpbHRlcihub2RlKSkgcmV0dXJuIG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBpZiAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLnJvb3QpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAobm9kZS5uZXh0U2libGluZykgYnJlYWs7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICB9IHdoaWxlIChub2RlKTtcblxuICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfSB3aGlsZSAoIXRoaXMuX3Nob3cobm9kZSkgfHwgIXRoaXMuX2ZpbHRlcihub2RlKSk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZU5vZGUgPSBub2RlO1xuICAgIHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUgPSBmYWxzZTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBOb2RlSXRlcmF0b3IucHJvdG90eXBlLnByZXZpb3VzTm9kZSA9IGZ1bmN0aW9uIHByZXZpb3VzTm9kZSgpIHtcbiAgICB2YXIgYmVmb3JlID0gdGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZTtcbiAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gdHJ1ZTtcblxuICAgIHZhciBub2RlID0gdGhpcy5yZWZlcmVuY2VOb2RlO1xuICAgIGlmICghYmVmb3JlICYmIHRoaXMuX3Nob3cobm9kZSkgJiYgdGhpcy5fZmlsdGVyKG5vZGUpKSByZXR1cm4gbm9kZTtcblxuICAgIGRvIHtcbiAgICAgIGlmIChub2RlID09PSB0aGlzLnJvb3QpIHJldHVybiBudWxsO1xuXG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB3aGlsZSAobm9kZS5sYXN0Q2hpbGQpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG4gICAgICAgIH1jb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IHdoaWxlICghdGhpcy5fc2hvdyhub2RlKSB8fCAhdGhpcy5fZmlsdGVyKG5vZGUpKTtcblxuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IG5vZGU7XG4gICAgdGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSA9IHRydWU7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG5cbiAgTm9kZUl0ZXJhdG9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCBOb2RlSXRlcmF0b3JdJztcbiAgfTtcblxuICByZXR1cm4gTm9kZUl0ZXJhdG9yO1xufSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5cGJYQnNaVzFsYm5SaGRHbHZiaTVxY3lKZExDSnVZVzFsY3lJNld5SmpjbVZoZEdWT2IyUmxTWFJsY21GMGIzSWlMQ0p5YjI5MElpd2lkMmhoZEZSdlUyaHZkeUlzSW1acGJIUmxjaUlzSWs1dlpHVkpkR1Z5WVhSdmNpSXNJbkpsWm1WeVpXNWpaVTV2WkdVaUxDSndiMmx1ZEdWeVFtVm1iM0psVW1WbVpYSmxibU5sVG05a1pTSXNJbDltYVd4MFpYSWlMQ0p1YjJSbElpd2lYM05vYjNjaUxDSnViMlJsVkhsd1pTSXNJbTVsZUhST2IyUmxJaXdpWW1WbWIzSmxJaXdpWm1seWMzUkRhR2xzWkNJc0ltNWxlSFJUYVdKc2FXNW5JaXdpY0dGeVpXNTBUbTlrWlNJc0luQnlaWFpwYjNWelRtOWtaU0lzSW5CeVpYWnBiM1Z6VTJsaWJHbHVaeUlzSW14aGMzUkRhR2xzWkNJc0luUnZVM1J5YVc1bklsMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdjVUpCUVdWQkxHdENPenM3UVVGSFppeFRRVUZUUVN4clFrRkJWQ3hEUVVFMFFrTXNTVUZCTlVJc1JVRkJNRVU3UVVGQlFTeE5RVUY0UTBNc1ZVRkJkME1zZVVSQlFUTkNMRlZCUVRKQ08wRkJRVUVzVFVGQlprTXNUVUZCWlN4NVJFRkJUaXhKUVVGTk96dEJRVU40UlN4VFFVRlBMRWxCUVVsRExGbEJRVW9zUTBGQmFVSklMRWxCUVdwQ0xFVkJRWFZDUXl4VlFVRjJRaXhGUVVGdFEwTXNUVUZCYmtNc1EwRkJVRHRCUVVORU96dEpRVWRMUXl4Wk8wRkJRMG9zZDBKQlFWbElMRWxCUVZvc1JVRkJhMEpETEZWQlFXeENMRVZCUVRoQ1F5eE5RVUU1UWl4RlFVRnpRenRCUVVGQk96dEJRVU53UXl4VFFVRkxSaXhKUVVGTUxFZEJRVmxCTEVsQlFWbzdRVUZEUVN4VFFVRkxReXhWUVVGTUxFZEJRV3RDUVN4VlFVRnNRanRCUVVOQkxGTkJRVXRETEUxQlFVd3NSMEZCWTBFc1RVRkJaRHRCUVVOQkxGTkJRVXRGTEdGQlFVd3NSMEZCY1VKS0xFbEJRWEpDTzBGQlEwRXNVMEZCUzBzc01FSkJRVXdzUjBGQmEwTXNTVUZCYkVNN1FVRkRRU3hUUVVGTFF5eFBRVUZNTEVkQlFXVXNWVUZCUTBNc1NVRkJSRHRCUVVGQkxHRkJRVlZNTEZOQlFWTkJMRTlCUVU5TExFbEJRVkFzVFVGQmFVSXNRMEZCTVVJc1IwRkJPRUlzU1VGQmVFTTdRVUZCUVN4TFFVRm1PMEZCUTBFc1UwRkJTME1zUzBGQlRDeEhRVUZoTEZWQlFVTkVMRWxCUVVRN1FVRkJRU3hoUVVGVlRpeGpRVUZqVFN4TFFVRkxSU3hSUVVGTUxFZEJRV2RDTEVOQlFUbENMRWRCUVd0RExFMUJRVTBzUTBGQmJFUTdRVUZCUVN4TFFVRmlPMEZCUTBRN08zbENRVVZFUXl4UkxIVkNRVUZYTzBGQlExUXNVVUZCVFVNc1UwRkJVeXhMUVVGTFRpd3dRa0ZCY0VJN1FVRkRRU3hUUVVGTFFTd3dRa0ZCVEN4SFFVRnJReXhMUVVGc1F6czdRVUZGUVN4UlFVRkpSU3hQUVVGUExFdEJRVXRJTEdGQlFXaENPMEZCUTBFc1VVRkJTVThzVlVGQlZTeExRVUZMU0N4TFFVRk1MRU5CUVZkRUxFbEJRVmdzUTBGQlZpeEpRVUU0UWl4TFFVRkxSQ3hQUVVGTUxFTkJRV0ZETEVsQlFXSXNRMEZCYkVNc1JVRkJjMFFzVDBGQlQwRXNTVUZCVURzN1FVRkZkRVFzVDBGQlJ6dEJRVU5FTEZWQlFVbEJMRXRCUVV0TExGVkJRVlFzUlVGQmNVSTdRVUZEYmtKTUxHVkJRVTlCTEV0QlFVdExMRlZCUVZvN1FVRkRRVHRCUVVORU96dEJRVVZFTEZOQlFVYzdRVUZEUkN4WlFVRkpUQ3hUUVVGVExFdEJRVXRRTEVsQlFXeENMRVZCUVhkQ0xFOUJRVThzU1VGQlVEdEJRVU40UWl4WlFVRkpUeXhMUVVGTFRTeFhRVUZVTEVWQlFYTkNPMEZCUTNSQ1RpeGxRVUZQUVN4TFFVRkxUeXhWUVVGYU8wRkJRMFFzVDBGS1JDeFJRVWxUVUN4SlFVcFVPenRCUVUxQlFTeGhRVUZQUVN4TFFVRkxUU3hYUVVGYU8wRkJRMFFzUzBGaVJDeFJRV0ZSTEVOQlFVTXNTMEZCUzB3c1MwRkJUQ3hEUVVGWFJDeEpRVUZZTEVOQlFVUXNTVUZCY1VJc1EwRkJReXhMUVVGTFJDeFBRVUZNTEVOQlFXRkRMRWxCUVdJc1EwRmlPVUk3TzBGQlpVRXNVMEZCUzBnc1lVRkJUQ3hIUVVGeFFrY3NTVUZCY2tJN1FVRkRRU3hUUVVGTFJpd3dRa0ZCVEN4SFFVRnJReXhMUVVGc1F6dEJRVU5CTEZkQlFVOUZMRWxCUVZBN1FVRkRSQ3hIT3p0NVFrRkZSRkVzV1N3eVFrRkJaVHRCUVVOaUxGRkJRVTFLTEZOQlFWTXNTMEZCUzA0c01FSkJRWEJDTzBGQlEwRXNVMEZCUzBFc01FSkJRVXdzUjBGQmEwTXNTVUZCYkVNN08wRkJSVUVzVVVGQlNVVXNUMEZCVHl4TFFVRkxTQ3hoUVVGb1FqdEJRVU5CTEZGQlFVa3NRMEZCUTA4c1RVRkJSQ3hKUVVGWExFdEJRVXRJTEV0QlFVd3NRMEZCVjBRc1NVRkJXQ3hEUVVGWUxFbEJRU3RDTEV0QlFVdEVMRTlCUVV3c1EwRkJZVU1zU1VGQllpeERRVUZ1UXl4RlFVRjFSQ3hQUVVGUFFTeEpRVUZRT3p0QlFVVjJSQ3hQUVVGSE8wRkJRMFFzVlVGQlNVRXNVMEZCVXl4TFFVRkxVQ3hKUVVGc1FpeEZRVUYzUWl4UFFVRlBMRWxCUVZBN08wRkJSWGhDTEZWQlFVbFBMRXRCUVV0VExHVkJRVlFzUlVGQk1FSTdRVUZEZUVKVUxHVkJRVTlCTEV0QlFVdFRMR1ZCUVZvN1FVRkRRU3hsUVVGUFZDeExRVUZMVlN4VFFVRmFPMEZCUVhWQ1ZpeHBRa0ZCVDBFc1MwRkJTMVVzVTBGQldqdEJRVUYyUWl4VFFVTkJPMEZCUTBRN08wRkJSVVJXTEdGQlFVOUJMRXRCUVV0UExGVkJRVm83UVVGRFJDeExRVlpFTEZGQlZWRXNRMEZCUXl4TFFVRkxUaXhMUVVGTUxFTkJRVmRFTEVsQlFWZ3NRMEZCUkN4SlFVRnhRaXhEUVVGRExFdEJRVXRFTEU5QlFVd3NRMEZCWVVNc1NVRkJZaXhEUVZZNVFqczdRVUZaUVN4VFFVRkxTQ3hoUVVGTUxFZEJRWEZDUnl4SlFVRnlRanRCUVVOQkxGTkJRVXRHTERCQ1FVRk1MRWRCUVd0RExFbEJRV3hETzBGQlEwRXNWMEZCVDBVc1NVRkJVRHRCUVVORUxFYzdPM2xDUVVWRVZ5eFJMSFZDUVVGWE8wRkJRMVFzVjBGQlR5eDFRa0ZCVUR0QlFVTkVMRWNpTENKbWFXeGxJam9pYVcxd2JHVnRaVzUwWVhScGIyNHVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKbGVIQnZjblFnWkdWbVlYVnNkQ0JqY21WaGRHVk9iMlJsU1hSbGNtRjBiM0pjYmx4dVhHNW1kVzVqZEdsdmJpQmpjbVZoZEdWT2IyUmxTWFJsY21GMGIzSW9jbTl2ZEN3Z2QyaGhkRlJ2VTJodmR5QTlJREI0UmtaR1JrWkdSa1lzSUdacGJIUmxjaUE5SUc1MWJHd3BJSHRjYmlBZ2NtVjBkWEp1SUc1bGR5Qk9iMlJsU1hSbGNtRjBiM0lvY205dmRDd2dkMmhoZEZSdlUyaHZkeXdnWm1sc2RHVnlLVnh1ZlZ4dVhHNWNibU5zWVhOeklFNXZaR1ZKZEdWeVlYUnZjaUI3WEc0Z0lHTnZibk4wY25WamRHOXlLSEp2YjNRc0lIZG9ZWFJVYjFOb2IzY3NJR1pwYkhSbGNpa2dlMXh1SUNBZ0lIUm9hWE11Y205dmRDQTlJSEp2YjNSY2JpQWdJQ0IwYUdsekxuZG9ZWFJVYjFOb2IzY2dQU0IzYUdGMFZHOVRhRzkzWEc0Z0lDQWdkR2hwY3k1bWFXeDBaWElnUFNCbWFXeDBaWEpjYmlBZ0lDQjBhR2x6TG5KbFptVnlaVzVqWlU1dlpHVWdQU0J5YjI5MFhHNGdJQ0FnZEdocGN5NXdiMmx1ZEdWeVFtVm1iM0psVW1WbVpYSmxibU5sVG05a1pTQTlJSFJ5ZFdWY2JpQWdJQ0IwYUdsekxsOW1hV3gwWlhJZ1BTQW9ibTlrWlNrZ1BUNGdabWxzZEdWeUlEOGdabWxzZEdWeUtHNXZaR1VwSUQwOVBTQXhJRG9nZEhKMVpWeHVJQ0FnSUhSb2FYTXVYM05vYjNjZ1BTQW9ibTlrWlNrZ1BUNGdkMmhoZEZSdlUyaHZkeUErUGlCdWIyUmxMbTV2WkdWVWVYQmxJQzBnTVNBbUlERWdQVDA5SURGY2JpQWdmVnh1WEc0Z0lHNWxlSFJPYjJSbEtDa2dlMXh1SUNBZ0lHTnZibk4wSUdKbFptOXlaU0E5SUhSb2FYTXVjRzlwYm5SbGNrSmxabTl5WlZKbFptVnlaVzVqWlU1dlpHVmNiaUFnSUNCMGFHbHpMbkJ2YVc1MFpYSkNaV1p2Y21WU1pXWmxjbVZ1WTJWT2IyUmxJRDBnWm1Gc2MyVmNibHh1SUNBZ0lHeGxkQ0J1YjJSbElEMGdkR2hwY3k1eVpXWmxjbVZ1WTJWT2IyUmxYRzRnSUNBZ2FXWWdLR0psWm05eVpTQW1KaUIwYUdsekxsOXphRzkzS0c1dlpHVXBJQ1ltSUhSb2FYTXVYMlpwYkhSbGNpaHViMlJsS1NrZ2NtVjBkWEp1SUc1dlpHVmNibHh1SUNBZ0lHUnZJSHRjYmlBZ0lDQWdJR2xtSUNodWIyUmxMbVpwY25OMFEyaHBiR1FwSUh0Y2JpQWdJQ0FnSUNBZ2JtOWtaU0E5SUc1dlpHVXVabWx5YzNSRGFHbHNaRnh1SUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JrYnlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h1YjJSbElEMDlQU0IwYUdsekxuSnZiM1FwSUhKbGRIVnliaUJ1ZFd4c1hHNGdJQ0FnSUNBZ0lHbG1JQ2h1YjJSbExtNWxlSFJUYVdKc2FXNW5LU0JpY21WaGExeHVJQ0FnSUNBZ0lDQnViMlJsSUQwZ2JtOWtaUzV3WVhKbGJuUk9iMlJsWEc0Z0lDQWdJQ0I5SUhkb2FXeGxJQ2h1YjJSbEtWeHVYRzRnSUNBZ0lDQnViMlJsSUQwZ2JtOWtaUzV1WlhoMFUybGliR2x1WjF4dUlDQWdJSDBnZDJocGJHVW9JWFJvYVhNdVgzTm9iM2NvYm05a1pTa2dmSHdnSVhSb2FYTXVYMlpwYkhSbGNpaHViMlJsS1NsY2JseHVJQ0FnSUhSb2FYTXVjbVZtWlhKbGJtTmxUbTlrWlNBOUlHNXZaR1ZjYmlBZ0lDQjBhR2x6TG5CdmFXNTBaWEpDWldadmNtVlNaV1psY21WdVkyVk9iMlJsSUQwZ1ptRnNjMlZjYmlBZ0lDQnlaWFIxY200Z2JtOWtaVnh1SUNCOVhHNWNiaUFnY0hKbGRtbHZkWE5PYjJSbEtDa2dlMXh1SUNBZ0lHTnZibk4wSUdKbFptOXlaU0E5SUhSb2FYTXVjRzlwYm5SbGNrSmxabTl5WlZKbFptVnlaVzVqWlU1dlpHVmNiaUFnSUNCMGFHbHpMbkJ2YVc1MFpYSkNaV1p2Y21WU1pXWmxjbVZ1WTJWT2IyUmxJRDBnZEhKMVpWeHVYRzRnSUNBZ2JHVjBJRzV2WkdVZ1BTQjBhR2x6TG5KbFptVnlaVzVqWlU1dlpHVmNiaUFnSUNCcFppQW9JV0psWm05eVpTQW1KaUIwYUdsekxsOXphRzkzS0c1dlpHVXBJQ1ltSUhSb2FYTXVYMlpwYkhSbGNpaHViMlJsS1NrZ2NtVjBkWEp1SUc1dlpHVmNibHh1SUNBZ0lHUnZJSHRjYmlBZ0lDQWdJR2xtSUNodWIyUmxJRDA5UFNCMGFHbHpMbkp2YjNRcElISmxkSFZ5YmlCdWRXeHNYRzVjYmlBZ0lDQWdJR2xtSUNodWIyUmxMbkJ5WlhacGIzVnpVMmxpYkdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0J1YjJSbElEMGdibTlrWlM1d2NtVjJhVzkxYzFOcFlteHBibWRjYmlBZ0lDQWdJQ0FnZDJocGJHVWdLRzV2WkdVdWJHRnpkRU5vYVd4a0tTQnViMlJsSUQwZ2JtOWtaUzVzWVhOMFEyaHBiR1JjYmlBZ0lDQWdJQ0FnWTI5dWRHbHVkV1ZjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYm05a1pTQTlJRzV2WkdVdWNHRnlaVzUwVG05a1pWeHVJQ0FnSUgwZ2QyaHBiR1VvSVhSb2FYTXVYM05vYjNjb2JtOWtaU2tnZkh3Z0lYUm9hWE11WDJacGJIUmxjaWh1YjJSbEtTbGNibHh1SUNBZ0lIUm9hWE11Y21WbVpYSmxibU5sVG05a1pTQTlJRzV2WkdWY2JpQWdJQ0IwYUdsekxuQnZhVzUwWlhKQ1pXWnZjbVZTWldabGNtVnVZMlZPYjJSbElEMGdkSEoxWlZ4dUlDQWdJSEpsZEhWeWJpQnViMlJsWEc0Z0lIMWNibHh1SUNCMGIxTjBjbWx1WnlncElIdGNiaUFnSUNCeVpYUjFjbTRnSjF0dlltcGxZM1FnVG05a1pVbDBaWEpoZEc5eVhTZGNiaUFnZlZ4dWZWeHVJbDE5IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3BvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgX3BvbHlmaWxsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BvbHlmaWxsKTtcblxudmFyIF9pbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIF9pbXBsZW1lbnRhdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbXBsZW1lbnRhdGlvbik7XG5cbnZhciBfc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgX3NoaW0yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hpbSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIHBvbHlmaWxsID0gKDAsIF9wb2x5ZmlsbDJbJ2RlZmF1bHQnXSkoKTtcbnBvbHlmaWxsLmltcGxlbWVudGF0aW9uID0gX2ltcGxlbWVudGF0aW9uMlsnZGVmYXVsdCddO1xucG9seWZpbGwuc2hpbSA9IF9zaGltMlsnZGVmYXVsdCddO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBwb2x5ZmlsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OXBibVJsZUM1cWN5SmRMQ0p1WVcxbGN5STZXeUp3YjJ4NVptbHNiQ0lzSW1sdGNHeGxiV1Z1ZEdGMGFXOXVJaXdpYzJocGJTSmRMQ0p0WVhCd2FXNW5jeUk2SWpzN096dEJRVUZCT3pzN08wRkJRMEU3T3pzN1FVRkRRVHM3T3pzN08wRkJSVUVzU1VGQlRVRXNWMEZCVnl3MFFrRkJha0k3UVVGRFFVRXNVMEZCVTBNc1kwRkJWRHRCUVVOQlJDeFRRVUZUUlN4SlFVRlVPenR4UWtGRlpVWXNVU0lzSW1acGJHVWlPaUpwYm1SbGVDNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUdSbFptRjFiSFFnWVhNZ1oyVjBVRzlzZVdacGJHd2dmU0JtY205dElDY3VMM0J2YkhsbWFXeHNKMXh1YVcxd2IzSjBJSHNnWkdWbVlYVnNkQ0JoY3lCcGJYQnNaVzFsYm5SaGRHbHZiaUI5SUdaeWIyMGdKeTR2YVcxd2JHVnRaVzUwWVhScGIyNG5YRzVwYlhCdmNuUWdleUJrWldaaGRXeDBJR0Z6SUhOb2FXMGdmU0JtY205dElDY3VMM05vYVcwblhHNWNibU52Ym5OMElIQnZiSGxtYVd4c0lEMGdaMlYwVUc5c2VXWnBiR3dvS1Z4dWNHOXNlV1pwYkd3dWFXMXdiR1Z0Wlc1MFlYUnBiMjRnUFNCcGJYQnNaVzFsYm5SaGRHbHZibHh1Y0c5c2VXWnBiR3d1YzJocGJTQTlJSE5vYVcxY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2NHOXNlV1pwYkd4Y2JpSmRmUT09IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1snZGVmYXVsdCddID0gZ2V0UG9seWZpbGw7XG5cbnZhciBfYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcicpO1xuXG52YXIgX2FkYXB0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWRhcHRlcik7XG5cbnZhciBfYnVpbHRpbiA9IHJlcXVpcmUoJy4vYnVpbHRpbicpO1xuXG52YXIgX2J1aWx0aW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYnVpbHRpbik7XG5cbnZhciBfaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBfaW1wbGVtZW50YXRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW1wbGVtZW50YXRpb24pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuICB0cnkge1xuICAgIHZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8ge30gOiBkb2N1bWVudDtcbiAgICB2YXIgaXRlciA9ICgwLCBfYnVpbHRpbjJbJ2RlZmF1bHQnXSkoZG9jLCAweEZGRkZGRkZGLCBudWxsLCBmYWxzZSk7XG4gICAgaWYgKGl0ZXIucmVmZXJlbmNlTm9kZSA9PT0gZG9jKSByZXR1cm4gX2J1aWx0aW4yWydkZWZhdWx0J107XG4gICAgcmV0dXJuIF9hZGFwdGVyMlsnZGVmYXVsdCddO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIF9pbXBsZW1lbnRhdGlvbjJbJ2RlZmF1bHQnXTtcbiAgfVxufSAvKmdsb2JhbCBkb2N1bWVudCovXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTl3YjJ4NVptbHNiQzVxY3lKZExDSnVZVzFsY3lJNld5Sm5aWFJRYjJ4NVptbHNiQ0lzSW1Sdll5SXNJbVJ2WTNWdFpXNTBJaXdpYVhSbGNpSXNJbkpsWm1WeVpXNWpaVTV2WkdVaUxDSmZJbDBzSW0xaGNIQnBibWR6SWpvaU96czdjVUpCVFhkQ1FTeFhPenRCUVV4NFFqczdPenRCUVVOQk96czdPMEZCUTBFN096czdPenRCUVVkbExGTkJRVk5CTEZkQlFWUXNSMEZCZFVJN1FVRkRjRU1zVFVGQlNUdEJRVU5HTEZGQlFVMURMRTFCUVUwc1QwRkJUME1zVVVGQlVDeExRVUZ4UWl4WFFVRnlRaXhIUVVGdFF5eEZRVUZ1UXl4SFFVRjNRMEVzVVVGQmNFUTdRVUZEUVN4UlFVRk5ReXhQUVVGUExEQkNRVUZSUml4SFFVRlNMRVZCUVdFc1ZVRkJZaXhGUVVGNVFpeEpRVUY2UWl4RlFVRXJRaXhMUVVFdlFpeERRVUZpTzBGQlEwRXNVVUZCU1VVc1MwRkJTME1zWVVGQlRDeExRVUYxUWtnc1IwRkJNMElzUlVGQlowTTdRVUZEYUVNN1FVRkRSQ3hIUVV4RUxFTkJTMFVzVDBGQlQwa3NRMEZCVUN4RlFVRlZPMEZCUTFZN1FVRkRSRHRCUVVOR0xFTXNRMEZtUkNJc0ltWnBiR1VpT2lKd2IyeDVabWxzYkM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxWjJ4dlltRnNJR1J2WTNWdFpXNTBLaTljYm1sdGNHOXlkQ0JoWkdGd2RHVnlJR1p5YjIwZ0p5NHZZV1JoY0hSbGNpZGNibWx0Y0c5eWRDQmlkV2xzZEdsdUlHWnliMjBnSnk0dlluVnBiSFJwYmlkY2JtbHRjRzl5ZENCcGJYQnNaVzFsYm5SaGRHbHZiaUJtY205dElDY3VMMmx0Y0d4bGJXVnVkR0YwYVc5dUoxeHVYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR1oxYm1OMGFXOXVJR2RsZEZCdmJIbG1hV3hzS0NrZ2UxeHVJQ0IwY25rZ2UxeHVJQ0FnSUdOdmJuTjBJR1J2WXlBOUlIUjVjR1Z2Wmloa2IyTjFiV1Z1ZENrZ1BUMDlJQ2QxYm1SbFptbHVaV1FuSUQ4Z2UzMGdPaUJrYjJOMWJXVnVkRnh1SUNBZ0lHTnZibk4wSUdsMFpYSWdQU0JpZFdsc2RHbHVLR1J2WXl3Z01IaEdSa1pHUmtaR1Jpd2diblZzYkN3Z1ptRnNjMlVwWEc0Z0lDQWdhV1lnS0dsMFpYSXVjbVZtWlhKbGJtTmxUbTlrWlNBOVBUMGdaRzlqS1NCeVpYUjFjbTRnWW5WcGJIUnBibHh1SUNBZ0lISmxkSFZ5YmlCaFpHRndkR1Z5WEc0Z0lIMGdZMkYwWTJnZ0tGOHBJSHRjYmlBZ0lDQnlaWFIxY200Z2FXMXdiR1Z0Wlc1MFlYUnBiMjVjYmlBZ2ZWeHVmVnh1SWwxOSIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHNoaW07XG5cbnZhciBfYnVpbHRpbiA9IHJlcXVpcmUoJy4vYnVpbHRpbicpO1xuXG52YXIgX2J1aWx0aW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYnVpbHRpbik7XG5cbnZhciBfcG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBfcG9seWZpbGwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9seWZpbGwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbi8qZ2xvYmFsIGRvY3VtZW50Ki9cbmZ1bmN0aW9uIHNoaW0oKSB7XG4gIHZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8ge30gOiBkb2N1bWVudDtcbiAgdmFyIHBvbHlmaWxsID0gKDAsIF9wb2x5ZmlsbDJbJ2RlZmF1bHQnXSkoKTtcbiAgaWYgKHBvbHlmaWxsICE9PSBfYnVpbHRpbjJbJ2RlZmF1bHQnXSkgZG9jLmNyZWF0ZU5vZGVJdGVyYXRvciA9IHBvbHlmaWxsO1xuICByZXR1cm4gcG9seWZpbGw7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTl6YUdsdExtcHpJbDBzSW01aGJXVnpJanBiSW5Ob2FXMGlMQ0prYjJNaUxDSmtiMk4xYldWdWRDSXNJbkJ2YkhsbWFXeHNJaXdpWTNKbFlYUmxUbTlrWlVsMFpYSmhkRzl5SWwwc0ltMWhjSEJwYm1keklqb2lPenM3Y1VKQlMzZENRU3hKT3p0QlFVcDRRanM3T3p0QlFVTkJPenM3T3pzN1FVRkdRVHRCUVV0bExGTkJRVk5CTEVsQlFWUXNSMEZCWjBJN1FVRkROMElzVFVGQlRVTXNUVUZCVFN4UFFVRlBReXhSUVVGUUxFdEJRWEZDTEZkQlFYSkNMRWRCUVcxRExFVkJRVzVETEVkQlFYZERRU3hSUVVGd1JEdEJRVU5CTEUxQlFVMURMRmRCUVZjc05FSkJRV3BDTzBGQlEwRXNUVUZCU1VFc2FVTkJRVW9zUlVGQk1FSkdMRWxCUVVsSExHdENRVUZLTEVkQlFYbENSQ3hSUVVGNlFqdEJRVU14UWl4VFFVRlBRU3hSUVVGUU8wRkJRMFFpTENKbWFXeGxJam9pYzJocGJTNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cVoyeHZZbUZzSUdSdlkzVnRaVzUwS2k5Y2JtbHRjRzl5ZENCaWRXbHNkR2x1SUdaeWIyMGdKeTR2WW5WcGJIUnBiaWRjYm1sdGNHOXlkQ0JuWlhSUWIyeDVabWxzYkNCbWNtOXRJQ2N1TDNCdmJIbG1hV3hzSjF4dVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUlITm9hVzBvS1NCN1hHNGdJR052Ym5OMElHUnZZeUE5SUhSNWNHVnZaaWhrYjJOMWJXVnVkQ2tnUFQwOUlDZDFibVJsWm1sdVpXUW5JRDhnZTMwZ09pQmtiMk4xYldWdWRGeHVJQ0JqYjI1emRDQndiMng1Wm1sc2JDQTlJR2RsZEZCdmJIbG1hV3hzS0NsY2JpQWdhV1lnS0hCdmJIbG1hV3hzSUNFOVBTQmlkV2xzZEdsdUtTQmtiMk11WTNKbFlYUmxUbTlrWlVsMFpYSmhkRzl5SUQwZ2NHOXNlV1pwYkd4Y2JpQWdjbVYwZFhKdUlIQnZiSGxtYVd4c1hHNTlYRzRpWFgwPSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvcG9seWZpbGwnKVsnZGVmYXVsdCddO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9zaGltJylbJ2RlZmF1bHQnXTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWInKVsnZGVmYXVsdCddO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0c1snZGVmYXVsdCddID0gc2VlaztcblxudmFyIF9hbmNlc3RvcnMgPSByZXF1aXJlKCdhbmNlc3RvcnMnKTtcblxudmFyIF9hbmNlc3RvcnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYW5jZXN0b3JzKTtcblxudmFyIF9pbmRleE9mID0gcmVxdWlyZSgnaW5kZXgtb2YnKTtcblxudmFyIF9pbmRleE9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4T2YpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBFX1NIT1cgPSAnQXJndW1lbnQgMSBvZiBzZWVrIG11c3QgdXNlIGZpbHRlciBOb2RlRmlsdGVyLlNIT1dfVEVYVC4nO1xudmFyIEVfV0hFUkUgPSAnQXJndW1lbnQgMiBvZiBzZWVrIG11c3QgYmUgYSBudW1iZXIgb3IgYSBUZXh0IE5vZGUuJztcblxudmFyIFNIT1dfVEVYVCA9IDQ7XG52YXIgVEVYVF9OT0RFID0gMztcblxuZnVuY3Rpb24gc2VlayhpdGVyLCB3aGVyZSkge1xuICBpZiAoaXRlci53aGF0VG9TaG93ICE9PSBTSE9XX1RFWFQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRV9TSE9XKTtcbiAgfVxuXG4gIHZhciBjb3VudCA9IDA7XG4gIHZhciBub2RlID0gaXRlci5yZWZlcmVuY2VOb2RlO1xuICB2YXIgcHJlZGljYXRlcyA9IG51bGw7XG5cbiAgaWYgKGlzTnVtYmVyKHdoZXJlKSkge1xuICAgIHByZWRpY2F0ZXMgPSB7XG4gICAgICBmb3J3YXJkOiBmdW5jdGlvbiBmb3J3YXJkKCkge1xuICAgICAgICByZXR1cm4gY291bnQgPCB3aGVyZTtcbiAgICAgIH0sXG4gICAgICBiYWNrd2FyZDogZnVuY3Rpb24gYmFja3dhcmQoKSB7XG4gICAgICAgIHJldHVybiBjb3VudCA+IHdoZXJlO1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNUZXh0KHdoZXJlKSkge1xuICAgIHZhciBmb3J3YXJkID0gYmVmb3JlKG5vZGUsIHdoZXJlKSA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG5vZGUgIT09IHdoZXJlO1xuICAgIH07XG4gICAgdmFyIGJhY2t3YXJkID0gZnVuY3Rpb24gYmFja3dhcmQoKSB7XG4gICAgICByZXR1cm4gbm9kZSAhPSB3aGVyZSB8fCAhaXRlci5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZTtcbiAgICB9O1xuICAgIHByZWRpY2F0ZXMgPSB7IGZvcndhcmQ6IGZvcndhcmQsIGJhY2t3YXJkOiBiYWNrd2FyZCB9O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihFX1dIRVJFKTtcbiAgfVxuXG4gIHdoaWxlIChwcmVkaWNhdGVzLmZvcndhcmQoKSAmJiAobm9kZSA9IGl0ZXIubmV4dE5vZGUoKSkgIT09IG51bGwpIHtcbiAgICBjb3VudCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gIH1cblxuICB3aGlsZSAocHJlZGljYXRlcy5iYWNrd2FyZCgpICYmIChub2RlID0gaXRlci5wcmV2aW91c05vZGUoKSkgIT09IG51bGwpIHtcbiAgICBjb3VudCAtPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gY291bnQ7XG59XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKG4pIHtcbiAgcmV0dXJuICFpc05hTihwYXJzZUludChuKSkgJiYgaXNGaW5pdGUobik7XG59XG5cbmZ1bmN0aW9uIGlzVGV4dChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIGJlZm9yZShyZWYsIG5vZGUpIHtcbiAgaWYgKHJlZiA9PT0gbm9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBjb21tb24gPSBudWxsO1xuICB2YXIgbGVmdCA9IFtyZWZdLmNvbmNhdCgoMCwgX2FuY2VzdG9yczJbJ2RlZmF1bHQnXSkocmVmKSkucmV2ZXJzZSgpO1xuICB2YXIgcmlnaHQgPSBbbm9kZV0uY29uY2F0KCgwLCBfYW5jZXN0b3JzMlsnZGVmYXVsdCddKShub2RlKSkucmV2ZXJzZSgpO1xuXG4gIHdoaWxlIChsZWZ0WzBdID09PSByaWdodFswXSkge1xuICAgIGNvbW1vbiA9IGxlZnQuc2hpZnQoKTtcbiAgICByaWdodC5zaGlmdCgpO1xuICB9XG5cbiAgbGVmdCA9IGxlZnRbMF07XG4gIHJpZ2h0ID0gcmlnaHRbMF07XG5cbiAgdmFyIGwgPSAoMCwgX2luZGV4T2YyWydkZWZhdWx0J10pKGNvbW1vbi5jaGlsZE5vZGVzLCBsZWZ0KTtcbiAgdmFyIHIgPSAoMCwgX2luZGV4T2YyWydkZWZhdWx0J10pKGNvbW1vbi5jaGlsZE5vZGVzLCByaWdodCk7XG5cbiAgcmV0dXJuIGwgPiByO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5cGJtUmxlQzVxY3lKZExDSnVZVzFsY3lJNld5SnpaV1ZySWl3aVJWOVRTRTlYSWl3aVJWOVhTRVZTUlNJc0lsTklUMWRmVkVWWVZDSXNJbFJGV0ZSZlRrOUVSU0lzSW1sMFpYSWlMQ0ozYUdWeVpTSXNJbmRvWVhSVWIxTm9iM2NpTENKRmNuSnZjaUlzSW1OdmRXNTBJaXdpYm05a1pTSXNJbkpsWm1WeVpXNWpaVTV2WkdVaUxDSndjbVZrYVdOaGRHVnpJaXdpYVhOT2RXMWlaWElpTENKbWIzSjNZWEprSWl3aVltRmphM2RoY21RaUxDSnBjMVJsZUhRaUxDSmlaV1p2Y21VaUxDSndiMmx1ZEdWeVFtVm1iM0psVW1WbVpYSmxibU5sVG05a1pTSXNJbTVsZUhST2IyUmxJaXdpYm05a1pWWmhiSFZsSWl3aWJHVnVaM1JvSWl3aWNISmxkbWx2ZFhOT2IyUmxJaXdpYmlJc0ltbHpUbUZPSWl3aWNHRnljMlZKYm5RaUxDSnBjMFpwYm1sMFpTSXNJbTV2WkdWVWVYQmxJaXdpY21WbUlpd2lZMjl0Ylc5dUlpd2liR1ZtZENJc0ltTnZibU5oZENJc0luSmxkbVZ5YzJVaUxDSnlhV2RvZENJc0luTm9hV1owSWl3aWJDSXNJbU5vYVd4a1RtOWtaWE1pTENKeUlsMHNJbTFoY0hCcGJtZHpJam9pT3pzN2NVSkJWWGRDUVN4Sk96dEJRVlo0UWpzN096dEJRVU5CT3pzN096czdRVUZGUVN4SlFVRk5ReXhUUVVGVExEQkVRVUZtTzBGQlEwRXNTVUZCVFVNc1ZVRkJWU3h4UkVGQmFFSTdPMEZCUlVFc1NVRkJUVU1zV1VGQldTeERRVUZzUWp0QlFVTkJMRWxCUVUxRExGbEJRVmtzUTBGQmJFSTdPMEZCUjJVc1UwRkJVMG9zU1VGQlZDeERRVUZqU3l4SlFVRmtMRVZCUVc5Q1F5eExRVUZ3UWl4RlFVRXlRanRCUVVONFF5eE5RVUZKUkN4TFFVRkxSU3hWUVVGTUxFdEJRVzlDU2l4VFFVRjRRaXhGUVVGdFF6dEJRVU5xUXl4VlFVRk5MRWxCUVVsTExFdEJRVW9zUTBGQlZWQXNUVUZCVml4RFFVRk9PMEZCUTBRN08wRkJSVVFzVFVGQlNWRXNVVUZCVVN4RFFVRmFPMEZCUTBFc1RVRkJTVU1zVDBGQlQwd3NTMEZCUzAwc1lVRkJhRUk3UVVGRFFTeE5RVUZKUXl4aFFVRmhMRWxCUVdwQ096dEJRVVZCTEUxQlFVbERMRk5CUVZOUUxFdEJRVlFzUTBGQlNpeEZRVUZ4UWp0QlFVTnVRazBzYVVKQlFXRTdRVUZEV0VVc1pVRkJVenRCUVVGQkxHVkJRVTFNTEZGQlFWRklMRXRCUVdRN1FVRkJRU3hQUVVSRk8wRkJSVmhUTEdkQ1FVRlZPMEZCUVVFc1pVRkJUVTRzVVVGQlVVZ3NTMEZCWkR0QlFVRkJPMEZCUmtNc1MwRkJZanRCUVVsRUxFZEJURVFzVFVGTFR5eEpRVUZKVlN4UFFVRlBWaXhMUVVGUUxFTkJRVW9zUlVGQmJVSTdRVUZEZUVJc1VVRkJTVkVzVlVGQlZVY3NUMEZCVDFBc1NVRkJVQ3hGUVVGaFNpeExRVUZpTEVsQlFYTkNPMEZCUVVFc1lVRkJUU3hMUVVGT08wRkJRVUVzUzBGQmRFSXNSMEZCYjBNN1FVRkJRU3hoUVVGTlNTeFRRVUZUU2l4TFFVRm1PMEZCUVVFc1MwRkJiRVE3UVVGRFFTeFJRVUZKVXl4WFFVRlhMRk5CUVZoQkxGRkJRVmM3UVVGQlFTeGhRVUZOVEN4UlFVRlJTaXhMUVVGU0xFbEJRV2xDTEVOQlFVTkVMRXRCUVV0aExEQkNRVUUzUWp0QlFVRkJMRXRCUVdZN1FVRkRRVTRzYVVKQlFXRXNSVUZCUTBVc1owSkJRVVFzUlVGQlZVTXNhMEpCUVZZc1JVRkJZanRCUVVORUxFZEJTazBzVFVGSlFUdEJRVU5NTEZWQlFVMHNTVUZCU1ZBc1MwRkJTaXhEUVVGVlRpeFBRVUZXTEVOQlFVNDdRVUZEUkRzN1FVRkZSQ3hUUVVGUFZTeFhRVUZYUlN4UFFVRllMRTFCUVhkQ0xFTkJRVU5LTEU5QlFVOU1MRXRCUVV0akxGRkJRVXdzUlVGQlVpeE5RVUUyUWl4SlFVRTFSQ3hGUVVGclJUdEJRVU5vUlZZc1lVRkJVME1zUzBGQlMxVXNVMEZCVEN4RFFVRmxReXhOUVVGNFFqdEJRVU5FT3p0QlFVVkVMRk5CUVU5VUxGZEJRVmRITEZGQlFWZ3NUVUZCZVVJc1EwRkJRMHdzVDBGQlQwd3NTMEZCUzJsQ0xGbEJRVXdzUlVGQlVpeE5RVUZwUXl4SlFVRnFSU3hGUVVGMVJUdEJRVU55UldJc1lVRkJVME1zUzBGQlMxVXNVMEZCVEN4RFFVRmxReXhOUVVGNFFqdEJRVU5FT3p0QlFVVkVMRk5CUVU5YUxFdEJRVkE3UVVGRFJEczdRVUZIUkN4VFFVRlRTU3hSUVVGVUxFTkJRV3RDVlN4RFFVRnNRaXhGUVVGeFFqdEJRVU51UWl4VFFVRlBMRU5CUVVORExFMUJRVTFETEZOQlFWTkdMRU5CUVZRc1EwRkJUaXhEUVVGRUxFbEJRWFZDUnl4VFFVRlRTQ3hEUVVGVUxFTkJRVGxDTzBGQlEwUTdPMEZCUjBRc1UwRkJVMUFzVFVGQlZDeERRVUZuUWs0c1NVRkJhRUlzUlVGQmMwSTdRVUZEY0VJc1UwRkJUMEVzUzBGQlMybENMRkZCUVV3c1MwRkJhMEoyUWl4VFFVRjZRanRCUVVORU96dEJRVWRFTEZOQlFWTmhMRTFCUVZRc1EwRkJaMEpYTEVkQlFXaENMRVZCUVhGQ2JFSXNTVUZCY2tJc1JVRkJNa0k3UVVGRGVrSXNUVUZCU1d0Q0xGRkJRVkZzUWl4SlFVRmFMRVZCUVd0Q0xFOUJRVThzUzBGQlVEczdRVUZGYkVJc1RVRkJTVzFDTEZOQlFWTXNTVUZCWWp0QlFVTkJMRTFCUVVsRExFOUJRVThzUTBGQlEwWXNSMEZCUkN4RlFVRk5SeXhOUVVGT0xFTkJRV0VzTkVKQlFWVklMRWRCUVZZc1EwRkJZaXhGUVVFMlFra3NUMEZCTjBJc1JVRkJXRHRCUVVOQkxFMUJRVWxETEZGQlFWRXNRMEZCUTNaQ0xFbEJRVVFzUlVGQlQzRkNMRTFCUVZBc1EwRkJZeXcwUWtGQlZYSkNMRWxCUVZZc1EwRkJaQ3hGUVVFclFuTkNMRTlCUVM5Q0xFVkJRVm83TzBGQlJVRXNVMEZCVDBZc1MwRkJTeXhEUVVGTUxFMUJRVmxITEUxQlFVMHNRMEZCVGl4RFFVRnVRaXhGUVVFMlFqdEJRVU16UWtvc1lVRkJVME1zUzBGQlMwa3NTMEZCVEN4RlFVRlVPMEZCUTBGRUxGVkJRVTFETEV0QlFVNDdRVUZEUkRzN1FVRkZSRW9zVTBGQlQwRXNTMEZCU3l4RFFVRk1MRU5CUVZBN1FVRkRRVWNzVlVGQlVVRXNUVUZCVFN4RFFVRk9MRU5CUVZJN08wRkJSVUVzVFVGQlNVVXNTVUZCU1N3d1FrRkJVVTRzVDBGQlQwOHNWVUZCWml4RlFVRXlRazRzU1VGQk0wSXNRMEZCVWp0QlFVTkJMRTFCUVVsUExFbEJRVWtzTUVKQlFWRlNMRTlCUVU5UExGVkJRV1lzUlVGQk1rSklMRXRCUVROQ0xFTkJRVkk3TzBGQlJVRXNVMEZCVDBVc1NVRkJTVVVzUTBGQldEdEJRVU5FSWl3aVptbHNaU0k2SW1sdVpHVjRMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdGdVkyVnpkRzl5Y3lCbWNtOXRJQ2RoYm1ObGMzUnZjbk1uWEc1cGJYQnZjblFnYVc1a1pYaFBaaUJtY205dElDZHBibVJsZUMxdlppZGNibHh1WTI5dWMzUWdSVjlUU0U5WElEMGdKMEZ5WjNWdFpXNTBJREVnYjJZZ2MyVmxheUJ0ZFhOMElIVnpaU0JtYVd4MFpYSWdUbTlrWlVacGJIUmxjaTVUU0U5WFgxUkZXRlF1SjF4dVkyOXVjM1FnUlY5WFNFVlNSU0E5SUNkQmNtZDFiV1Z1ZENBeUlHOW1JSE5sWldzZ2JYVnpkQ0JpWlNCaElHNTFiV0psY2lCdmNpQmhJRlJsZUhRZ1RtOWtaUzRuWEc1Y2JtTnZibk4wSUZOSVQxZGZWRVZZVkNBOUlEUmNibU52Ym5OMElGUkZXRlJmVGs5RVJTQTlJRE5jYmx4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCelpXVnJLR2wwWlhJc0lIZG9aWEpsS1NCN1hHNGdJR2xtSUNocGRHVnlMbmRvWVhSVWIxTm9iM2NnSVQwOUlGTklUMWRmVkVWWVZDa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loRlgxTklUMWNwWEc0Z0lIMWNibHh1SUNCc1pYUWdZMjkxYm5RZ1BTQXdYRzRnSUd4bGRDQnViMlJsSUQwZ2FYUmxjaTV5WldabGNtVnVZMlZPYjJSbFhHNGdJR3hsZENCd2NtVmthV05oZEdWeklEMGdiblZzYkZ4dVhHNGdJR2xtSUNocGMwNTFiV0psY2loM2FHVnlaU2twSUh0Y2JpQWdJQ0J3Y21Wa2FXTmhkR1Z6SUQwZ2UxeHVJQ0FnSUNBZ1ptOXlkMkZ5WkRvZ0tDa2dQVDRnWTI5MWJuUWdQQ0IzYUdWeVpTeGNiaUFnSUNBZ0lHSmhZMnQzWVhKa09pQW9LU0E5UGlCamIzVnVkQ0ErSUhkb1pYSmxMRnh1SUNBZ0lIMWNiaUFnZlNCbGJITmxJR2xtSUNocGMxUmxlSFFvZDJobGNtVXBLU0I3WEc0Z0lDQWdiR1YwSUdadmNuZGhjbVFnUFNCaVpXWnZjbVVvYm05a1pTd2dkMmhsY21VcElEOGdLQ2tnUFQ0Z1ptRnNjMlVnT2lBb0tTQTlQaUJ1YjJSbElDRTlQU0IzYUdWeVpWeHVJQ0FnSUd4bGRDQmlZV05yZDJGeVpDQTlJQ2dwSUQwK0lHNXZaR1VnSVQwZ2QyaGxjbVVnZkh3Z0lXbDBaWEl1Y0c5cGJuUmxja0psWm05eVpWSmxabVZ5Wlc1alpVNXZaR1ZjYmlBZ0lDQndjbVZrYVdOaGRHVnpJRDBnZTJadmNuZGhjbVFzSUdKaFkydDNZWEprZlZ4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhGWDFkSVJWSkZLVnh1SUNCOVhHNWNiaUFnZDJocGJHVWdLSEJ5WldScFkyRjBaWE11Wm05eWQyRnlaQ2dwSUNZbUlDaHViMlJsSUQwZ2FYUmxjaTV1WlhoMFRtOWtaU2dwS1NBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUdOdmRXNTBJQ3M5SUc1dlpHVXVibTlrWlZaaGJIVmxMbXhsYm1kMGFGeHVJQ0I5WEc1Y2JpQWdkMmhwYkdVZ0tIQnlaV1JwWTJGMFpYTXVZbUZqYTNkaGNtUW9LU0FtSmlBb2JtOWtaU0E5SUdsMFpYSXVjSEpsZG1sdmRYTk9iMlJsS0NrcElDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ1kyOTFiblFnTFQwZ2JtOWtaUzV1YjJSbFZtRnNkV1V1YkdWdVozUm9YRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdZMjkxYm5SY2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCcGMwNTFiV0psY2lodUtTQjdYRzRnSUhKbGRIVnliaUFoYVhOT1lVNG9jR0Z5YzJWSmJuUW9iaWtwSUNZbUlHbHpSbWx1YVhSbEtHNHBYRzU5WEc1Y2JseHVablZ1WTNScGIyNGdhWE5VWlhoMEtHNXZaR1VwSUh0Y2JpQWdjbVYwZFhKdUlHNXZaR1V1Ym05a1pWUjVjR1VnUFQwOUlGUkZXRlJmVGs5RVJWeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHSmxabTl5WlNoeVpXWXNJRzV2WkdVcElIdGNiaUFnYVdZZ0tISmxaaUE5UFQwZ2JtOWtaU2tnY21WMGRYSnVJR1poYkhObFhHNWNiaUFnYkdWMElHTnZiVzF2YmlBOUlHNTFiR3hjYmlBZ2JHVjBJR3hsWm5RZ1BTQmJjbVZtWFM1amIyNWpZWFFvWVc1alpYTjBiM0p6S0hKbFppa3BMbkpsZG1WeWMyVW9LVnh1SUNCc1pYUWdjbWxuYUhRZ1BTQmJibTlrWlYwdVkyOXVZMkYwS0dGdVkyVnpkRzl5Y3lodWIyUmxLU2t1Y21WMlpYSnpaU2dwWEc1Y2JpQWdkMmhwYkdVZ0tHeGxablJiTUYwZ1BUMDlJSEpwWjJoMFd6QmRLU0I3WEc0Z0lDQWdZMjl0Ylc5dUlEMGdiR1ZtZEM1emFHbG1kQ2dwWEc0Z0lDQWdjbWxuYUhRdWMyaHBablFvS1Z4dUlDQjlYRzVjYmlBZ2JHVm1kQ0E5SUd4bFpuUmJNRjFjYmlBZ2NtbG5hSFFnUFNCeWFXZG9kRnN3WFZ4dVhHNGdJR3hsZENCc0lEMGdhVzVrWlhoUFppaGpiMjF0YjI0dVkyaHBiR1JPYjJSbGN5d2diR1ZtZENsY2JpQWdiR1YwSUhJZ1BTQnBibVJsZUU5bUtHTnZiVzF2Ymk1amFHbHNaRTV2WkdWekxDQnlhV2RvZENsY2JseHVJQ0J5WlhSMWNtNGdiQ0ErSUhKY2JuMWNiaUpkZlE9PSIsIi8qIVxuICogaW5kZXgtb2YgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2luZGV4LW9mPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmRleE9mKGFyciwgZWxlLCBzdGFydCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gIHZhciBpZHggPSAtMTtcblxuICBpZiAoYXJyID09IG51bGwpIHJldHVybiBpZHg7XG4gIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICB2YXIgaSA9IHN0YXJ0IDwgMFxuICAgID8gKGxlbiArIHN0YXJ0KVxuICAgIDogc3RhcnQ7XG5cbiAgaWYgKGkgPj0gYXJyLmxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgaWYgKGFycltpXSA9PT0gZWxlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuXG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLFxuICAgICAgUHJvbWlzZUltcGxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZVxuICAvLyBvciBub3QsIHJldHVybiB0aGUgcnVudGltZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gZGVjbGFyZSB0aGUgdmFyaWFibGVcbiAgLy8gcmVnZW5lcmF0b3JSdW50aW1lIGluIHRoZSBvdXRlciBzY29wZSwgd2hpY2ggYWxsb3dzIHRoaXMgbW9kdWxlIHRvIGJlXG4gIC8vIGluamVjdGVkIGVhc2lseSBieSBgYmluL3JlZ2VuZXJhdG9yIC0taW5jbHVkZS1ydW50aW1lIHNjcmlwdC5qc2AuXG4gIHJldHVybiBleHBvcnRzO1xuXG59KFxuICAvLyBJZiB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGUsIHVzZSBtb2R1bGUuZXhwb3J0c1xuICAvLyBhcyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBlbXB0eVxuICAvLyBvYmplY3QuIEVpdGhlciB3YXksIHRoZSByZXN1bHRpbmcgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplXG4gIC8vIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgdmFyaWFibGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuXG4gIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgPyBtb2R1bGUuZXhwb3J0cyA6IHt9XG4pKTtcblxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIC8vIFRoaXMgbW9kdWxlIHNob3VsZCBub3QgYmUgcnVubmluZyBpbiBzdHJpY3QgbW9kZSwgc28gdGhlIGFib3ZlXG4gIC8vIGFzc2lnbm1lbnQgc2hvdWxkIGFsd2F5cyB3b3JrIHVubGVzcyBzb21ldGhpbmcgaXMgbWlzY29uZmlndXJlZC4gSnVzdFxuICAvLyBpbiBjYXNlIHJ1bnRpbWUuanMgYWNjaWRlbnRhbGx5IHJ1bnMgaW4gc3RyaWN0IG1vZGUsIHdlIGNhbiBlc2NhcGVcbiAgLy8gc3RyaWN0IG1vZGUgdXNpbmcgYSBnbG9iYWwgRnVuY3Rpb24gY2FsbC4gVGhpcyBjb3VsZCBjb25jZWl2YWJseSBmYWlsXG4gIC8vIGlmIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgZm9yYmlkcyB1c2luZyBGdW5jdGlvbiwgYnV0IGluIHRoYXQgY2FzZVxuICAvLyB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGUgYWNjaWRlbnRhbCBzdHJpY3QgbW9kZSBwcm9ibGVtLiBJZlxuICAvLyB5b3UndmUgbWlzY29uZmlndXJlZCB5b3VyIGJ1bmRsZXIgdG8gZm9yY2Ugc3RyaWN0IG1vZGUgYW5kIGFwcGxpZWQgYVxuICAvLyBDU1AgdG8gZm9yYmlkIEZ1bmN0aW9uLCBhbmQgeW91J3JlIG5vdCB3aWxsaW5nIHRvIGZpeCBlaXRoZXIgb2YgdGhvc2VcbiAgLy8gcHJvYmxlbXMsIHBsZWFzZSBkZXRhaWwgeW91ciB1bmlxdWUgcHJlZGljYW1lbnQgaW4gYSBHaXRIdWIgaXNzdWUuXG4gIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG59XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGV4dGVuZFxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRhcmdldCA9IHt9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldXG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFxufVxuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IGNhcnRlc2lhbkFycmF5cyBmcm9tICdjYXJ0ZXNpYW4nO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIHByb2R1Y3QoLi4uaXRlcmFibGVzKSB7XG4gIC8vIFdlIGxpc3RlbiB0byBhbGwgaXRlcmF0b3JzIGluIHBhcmFsbGVsLCB3aGlsZSBsb2dnaW5nIGFsbCB0aGUgdmFsdWVzIHRoZXlcbiAgLy8gcHJvZHVjZS4gV2hlbmV2ZXIgYW4gaXRlcmF0b3IgcHJvZHVjZXMgYSB2YWx1ZSwgd2UgcHJvZHVjZSBhbmQgeWllbGQgYWxsXG4gIC8vIGNvbWJpbmF0aW9ucyBvZiB0aGF0IHZhbHVlIHdpdGggdGhlIGxvZ2dlZCB2YWx1ZXMgZnJvbSBvdGhlciBpdGVyYXRvcnMuXG4gIC8vIEV2ZXJ5IGNvbWJpbmF0aW9uIGlzIHRodXMgbWFkZSBleGFjdGx5IG9uY2UsIGFuZCBhcyBzb29uIGFzIGl0IGlzIGtub3duLlxuXG4gIGNvbnN0IGl0ZXJhdG9ycyA9IGl0ZXJhYmxlcy5tYXAoaXRlcmFibGUgPT4gaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkpO1xuICAvLyBJbml0aWFsaXNlIGFuIGVtcHR5IGxvZyBmb3IgZWFjaCBpdGVyYWJsZS5cbiAgY29uc3QgbG9ncyA9IGl0ZXJhYmxlcy5tYXAoKCkgPT4gW10pO1xuXG4gIGNvbnN0IG5leHRWYWx1ZVByb21pc2VzID0gaXRlcmF0b3JzLm1hcCgoaXRlcmF0b3IsIGl0ZXJhYmxlTnIpID0+XG4gICAgaXRlcmF0b3JcbiAgICAgIC5uZXh0KClcbiAgICAgIC50aGVuKGFzeW5jICh7IHZhbHVlLCBkb25lIH0pID0+ICh7IHZhbHVlOiBhd2FpdCB2YWx1ZSwgZG9uZSB9KSlcbiAgICAgIC50aGVuKFxuICAgICAgICAvLyBMYWJlbCB0aGUgcmVzdWx0IHdpdGggaXRlcmFibGVOciwgdG8ga25vdyB3aGljaCBpdGVyYWJsZSBwcm9kdWNlZFxuICAgICAgICAvLyB0aGlzIHZhbHVlIGFmdGVyIFByb21pc2UucmFjZSBiZWxvdy5cbiAgICAgICAgKHsgdmFsdWUsIGRvbmUgfSkgPT4gKHsgdmFsdWUsIGRvbmUsIGl0ZXJhYmxlTnIgfSksXG4gICAgICApLFxuICApO1xuXG4gIC8vIEtlZXAgbGlzdGVuaW5nIGFzIGxvbmcgYXMgYW55IG9mIHRoZSBpdGVyYWJsZXMgaXMgbm90IHlldCBleGhhdXN0ZWQuXG4gIHdoaWxlIChuZXh0VmFsdWVQcm9taXNlcy5zb21lKHAgPT4gcCAhPT0gbnVsbCkpIHtcbiAgICAvLyBXYWl0IHVudGlsIGFueSBvZiB0aGUgYWN0aXZlIGl0ZXJhdG9ycyBoYXMgcHJvZHVjZWQgYSBuZXcgdmFsdWUuXG4gICAgY29uc3QgeyB2YWx1ZSwgZG9uZSwgaXRlcmFibGVOciB9ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFxuICAgICAgbmV4dFZhbHVlUHJvbWlzZXMuZmlsdGVyKHAgPT4gcCAhPT0gbnVsbCksXG4gICAgKTtcblxuICAgIC8vIElmIHRoaXMgaXRlcmFibGUgd2FzIGV4aGF1c3RlZCwgc3RvcCBsaXN0ZW5pbmcgdG8gaXQgYW5kIG1vdmUgb24uXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIG5leHRWYWx1ZVByb21pc2VzW2l0ZXJhYmxlTnJdID0gbnVsbDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFByb2R1Y2UgYWxsIGNvbWJpbmF0aW9ucyBvZiB0aGUgcmVjZWl2ZWQgdmFsdWUgd2l0aCB0aGUgbG9nZ2VkIHZhbHVlc1xuICAgIC8vIGZyb20gdGhlIG90aGVyIGl0ZXJhYmxlcy5cbiAgICBjb25zdCBhcnJheXMgPSBbLi4ubG9nc107XG4gICAgYXJyYXlzW2l0ZXJhYmxlTnJdID0gW3ZhbHVlXTtcbiAgICBjb25zdCBjb21iaW5hdGlvbnMgPSBjYXJ0ZXNpYW5BcnJheXMoYXJyYXlzKTtcblxuICAgIC8vIEFwcGVuZCB0aGUgcmVjZWl2ZWQgdmFsdWUgdG8gdGhlIHJpZ2h0IGxvZy5cbiAgICBsb2dzW2l0ZXJhYmxlTnJdID0gWy4uLmxvZ3NbaXRlcmFibGVOcl0sIHZhbHVlXTtcblxuICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBmb3IgdGhlIG5leHQgdmFsdWUgb2YgdGhpcyBpdGVyYWJsZS5cbiAgICBuZXh0VmFsdWVQcm9taXNlc1tpdGVyYWJsZU5yXSA9IGl0ZXJhdG9yc1tpdGVyYWJsZU5yXVxuICAgICAgLm5leHQoKVxuICAgICAgLnRoZW4oYXN5bmMgKHsgdmFsdWUsIGRvbmUgfSkgPT4gKHsgdmFsdWU6IGF3YWl0IHZhbHVlLCBkb25lIH0pKVxuICAgICAgLnRoZW4oKHsgdmFsdWUsIGRvbmUgfSkgPT4gKHsgdmFsdWUsIGRvbmUsIGl0ZXJhYmxlTnIgfSkpO1xuXG4gICAgLy8gWWllbGQgZWFjaCBvZiB0aGUgcHJvZHVjZWQgY29tYmluYXRpb25zIHNlcGFyYXRlbHkuXG4gICAgeWllbGQqIGNvbWJpbmF0aW9ucztcbiAgfVxufVxuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNzc1NlbGVjdG9yKHNlbGVjdG9yKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiogbWF0Y2hBbGwoc2NvcGUpIHtcbiAgICB5aWVsZCogc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvci52YWx1ZSk7XG4gIH07XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBXcmFwIGVhY2ggdGV4dCBub2RlIGluIGEgZ2l2ZW4gRE9NIFJhbmdlIHdpdGggYSA8bWFyaz4gb3Igb3RoZXIgZWxlbWVudC5cbi8vIEJyZWFrcyBzdGFydCBhbmQvb3IgZW5kIG5vZGUgaWYgbmVlZGVkLlxuLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2xlYW5zIHVwIHRoZSBjcmVhdGVkIGhpZ2hsaWdodCAobm90IGEgcGVyZmVjdCB1bmRvOiBzcGxpdCB0ZXh0IG5vZGVzIGFyZVxuLy8gbm90IG1lcmdlZCBhZ2FpbikuXG4vL1xuLy8gUGFyYW1ldGVyczpcbi8vIC0gcmFuZ2U6IGEgRE9NIFJhbmdlIG9iamVjdC4gTm90ZSB0aGF0IGFzIGhpZ2hsaWdodGluZyBtb2RpZmllcyB0aGUgRE9NLCB0aGUgcmFuZ2UgbWF5IGJlXG4vLyAgIHVudXNhYmxlIGFmdGVyd2FyZHNcbi8vIC0gdGFnTmFtZTogdGhlIGVsZW1lbnQgdXNlZCB0byB3cmFwIHRleHQgbm9kZXMuIERlZmF1bHRzIHRvICdtYXJrJy5cbi8vIC0gYXR0cmlidXRlczogYW4gT2JqZWN0IGRlZmluaW5nIGFueSBhdHRyaWJ1dGVzIHRvIGJlIHNldCBvbiB0aGUgd3JhcHBlciBlbGVtZW50cy5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHRSYW5nZShyYW5nZSwgdGFnTmFtZSA9ICdtYXJrJywgYXR0cmlidXRlcyA9IHt9KSB7XG4gIGlmIChyYW5nZS5jb2xsYXBzZWQpIHJldHVybjtcblxuICAvLyBGaXJzdCBwdXQgYWxsIG5vZGVzIGluIGFuIGFycmF5IChzcGxpdHMgc3RhcnQgYW5kIGVuZCBub2RlcyBpZiBuZWVkZWQpXG4gIGNvbnN0IG5vZGVzID0gdGV4dE5vZGVzSW5SYW5nZShyYW5nZSk7XG5cbiAgLy8gSGlnaGxpZ2h0IGVhY2ggbm9kZVxuICBjb25zdCBoaWdobGlnaHRFbGVtZW50cyA9IFtdO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBjb25zdCBoaWdobGlnaHRFbGVtZW50ID0gd3JhcE5vZGVJbkhpZ2hsaWdodChub2RlLCB0YWdOYW1lLCBhdHRyaWJ1dGVzKTtcbiAgICBoaWdobGlnaHRFbGVtZW50cy5wdXNoKGhpZ2hsaWdodEVsZW1lbnQpO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBjbGVhbnMgdXAgdGhlIGhpZ2hsaWdodEVsZW1lbnRzLlxuICBmdW5jdGlvbiByZW1vdmVIaWdobGlnaHRzKCkge1xuICAgIC8vIFJlbW92ZSBlYWNoIG9mIHRoZSBjcmVhdGVkIGhpZ2hsaWdodEVsZW1lbnRzLlxuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0SWR4IGluIGhpZ2hsaWdodEVsZW1lbnRzKSB7XG4gICAgICByZW1vdmVIaWdobGlnaHQoaGlnaGxpZ2h0RWxlbWVudHNbaGlnaGxpZ2h0SWR4XSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW1vdmVIaWdobGlnaHRzO1xufVxuXG4vLyBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIHRleHQgbm9kZXMgaW4gdGhlIHJhbmdlLiBTcGxpdCB0aGUgc3RhcnQgYW5kIGVuZCBub2RlcyBpZiByZXF1aXJlZC5cbmZ1bmN0aW9uIHRleHROb2Rlc0luUmFuZ2UocmFuZ2UpIHtcbiAgLy8gSWYgdGhlIHN0YXJ0IG9yIGVuZCBub2RlIGlzIGEgdGV4dCBub2RlIGFuZCBvbmx5IHBhcnRseSBpbiB0aGUgcmFuZ2UsIHNwbGl0IGl0LlxuICBpZiAocmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID4gMCkge1xuICAgIGNvbnN0IGVuZE9mZnNldCA9IHJhbmdlLmVuZE9mZnNldDsgLy8gKHRoaXMgbWF5IGdldCBsb3N0IHdoZW4gdGhlIHNwbGl0dGluZyB0aGUgbm9kZSlcbiAgICBjb25zdCBjcmVhdGVkTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnNwbGl0VGV4dChyYW5nZS5zdGFydE9mZnNldCk7XG4gICAgaWYgKHJhbmdlLmVuZENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIpIHtcbiAgICAgIC8vIElmIHRoZSBlbmQgd2FzIGluIHRoZSBzYW1lIGNvbnRhaW5lciwgaXQgd2lsbCBub3cgYmUgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgbm9kZS5cbiAgICAgIHJhbmdlLnNldEVuZChjcmVhdGVkTm9kZSwgZW5kT2Zmc2V0IC0gcmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICAgIH1cbiAgICByYW5nZS5zZXRTdGFydChjcmVhdGVkTm9kZSwgMCk7XG4gIH1cbiAgaWYgKFxuICAgIHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREVcbiAgICAmJiByYW5nZS5lbmRPZmZzZXQgPCByYW5nZS5lbmRDb250YWluZXIubGVuZ3RoXG4gICkge1xuICAgIHJhbmdlLmVuZENvbnRhaW5lci5zcGxpdFRleHQocmFuZ2UuZW5kT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIENvbGxlY3QgdGhlIHRleHQgbm9kZXMuXG4gIGNvbnN0IHdhbGtlciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm93bmVyRG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcixcbiAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVCxcbiAgICBub2RlID0+IHJhbmdlLmludGVyc2VjdHNOb2RlKG5vZGUpID8gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfUkVKRUNULFxuICApO1xuICB3YWxrZXIuY3VycmVudE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcblxuICAvLyAvLyBPcHRpbWlzZSBieSBza2lwcGluZyBub2RlcyB0aGF0IGFyZSBleHBsaWNpdGx5IG91dHNpZGUgdGhlIHJhbmdlLlxuICAvLyBjb25zdCBOb2RlVHlwZXNXaXRoQ2hhcmFjdGVyT2Zmc2V0ID0gW1xuICAvLyAgTm9kZS5URVhUX05PREUsXG4gIC8vICBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSxcbiAgLy8gIE5vZGUuQ09NTUVOVF9OT0RFLFxuICAvLyBdO1xuICAvLyBpZiAoIU5vZGVUeXBlc1dpdGhDaGFyYWN0ZXJPZmZzZXQuaW5jbHVkZXMocmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUpKSB7XG4gIC8vICAgaWYgKHJhbmdlLnN0YXJ0T2Zmc2V0IDwgcmFuZ2Uuc3RhcnRDb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgLy8gICAgIHdhbGtlci5jdXJyZW50Tm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICB3YWxrZXIubmV4dFNpYmxpbmcoKTsgLy8gVE9ETyB2ZXJpZnkgdGhpcyBpcyBjb3JyZWN0LlxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGNvbnN0IG5vZGVzID0gW107XG4gIGlmICh3YWxrZXIuY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKVxuICAgIG5vZGVzLnB1c2god2Fsa2VyLmN1cnJlbnROb2RlKTtcbiAgd2hpbGUgKHdhbGtlci5uZXh0Tm9kZSgpICYmIHJhbmdlLmNvbXBhcmVQb2ludCh3YWxrZXIuY3VycmVudE5vZGUsIDApICE9PSAxKVxuICAgIG5vZGVzLnB1c2god2Fsa2VyLmN1cnJlbnROb2RlKTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuXG4vLyBSZXBsYWNlIFtub2RlXSB3aXRoIDx0YWdOYW1lIC4uLmF0dHJpYnV0ZXM+W25vZGVdPC90YWdOYW1lPlxuZnVuY3Rpb24gd3JhcE5vZGVJbkhpZ2hsaWdodChub2RlLCB0YWdOYW1lLCBhdHRyaWJ1dGVzKSB7XG4gIGNvbnN0IGhpZ2hsaWdodEVsZW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGhpZ2hsaWdodEVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG4gIGNvbnN0IHRlbXBSYW5nZSA9IG5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICB0ZW1wUmFuZ2Uuc2VsZWN0Tm9kZShub2RlKTtcbiAgdGVtcFJhbmdlLnN1cnJvdW5kQ29udGVudHMoaGlnaGxpZ2h0RWxlbWVudCk7XG4gIHJldHVybiBoaWdobGlnaHRFbGVtZW50O1xufVxuXG4vLyBSZW1vdmUgYSBoaWdobGlnaHQgZWxlbWVudCBjcmVhdGVkIHdpdGggd3JhcE5vZGVJbkhpZ2hsaWdodC5cbmZ1bmN0aW9uIHJlbW92ZUhpZ2hsaWdodChoaWdobGlnaHRFbGVtZW50KSB7XG4gIGlmIChoaWdobGlnaHRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgaGlnaGxpZ2h0RWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChoaWdobGlnaHRFbGVtZW50LmZpcnN0Q2hpbGQsIGhpZ2hsaWdodEVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZSBoaWdobGlnaHQgc29tZWhvdyBjb250YWlucyBtdWx0aXBsZSBub2RlcyBub3csIG1vdmUgdGhlbSBhbGwuXG4gICAgd2hpbGUgKGhpZ2hsaWdodEVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgaGlnaGxpZ2h0RWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShoaWdobGlnaHRFbGVtZW50LmZpcnN0Q2hpbGQsIGhpZ2hsaWdodEVsZW1lbnQpO1xuICAgIH1cbiAgICBoaWdobGlnaHRFbGVtZW50LnJlbW92ZSgpO1xuICB9XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2Nzcyc7XG5leHBvcnQgKiBmcm9tICcuL3JhbmdlJztcbmV4cG9ydCAqIGZyb20gJy4vdGV4dC1xdW90ZSc7XG5leHBvcnQgKiBmcm9tICcuL2hpZ2hsaWdodC1yYW5nZSc7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBvd25lckRvY3VtZW50IH0gZnJvbSAnLi9zY29wZS5qcyc7XG5pbXBvcnQgeyBwcm9kdWN0IH0gZnJvbSAnLi9jYXJ0ZXNpYW4uanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmFuZ2VTZWxlY3RvckNyZWF0b3IoY3JlYXRlU2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlU2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydFNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3Ioc2VsZWN0b3Iuc3RhcnRTZWxlY3Rvcik7XG4gICAgY29uc3QgZW5kU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihzZWxlY3Rvci5lbmRTZWxlY3Rvcik7XG5cbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIG1hdGNoQWxsKHNjb3BlKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IG93bmVyRG9jdW1lbnQoc2NvcGUpO1xuXG4gICAgICBjb25zdCBzdGFydE1hdGNoZXMgPSBzdGFydFNlbGVjdG9yKHNjb3BlKTtcbiAgICAgIGNvbnN0IGVuZE1hdGNoZXMgPSBlbmRTZWxlY3RvcihzY29wZSk7XG5cbiAgICAgIGNvbnN0IHBhaXJzID0gcHJvZHVjdChzdGFydE1hdGNoZXMsIGVuZE1hdGNoZXMpO1xuXG4gICAgICBmb3IgYXdhaXQgKGxldCBbc3RhcnQsIGVuZF0gb2YgcGFpcnMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICByZXN1bHQuc2V0U3RhcnQoc3RhcnQuZW5kQ29udGFpbmVyLCBzdGFydC5lbmRPZmZzZXQpO1xuICAgICAgICByZXN1bHQuc2V0RW5kKGVuZC5zdGFydENvbnRhaW5lciwgZW5kLnN0YXJ0T2Zmc2V0KTtcblxuICAgICAgICBpZiAoIXJlc3VsdC5jb2xsYXBzZWQpIHlpZWxkIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG93bmVyRG9jdW1lbnQoc2NvcGUpIHtcbiAgaWYgKCdjb21tb25BbmNlc3RvckNvbnRhaW5lcicgaW4gc2NvcGUpIHtcbiAgICByZXR1cm4gc2NvcGUuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudDtcbiAgfVxuXG4gIHJldHVybiBzY29wZS5vd25lckRvY3VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tU2NvcGUoc2NvcGUpIHtcbiAgaWYgKCdjb21tb25BbmNlc3RvckNvbnRhaW5lcicgaW4gc2NvcGUpIHtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IHNjb3BlLm93bmVyRG9jdW1lbnQ7XG4gIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoc2NvcGUpO1xuXG4gIHJldHVybiByYW5nZTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBjcmVhdGVOb2RlSXRlcmF0b3IgZnJvbSAnZG9tLW5vZGUtaXRlcmF0b3InO1xuaW1wb3J0IHNlZWsgZnJvbSAnZG9tLXNlZWsnO1xuXG5pbXBvcnQgeyBvd25lckRvY3VtZW50LCByYW5nZUZyb21TY29wZSB9IGZyb20gJy4vc2NvcGUuanMnO1xuXG4vLyBOb2RlIGNvbnN0YW50c1xuY29uc3QgVEVYVF9OT0RFID0gMztcblxuLy8gTm9kZUZpbHRlciBjb25zdGFudHNcbmNvbnN0IFNIT1dfVEVYVCA9IDQ7XG5cbmZ1bmN0aW9uIGZpcnN0VGV4dE5vZGVJblJhbmdlKHJhbmdlKSB7XG4gIGNvbnN0IHsgc3RhcnRDb250YWluZXIgfSA9IHJhbmdlO1xuXG4gIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSByZXR1cm4gc3RhcnRDb250YWluZXI7XG5cbiAgY29uc3Qgcm9vdCA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuICBjb25zdCBpdGVyID0gY3JlYXRlTm9kZUl0ZXJhdG9yKHJvb3QsIFNIT1dfVEVYVCk7XG4gIHJldHVybiBpdGVyLm5leHROb2RlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUZXh0UXVvdGVTZWxlY3RvcihzZWxlY3Rvcikge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIG1hdGNoQWxsKHNjb3BlKSB7XG4gICAgY29uc3QgZG9jdW1lbnQgPSBvd25lckRvY3VtZW50KHNjb3BlKTtcbiAgICBjb25zdCByYW5nZSA9IHJhbmdlRnJvbVNjb3BlKHNjb3BlKTtcbiAgICBjb25zdCByb290ID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgY29uc3QgdGV4dCA9IHJhbmdlLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCBleGFjdCA9IHNlbGVjdG9yLmV4YWN0O1xuICAgIGNvbnN0IHByZWZpeCA9IHNlbGVjdG9yLnByZWZpeCB8fCAnJztcbiAgICBjb25zdCBzdWZmaXggPSBzZWxlY3Rvci5zdWZmaXggfHwgJyc7XG4gICAgY29uc3QgcGF0dGVybiA9IHByZWZpeCArIGV4YWN0ICsgc3VmZml4O1xuXG4gICAgY29uc3QgaXRlciA9IGNyZWF0ZU5vZGVJdGVyYXRvcihyb290LCBTSE9XX1RFWFQpO1xuXG4gICAgbGV0IGZyb21JbmRleCA9IDA7XG4gICAgbGV0IHJlZmVyZW5jZU5vZGVJbmRleCA9IDA7XG5cbiAgICBpZiAocmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgcmVmZXJlbmNlTm9kZUluZGV4IC09IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH1cblxuICAgIHdoaWxlIChmcm9tSW5kZXggPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgcGF0dGVyblN0YXJ0SW5kZXggPSB0ZXh0LmluZGV4T2YocGF0dGVybiwgZnJvbUluZGV4KTtcbiAgICAgIGlmIChwYXR0ZXJuU3RhcnRJbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICBjb25zdCBtYXRjaFN0YXJ0SW5kZXggPSBwYXR0ZXJuU3RhcnRJbmRleCArIHByZWZpeC5sZW5ndGg7XG4gICAgICBjb25zdCBtYXRjaEVuZEluZGV4ID0gbWF0Y2hTdGFydEluZGV4ICsgZXhhY3QubGVuZ3RoO1xuXG4gICAgICAvLyBTZWVrIHRvIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2guXG4gICAgICByZWZlcmVuY2VOb2RlSW5kZXggKz0gc2VlayhpdGVyLCBtYXRjaFN0YXJ0SW5kZXggLSByZWZlcmVuY2VOb2RlSW5kZXgpO1xuXG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHJlZmVyZW5jZSB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoLlxuICAgICAgaWYgKCFpdGVyLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgIC8vIFBlZWsgZm9yd2FyZCBhbmQgc2tpcCBvdmVyIGFueSBlbXB0eSBub2Rlcy5cbiAgICAgICAgaWYgKGl0ZXIubmV4dE5vZGUoKSkge1xuICAgICAgICAgIHdoaWxlIChpdGVyLnJlZmVyZW5jZU5vZGUubm9kZVZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaXRlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRoZSBpdGVyYXRvciBub3cgcG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIHJlZmVyZW5jZSBub2RlLlxuICAgICAgICAgIC8vIE1vdmUgdGhlIGl0ZXJhdG9yIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSByZWZlcmVuY2Ugbm9kZS5cbiAgICAgICAgICBpdGVyLnByZXZpb3VzTm9kZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY29yZCB0aGUgc3RhcnQgY29udGFpbmVyIGFuZCBvZmZzZXQuXG4gICAgICBtYXRjaC5zZXRTdGFydChpdGVyLnJlZmVyZW5jZU5vZGUsIG1hdGNoU3RhcnRJbmRleCAtIHJlZmVyZW5jZU5vZGVJbmRleCk7XG5cbiAgICAgIC8vIFNlZWsgdG8gdGhlIGVuZCBvZiB0aGUgbWF0Y2guXG4gICAgICByZWZlcmVuY2VOb2RlSW5kZXggKz0gc2VlayhpdGVyLCBtYXRjaEVuZEluZGV4IC0gcmVmZXJlbmNlTm9kZUluZGV4KTtcblxuICAgICAgLy8gTm9ybWFsaXplIHRoZSByZWZlcmVuY2UgdG8gdGhlIGVuZCBvZiB0aGUgbWF0Y2guXG4gICAgICBpZiAoIWl0ZXIucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUpIHtcbiAgICAgICAgLy8gUGVlayBmb3J3YXJkIGFuZCBza2lwIG92ZXIgYW55IGVtcHR5IG5vZGVzLlxuICAgICAgICBpZiAoaXRlci5uZXh0Tm9kZSgpKSB7XG4gICAgICAgICAgd2hpbGUgKGl0ZXIucmVmZXJlbmNlTm9kZS5ub2RlVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpdGVyLm5leHROb2RlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVGhlIGl0ZXJhdG9yIG5vdyBwb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgcmVmZXJlbmNlIG5vZGUuXG4gICAgICAgICAgLy8gTW92ZSB0aGUgaXRlcmF0b3IgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIHJlZmVyZW5jZSBub2RlLlxuICAgICAgICAgIGl0ZXIucHJldmlvdXNOb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYXliZSBzZWVrIGJhY2t3YXJkcyB0byB0aGUgc3RhcnQgb2YgdGhlIG5vZGUuXG4gICAgICAgIHJlZmVyZW5jZU5vZGVJbmRleCArPSBzZWVrKGl0ZXIsIGl0ZXIucmVmZXJlbmNlTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY29yZCB0aGUgZW5kIGNvbnRhaW5lciBhbmQgb2Zmc2V0LlxuICAgICAgbWF0Y2guc2V0RW5kKGl0ZXIucmVmZXJlbmNlTm9kZSwgbWF0Y2hFbmRJbmRleCAtIHJlZmVyZW5jZU5vZGVJbmRleCk7XG5cbiAgICAgIC8vIFlpZWxkIHRoZSBtYXRjaC5cbiAgICAgIHlpZWxkIG1hdGNoO1xuXG4gICAgICAvLyBBZHZhbmNlIHRoZSBzZWFyY2ggZm9yd2FyZC5cbiAgICAgIGZyb21JbmRleCA9IG1hdGNoU3RhcnRJbmRleCArIDE7XG4gICAgICByZWZlcmVuY2VOb2RlSW5kZXggKz0gc2VlayhpdGVyLCBmcm9tSW5kZXggLSByZWZlcmVuY2VOb2RlSW5kZXgpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2NyaWJlVGV4dFF1b3RlKHJhbmdlLCBzY29wZSA9IG51bGwpIHtcbiAgc2NvcGUgPSByYW5nZUZyb21TY29wZShzY29wZSB8fCBvd25lckRvY3VtZW50KHJhbmdlKS5kb2N1bWVudEVsZW1lbnQpO1xuXG4gIGNvbnN0IHJvb3QgPSBzY29wZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgY29uc3QgdGV4dCA9IHNjb3BlLnRvU3RyaW5nKCk7XG5cbiAgY29uc3QgZXhhY3QgPSByYW5nZS50b1N0cmluZygpO1xuICBjb25zdCBzZWxlY3RvciA9IGNyZWF0ZVRleHRRdW90ZVNlbGVjdG9yKHsgZXhhY3QgfSk7XG5cbiAgY29uc3QgaXRlciA9IGNyZWF0ZU5vZGVJdGVyYXRvcihyb290LCBTSE9XX1RFWFQpO1xuXG4gIGNvbnN0IHN0YXJ0Tm9kZSA9IGZpcnN0VGV4dE5vZGVJblJhbmdlKHJhbmdlKTtcbiAgY29uc3Qgc3RhcnRJbmRleCA9XG4gICAgcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IFRFWFRfTk9ERVxuICAgICAgPyBzZWVrKGl0ZXIsIHN0YXJ0Tm9kZSkgKyByYW5nZS5zdGFydE9mZnNldFxuICAgICAgOiBzZWVrKGl0ZXIsIHN0YXJ0Tm9kZSk7XG4gIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIGV4YWN0Lmxlbmd0aDtcblxuICBjb25zdCBhZmZpeExlbmd0aFBhaXJzID0gW107XG5cbiAgZm9yIGF3YWl0IChjb25zdCBtYXRjaCBvZiBzZWxlY3RvcihzY29wZSkpIHtcbiAgICBjb25zdCBtYXRjaEl0ZXIgPSBjcmVhdGVOb2RlSXRlcmF0b3Iocm9vdCwgU0hPV19URVhUKTtcblxuICAgIGNvbnN0IG1hdGNoU3RhcnROb2RlID0gZmlyc3RUZXh0Tm9kZUluUmFuZ2UobWF0Y2gpO1xuICAgIGNvbnN0IG1hdGNoU3RhcnRJbmRleCA9XG4gICAgICBtYXRjaC5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFXG4gICAgICAgID8gc2VlayhtYXRjaEl0ZXIsIG1hdGNoU3RhcnROb2RlKSArIG1hdGNoLnN0YXJ0T2Zmc2V0XG4gICAgICAgIDogc2VlayhtYXRjaEl0ZXIsIG1hdGNoU3RhcnROb2RlKTtcbiAgICBjb25zdCBtYXRjaEVuZEluZGV4ID0gbWF0Y2hTdGFydEluZGV4ICsgbWF0Y2gudG9TdHJpbmcoKS5sZW5ndGg7XG5cbiAgICAvLyBJZiB0aGUgbWF0Y2ggaXMgdGhlIHNhbWUgYXMgdGhlIGlucHV0IHJhbmdlLCBjb250aW51ZS5cbiAgICBpZiAobWF0Y2hTdGFydEluZGV4ID09PSBzdGFydEluZGV4IHx8IG1hdGNoRW5kSW5kZXggPT09IGVuZEluZGV4KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgaG93IG1hbnkgcHJlZml4IGNoYXJhY3RlcnMgYXJlIHNoYXJlZC5cbiAgICBjb25zdCBwcmVmaXhMZW5ndGggPSBvdmVybGFwUmlnaHQoXG4gICAgICB0ZXh0LnN1YnN0cmluZygwLCBtYXRjaFN0YXJ0SW5kZXgpLFxuICAgICAgdGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCksXG4gICAgKTtcblxuICAgIC8vIERldGVybWluZSBob3cgbWFueSBzdWZmaXggY2hhcmFjdGVycyBhcmUgc2hhcmVkLlxuICAgIGNvbnN0IHN1ZmZpeExlbmd0aCA9IG92ZXJsYXAoXG4gICAgICB0ZXh0LnN1YnN0cmluZyhtYXRjaEVuZEluZGV4KSxcbiAgICAgIHRleHQuc3Vic3RyaW5nKGVuZEluZGV4KSxcbiAgICApO1xuXG4gICAgLy8gUmVjb3JkIHRoZSBhZmZpeCBsZW5ndGhzIHRoYXQgd291bGQgaGF2ZSBwcmVjbHVkZWQgdGhpcyBtYXRjaC5cbiAgICBhZmZpeExlbmd0aFBhaXJzLnB1c2goW3ByZWZpeExlbmd0aCArIDEsIHN1ZmZpeExlbmd0aCArIDFdKTtcbiAgfVxuXG4gIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIGFuIHVuYW1iaWd1b3VzIHNlbGVjdG9yLlxuICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsIGV4YWN0IH07XG5cbiAgaWYgKGFmZml4TGVuZ3RoUGFpcnMubGVuZ3RoKSB7XG4gICAgY29uc3QgW3ByZWZpeExlbmd0aCwgc3VmZml4TGVuZ3RoXSA9IG1pbmltYWxTb2x1dGlvbihhZmZpeExlbmd0aFBhaXJzKTtcblxuICAgIGlmIChwcmVmaXhMZW5ndGggPiAwICYmIHN0YXJ0SW5kZXggPiAwKSB7XG4gICAgICByZXN1bHQucHJlZml4ID0gdGV4dC5zdWJzdHJpbmcoc3RhcnRJbmRleCAtIHByZWZpeExlbmd0aCwgc3RhcnRJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKHN1ZmZpeExlbmd0aCA+IDAgJiYgZW5kSW5kZXggPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgcmVzdWx0LnN1ZmZpeCA9IHRleHQuc3Vic3RyaW5nKGVuZEluZGV4LCBlbmRJbmRleCArIHN1ZmZpeExlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gb3ZlcmxhcCh0ZXh0MSwgdGV4dDIpIHtcbiAgbGV0IGNvdW50ID0gMDtcblxuICB3aGlsZSAoY291bnQgPCB0ZXh0MS5sZW5ndGggJiYgY291bnQgPCB0ZXh0Mi5sZW5ndGgpIHtcbiAgICBjb25zdCBjMSA9IHRleHQxW2NvdW50XTtcbiAgICBjb25zdCBjMiA9IHRleHQyW2NvdW50XTtcbiAgICBpZiAoYzEgIT09IGMyKSBicmVhaztcbiAgICBjb3VudCsrO1xuICB9XG5cbiAgcmV0dXJuIGNvdW50O1xufVxuXG5mdW5jdGlvbiBvdmVybGFwUmlnaHQodGV4dDEsIHRleHQyKSB7XG4gIGxldCBjb3VudCA9IDA7XG5cbiAgd2hpbGUgKGNvdW50IDwgdGV4dDEubGVuZ3RoICYmIGNvdW50IDwgdGV4dDIubGVuZ3RoKSB7XG4gICAgY29uc3QgYzEgPSB0ZXh0MVt0ZXh0MS5sZW5ndGggLSAxIC0gY291bnRdO1xuICAgIGNvbnN0IGMyID0gdGV4dDJbdGV4dDIubGVuZ3RoIC0gMSAtIGNvdW50XTtcbiAgICBpZiAoYzEgIT09IGMyKSBicmVhaztcbiAgICBjb3VudCsrO1xuICB9XG5cbiAgcmV0dXJuIGNvdW50O1xufVxuXG5mdW5jdGlvbiBtaW5pbWFsU29sdXRpb24ocmVxdWlyZW1lbnRzKSB7XG4gIC8vIEJ1aWxkIGFsbCB0aGUgcGFpcnMgYW5kIG9yZGVyIHRoZW0gYnkgdGhlaXIgc3Vtcy5cbiAgY29uc3QgcGFpcnMgPSByZXF1aXJlbWVudHMuZmxhdE1hcChsID0+IHJlcXVpcmVtZW50cy5tYXAociA9PiBbbFswXSwgclsxXV0pKTtcbiAgcGFpcnMuc29ydCgoYSwgYikgPT4gYVswXSArIGFbMV0gLSAoYlswXSArIGJbMV0pKTtcblxuICAvLyBGaW5kIHRoZSBmaXJzdCBwYWlyIHRoYXQgc2F0aXNmaWVzIGV2ZXJ5IHJlcXVpcmVtZW50LlxuICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICBjb25zdCBbcDAsIHAxXSA9IHBhaXI7XG4gICAgaWYgKHJlcXVpcmVtZW50cy5ldmVyeSgoW3IwLCByMV0pID0+IHIwIDw9IHAwIHx8IHIxIDw9IHAxKSkge1xuICAgICAgcmV0dXJuIHBhaXI7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBsYXJnZXN0IHBhaXJpbmcgKHVucmVhY2hhYmxlKS5cbiAgcmV0dXJuIHBhaXJzW3BhaXJzLmxlbmd0aCAtIDFdO1xufVxuIiwiLy8gR2VuZXJhdGVkIGJ5IFBFRy5qcyB2MC4xMS4wLW1hc3Rlci5mNjkyMzlkLCBodHRwczovL3BlZ2pzLm9yZy9cblxuZnVuY3Rpb24gcGVnJHN1YmNsYXNzKGNoaWxkLCBwYXJlbnQpIHtcbiAgZnVuY3Rpb24gQygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9XG4gIEMucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcbiAgY2hpbGQucHJvdG90eXBlID0gbmV3IEMoKTtcbn1cblxuZnVuY3Rpb24gcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIGV4cGVjdGVkLCBmb3VuZCwgbG9jYXRpb24pIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICB0aGlzLmZvdW5kID0gZm91bmQ7XG4gIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgdGhpcy5uYW1lID0gXCJTeW50YXhFcnJvclwiO1xuXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIGlmICh0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHBlZyRTeW50YXhFcnJvcik7XG4gIH1cbn1cblxucGVnJHN1YmNsYXNzKHBlZyRTeW50YXhFcnJvciwgRXJyb3IpO1xuXG5wZWckU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlID0gZnVuY3Rpb24oZXhwZWN0ZWQsIGZvdW5kKSB7XG4gIHZhciBERVNDUklCRV9FWFBFQ1RBVElPTl9GTlMgPSB7XG4gICAgbGl0ZXJhbDogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgIHJldHVybiBcIlxcXCJcIiArIGxpdGVyYWxFc2NhcGUoZXhwZWN0YXRpb24udGV4dCkgKyBcIlxcXCJcIjtcbiAgICB9LFxuXG4gICAgY2xhc3M6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgICB2YXIgZXNjYXBlZFBhcnRzID0gZXhwZWN0YXRpb24ucGFydHMubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydClcbiAgICAgICAgICA/IGNsYXNzRXNjYXBlKHBhcnRbMF0pICsgXCItXCIgKyBjbGFzc0VzY2FwZShwYXJ0WzFdKVxuICAgICAgICAgIDogY2xhc3NFc2NhcGUocGFydCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFwiW1wiICsgKGV4cGVjdGF0aW9uLmludmVydGVkID8gXCJeXCIgOiBcIlwiKSArIGVzY2FwZWRQYXJ0cyArIFwiXVwiO1xuICAgIH0sXG5cbiAgICBhbnk6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgIH0sXG5cbiAgICBlbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiZW5kIG9mIGlucHV0XCI7XG4gICAgfSxcblxuICAgIG90aGVyOiBmdW5jdGlvbihleHBlY3RhdGlvbikge1xuICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uLmRlc2NyaXB0aW9uO1xuICAgIH0sXG5cbiAgICBub3Q6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgICByZXR1cm4gXCJub3QgXCIgKyBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGF0aW9uLmV4cGVjdGVkKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gaGV4KGNoKSB7XG4gICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXRlcmFsRXNjYXBlKHMpIHtcbiAgICByZXR1cm4gc1xuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgICAgLnJlcGxhY2UoL1wiL2csICBcIlxcXFxcXFwiXCIpXG4gICAgICAucmVwbGFjZSgvXFwwL2csIFwiXFxcXDBcIilcbiAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpXG4gICAgICAucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIilcbiAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgIGZ1bmN0aW9uKGNoKSB7IHJldHVybiBcIlxcXFx4MFwiICsgaGV4KGNoKTsgfSlcbiAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgZnVuY3Rpb24oY2gpIHsgcmV0dXJuIFwiXFxcXHhcIiAgKyBoZXgoY2gpOyB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHMpIHtcbiAgICByZXR1cm4gc1xuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgICAgLnJlcGxhY2UoL1xcXS9nLCBcIlxcXFxdXCIpXG4gICAgICAucmVwbGFjZSgvXFxeL2csIFwiXFxcXF5cIilcbiAgICAgIC5yZXBsYWNlKC8tL2csICBcIlxcXFwtXCIpXG4gICAgICAucmVwbGFjZSgvXFwwL2csIFwiXFxcXDBcIilcbiAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpXG4gICAgICAucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIilcbiAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgIGZ1bmN0aW9uKGNoKSB7IHJldHVybiBcIlxcXFx4MFwiICsgaGV4KGNoKTsgfSlcbiAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgZnVuY3Rpb24oY2gpIHsgcmV0dXJuIFwiXFxcXHhcIiAgKyBoZXgoY2gpOyB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb24pIHtcbiAgICByZXR1cm4gREVTQ1JJQkVfRVhQRUNUQVRJT05fRk5TW2V4cGVjdGF0aW9uLnR5cGVdKGV4cGVjdGF0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0ZWQoZXhwZWN0ZWQpIHtcbiAgICB2YXIgZGVzY3JpcHRpb25zID0gZXhwZWN0ZWQubWFwKGRlc2NyaWJlRXhwZWN0YXRpb24pO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZGVzY3JpcHRpb25zLnNvcnQoKTtcblxuICAgIGlmIChkZXNjcmlwdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChpID0gMSwgaiA9IDE7IGkgPCBkZXNjcmlwdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1tpIC0gMV0gIT09IGRlc2NyaXB0aW9uc1tpXSkge1xuICAgICAgICAgIGRlc2NyaXB0aW9uc1tqXSA9IGRlc2NyaXB0aW9uc1tpXTtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlc2NyaXB0aW9ucy5sZW5ndGggPSBqO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZGVzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zWzBdO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF0gKyBcIiBvciBcIiArIGRlc2NyaXB0aW9uc1sxXTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9ucy5zbGljZSgwLCAtMSkuam9pbihcIiwgXCIpXG4gICAgICAgICAgKyBcIiwgb3IgXCJcbiAgICAgICAgICArIGRlc2NyaXB0aW9uc1tkZXNjcmlwdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzY3JpYmVGb3VuZChmb3VuZCkge1xuICAgIHJldHVybiBmb3VuZCA/IFwiXFxcIlwiICsgbGl0ZXJhbEVzY2FwZShmb3VuZCkgKyBcIlxcXCJcIiA6IFwiZW5kIG9mIGlucHV0XCI7XG4gIH1cblxuICByZXR1cm4gXCJFeHBlY3RlZCBcIiArIGRlc2NyaWJlRXhwZWN0ZWQoZXhwZWN0ZWQpICsgXCIgYnV0IFwiICsgZGVzY3JpYmVGb3VuZChmb3VuZCkgKyBcIiBmb3VuZC5cIjtcbn07XG5cbmZ1bmN0aW9uIHBlZyRwYXJzZShpbnB1dCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucyA6IHt9O1xuXG4gIHZhciBwZWckRkFJTEVEID0ge307XG5cbiAgdmFyIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMgPSB7IHN0YXJ0OiBwZWckcGFyc2VzdGFydCB9O1xuICB2YXIgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHBhcnNlc3RhcnQ7XG5cbiAgdmFyIHBlZyRjMCA9IFwic3RhdGVcIjtcbiAgdmFyIHBlZyRjMSA9IFwiKFwiO1xuICB2YXIgcGVnJGMyID0gXCIpXCI7XG4gIHZhciBwZWckYzMgPSBcInNlbGVjdG9yXCI7XG4gIHZhciBwZWckYzQgPSBcInN0YXRlPVwiO1xuICB2YXIgcGVnJGM1ID0gXCJzZWxlY3Rvcj1cIjtcbiAgdmFyIHBlZyRjNiA9IFwiLFwiO1xuICB2YXIgcGVnJGM3ID0gXCJyZWZpbmVkQnk9c2VsZWN0b3IoXCI7XG4gIHZhciBwZWckYzggPSBcInJlZmluZWRCeT1zdGF0ZShcIjtcbiAgdmFyIHBlZyRjOSA9IFwic3RhcnRTZWxlY3Rvcj1zZWxlY3RvcihcIjtcbiAgdmFyIHBlZyRjMTAgPSBcImVuZFNlbGVjdG9yPXNlbGVjdG9yKFwiO1xuICB2YXIgcGVnJGMxMSA9IFwiPVwiO1xuXG4gIHZhciBwZWckcjAgPSAvXlthLXpBLVowLTk8PlxcL1tcXF06JStALlxcLSEkJjsqX10vO1xuXG4gIHZhciBwZWckZTAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwic3RhdGVcIiwgZmFsc2UpO1xuICB2YXIgcGVnJGUxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIihcIiwgZmFsc2UpO1xuICB2YXIgcGVnJGUyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIilcIiwgZmFsc2UpO1xuICB2YXIgcGVnJGUzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInNlbGVjdG9yXCIsIGZhbHNlKTtcbiAgdmFyIHBlZyRlNCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJzdGF0ZT1cIiwgZmFsc2UpO1xuICB2YXIgcGVnJGU1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInNlbGVjdG9yPVwiLCBmYWxzZSk7XG4gIHZhciBwZWckZTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSk7XG4gIHZhciBwZWckZTcgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwicmVmaW5lZEJ5PXNlbGVjdG9yKFwiLCBmYWxzZSk7XG4gIHZhciBwZWckZTggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwicmVmaW5lZEJ5PXN0YXRlKFwiLCBmYWxzZSk7XG4gIHZhciBwZWckZTkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwic3RhcnRTZWxlY3Rvcj1zZWxlY3RvcihcIiwgZmFsc2UpO1xuICB2YXIgcGVnJGUxMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJlbmRTZWxlY3Rvcj1zZWxlY3RvcihcIiwgZmFsc2UpO1xuICB2YXIgcGVnJGUxMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKTtcbiAgdmFyIHBlZyRlMTIgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiYVwiLCBcInpcIl0sIFtcIkFcIiwgXCJaXCJdLCBbXCIwXCIsIFwiOVwiXSwgXCI8XCIsIFwiPlwiLCBcIi9cIiwgXCJbXCIsIFwiXVwiLCBcIjpcIiwgXCIlXCIsIFwiK1wiLCBcIkBcIiwgXCIuXCIsIFwiLVwiLCBcIiFcIiwgXCIkXCIsIFwiJlwiLCBcIjtcIiwgXCIqXCIsIFwiX1wiXSwgZmFsc2UsIGZhbHNlKTtcblxuICB2YXIgcGVnJGYwID0gZnVuY3Rpb24ocCkgeyByZXR1cm4geyBzdGF0ZTogcCB9IH07XG4gIHZhciBwZWckZjEgPSBmdW5jdGlvbihwKSB7IHJldHVybiB7IHNlbGVjdG9yOiBwIH0gfTtcbiAgdmFyIHBlZyRmMiA9IGZ1bmN0aW9uKHYpIHsgcmV0dXJuIHsgc3RhdGU6IHYgfSB9O1xuICB2YXIgcGVnJGYzID0gZnVuY3Rpb24odikgeyByZXR1cm4geyBzZWxlY3RvcjogdiB9IH07XG4gIHZhciBwZWckZjQgPSBmdW5jdGlvbihrMSwgazIpIHtcbiAgICAgICAgICAgICAgdmFyIGYgPSBrMTtcbiAgICAgICAgICAgICAgZm9yKCB2YXIgaSA9IDA7IGkgPCBrMi5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgICAgICAgICAgIGYgPSBjb2xsZWN0KGYsIGsyW2ldWzFdKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgIH07XG4gIHZhciBwZWckZjUgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHJlZmluZWRCeTogcCB9XG4gICAgICAgICAgIH07XG4gIHZhciBwZWckZjYgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0U2VsZWN0b3I6IHAgfTtcbiAgICAgICAgICB9O1xuICB2YXIgcGVnJGY3ID0gZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgICByZXR1cm4geyBlbmRTZWxlY3RvcjogcCB9O1xuICAgICAgICAgIH07XG4gIHZhciBwZWckZjggPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhciBmID0ge307XG4gICAgICAgICAgICAgIHZhciBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICBmW2tleV0gPSBpc05hTihudW0pID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTogbnVtO1xuICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICB9O1xuICB2YXIgcGVnJGY5ID0gZnVuY3Rpb24oY2hhcnMpIHsgcmV0dXJuIGNoYXJzLmpvaW4oXCJcIik7IH07XG5cbiAgdmFyIHBlZyRjdXJyUG9zID0gMDtcbiAgdmFyIHBlZyRzYXZlZFBvcyA9IDA7XG4gIHZhciBwZWckcG9zRGV0YWlsc0NhY2hlID0gW3sgbGluZTogMSwgY29sdW1uOiAxIH1dO1xuICB2YXIgcGVnJGV4cGVjdGVkID0gW107XG4gIHZhciBwZWckc2lsZW50RmFpbHMgPSAwO1xuXG4gIHZhciBwZWckcmVzdWx0O1xuXG4gIGlmIChcInN0YXJ0UnVsZVwiIGluIG9wdGlvbnMpIHtcbiAgICBpZiAoIShvcHRpb25zLnN0YXJ0UnVsZSBpbiBwZWckc3RhcnRSdWxlRnVuY3Rpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3Qgc3RhcnQgcGFyc2luZyBmcm9tIHJ1bGUgXFxcIlwiICsgb3B0aW9ucy5zdGFydFJ1bGUgKyBcIlxcXCIuXCIpO1xuICAgIH1cblxuICAgIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiA9IHBlZyRzdGFydFJ1bGVGdW5jdGlvbnNbb3B0aW9ucy5zdGFydFJ1bGVdO1xuICB9XG5cbiAgZnVuY3Rpb24gdGV4dCgpIHtcbiAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gb2Zmc2V0KCkge1xuICAgIHJldHVybiBwZWckc2F2ZWRQb3M7XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZSgpIHtcbiAgICByZXR1cm4gW3BlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3NdO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYXRpb24oKSB7XG4gICAgcmV0dXJuIHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RlZChkZXNjcmlwdGlvbiwgbG9jYXRpb24pIHtcbiAgICBsb2NhdGlvbiA9IGxvY2F0aW9uICE9PSB1bmRlZmluZWRcbiAgICAgID8gbG9jYXRpb25cbiAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcblxuICAgIHRocm93IHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihcbiAgICAgIFtwZWckb3RoZXJFeHBlY3RhdGlvbihkZXNjcmlwdGlvbildLFxuICAgICAgaW5wdXQuc3Vic3RyaW5nKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpLFxuICAgICAgbG9jYXRpb25cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgbG9jYXRpb24pIHtcbiAgICBsb2NhdGlvbiA9IGxvY2F0aW9uICE9PSB1bmRlZmluZWRcbiAgICAgID8gbG9jYXRpb25cbiAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcblxuICAgIHRocm93IHBlZyRidWlsZFNpbXBsZUVycm9yKG1lc3NhZ2UsIGxvY2F0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRsaXRlcmFsRXhwZWN0YXRpb24odGV4dCwgaWdub3JlQ2FzZSkge1xuICAgIHJldHVybiB7IHR5cGU6IFwibGl0ZXJhbFwiLCB0ZXh0OiB0ZXh0LCBpZ25vcmVDYXNlOiBpZ25vcmVDYXNlIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckY2xhc3NFeHBlY3RhdGlvbihwYXJ0cywgaW52ZXJ0ZWQsIGlnbm9yZUNhc2UpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImNsYXNzXCIsIHBhcnRzOiBwYXJ0cywgaW52ZXJ0ZWQ6IGludmVydGVkLCBpZ25vcmVDYXNlOiBpZ25vcmVDYXNlIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckYW55RXhwZWN0YXRpb24oKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJhbnlcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGVuZEV4cGVjdGF0aW9uKCkge1xuICAgIHJldHVybiB7IHR5cGU6IFwiZW5kXCIgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJvdGhlclwiLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjb21wdXRlUG9zRGV0YWlscyhwb3MpIHtcbiAgICB2YXIgZGV0YWlscyA9IHBlZyRwb3NEZXRhaWxzQ2FjaGVbcG9zXTtcbiAgICB2YXIgcDtcblxuICAgIGlmIChkZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZGV0YWlscztcbiAgICB9IGVsc2Uge1xuICAgICAgcCA9IHBvcyAtIDE7XG4gICAgICB3aGlsZSAoIXBlZyRwb3NEZXRhaWxzQ2FjaGVbcF0pIHtcbiAgICAgICAgcC0tO1xuICAgICAgfVxuXG4gICAgICBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwXTtcbiAgICAgIGRldGFpbHMgPSB7XG4gICAgICAgIGxpbmU6IGRldGFpbHMubGluZSxcbiAgICAgICAgY29sdW1uOiBkZXRhaWxzLmNvbHVtblxuICAgICAgfTtcblxuICAgICAgd2hpbGUgKHAgPCBwb3MpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocCkgPT09IDEwKSB7XG4gICAgICAgICAgZGV0YWlscy5saW5lKys7XG4gICAgICAgICAgZGV0YWlscy5jb2x1bW4gPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRldGFpbHMuY29sdW1uKys7XG4gICAgICAgIH1cblxuICAgICAgICBwKys7XG4gICAgICB9XG5cbiAgICAgIHBlZyRwb3NEZXRhaWxzQ2FjaGVbcG9zXSA9IGRldGFpbHM7XG5cbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwZWckVkFMSURGSUxFTkFNRSA9IHR5cGVvZiBvcHRpb25zLmZpbGVuYW1lID09PSBcInN0cmluZ1wiICYmIG9wdGlvbnMuZmlsZW5hbWUubGVuZ3RoID4gMDtcbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvcywgZW5kUG9zKSB7XG4gICAgdmFyIGxvYyA9IHt9O1xuXG4gICAgaWYgKCBwZWckVkFMSURGSUxFTkFNRSApIGxvYy5maWxlbmFtZSA9IG9wdGlvbnMuZmlsZW5hbWU7XG5cbiAgICB2YXIgc3RhcnRQb3NEZXRhaWxzID0gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHN0YXJ0UG9zKTtcbiAgICBsb2Muc3RhcnQgPSB7XG4gICAgICBvZmZzZXQ6IHN0YXJ0UG9zLFxuICAgICAgbGluZTogc3RhcnRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICBjb2x1bW46IHN0YXJ0UG9zRGV0YWlscy5jb2x1bW5cbiAgICB9O1xuXG4gICAgdmFyIGVuZFBvc0RldGFpbHMgPSBwZWckY29tcHV0ZVBvc0RldGFpbHMoZW5kUG9zKTtcbiAgICBsb2MuZW5kID0ge1xuICAgICAgb2Zmc2V0OiBlbmRQb3MsXG4gICAgICBsaW5lOiBlbmRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICBjb2x1bW46IGVuZFBvc0RldGFpbHMuY29sdW1uXG4gICAgfTtcblxuICAgIHJldHVybiBsb2M7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckYmVnaW4oKSB7XG4gICAgcGVnJGV4cGVjdGVkLnB1c2goeyBwb3M6IHBlZyRjdXJyUG9zLCB2YXJpYW50czogW10gfSk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZXhwZWN0KGV4cGVjdGVkKSB7XG4gICAgdmFyIHRvcCA9IHBlZyRleHBlY3RlZFtwZWckZXhwZWN0ZWQubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAocGVnJGN1cnJQb3MgPCB0b3AucG9zKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHBlZyRjdXJyUG9zID4gdG9wLnBvcykge1xuICAgICAgdG9wLnBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgdG9wLnZhcmlhbnRzID0gW107XG4gICAgfVxuXG4gICAgdG9wLnZhcmlhbnRzLnB1c2goZXhwZWN0ZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGVuZChpbnZlcnQpIHtcbiAgICB2YXIgZXhwZWN0ZWQgPSBwZWckZXhwZWN0ZWQucG9wKCk7XG4gICAgdmFyIHRvcCA9IHBlZyRleHBlY3RlZFtwZWckZXhwZWN0ZWQubGVuZ3RoIC0gMV07XG4gICAgdmFyIHZhcmlhbnRzID0gZXhwZWN0ZWQudmFyaWFudHM7XG5cbiAgICBpZiAodG9wLnBvcyAhPT0gZXhwZWN0ZWQucG9zKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKGludmVydCkge1xuICAgICAgdmFyaWFudHMgPSB2YXJpYW50cy5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS50eXBlID09PSBcIm5vdFwiID8gZS5leHBlY3RlZCA6IHsgdHlwZTogXCJub3RcIiwgZXhwZWN0ZWQ6IGUgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRvcC52YXJpYW50cywgdmFyaWFudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGJ1aWxkU2ltcGxlRXJyb3IobWVzc2FnZSwgbG9jYXRpb24pIHtcbiAgICByZXR1cm4gbmV3IHBlZyRTeW50YXhFcnJvcihtZXNzYWdlLCBudWxsLCBudWxsLCBsb2NhdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckYnVpbGRTdHJ1Y3R1cmVkRXJyb3IoZXhwZWN0ZWQsIGZvdW5kLCBsb2NhdGlvbikge1xuICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKFxuICAgICAgcGVnJFN5bnRheEVycm9yLmJ1aWxkTWVzc2FnZShleHBlY3RlZCwgZm91bmQpLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBmb3VuZCxcbiAgICAgIGxvY2F0aW9uXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZEVycm9yKCkge1xuICAgIHZhciBleHBlY3RlZCA9IHBlZyRleHBlY3RlZFswXTtcbiAgICB2YXIgZmFpbFBvcyA9IGV4cGVjdGVkLnBvcztcblxuICAgIHJldHVybiBwZWckYnVpbGRTdHJ1Y3R1cmVkRXJyb3IoXG4gICAgICBleHBlY3RlZC52YXJpYW50cyxcbiAgICAgIGZhaWxQb3MgPCBpbnB1dC5sZW5ndGggPyBpbnB1dC5jaGFyQXQoZmFpbFBvcykgOiBudWxsLFxuICAgICAgZmFpbFBvcyA8IGlucHV0Lmxlbmd0aFxuICAgICAgICA/IHBlZyRjb21wdXRlTG9jYXRpb24oZmFpbFBvcywgZmFpbFBvcyArIDEpXG4gICAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihmYWlsUG9zLCBmYWlsUG9zKVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VzdGFydCgpIHtcbiAgICB2YXIgczA7XG5cbiAgICB2YXIgcnVsZSRleHBlY3RzID0gZnVuY3Rpb24gKGV4cGVjdGVkKSB7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSBwZWckZXhwZWN0KGV4cGVjdGVkKTtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRwYXJzZXRvcCgpO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNldG9wKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQ7XG5cbiAgICB2YXIgcnVsZSRleHBlY3RzID0gZnVuY3Rpb24gKGV4cGVjdGVkKSB7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSBwZWckZXhwZWN0KGV4cGVjdGVkKTtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHJ1bGUkZXhwZWN0cyhwZWckZTApO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzApIHtcbiAgICAgIHMxID0gcGVnJGMwO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHJ1bGUkZXhwZWN0cyhwZWckZTEpO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkge1xuICAgICAgICBzMiA9IHBlZyRjMTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZXBhcmFtcygpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBydWxlJGV4cGVjdHMocGVnJGUyKTtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMjtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJGYwKHMzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgcnVsZSRleHBlY3RzKHBlZyRlMyk7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KSA9PT0gcGVnJGMzKSB7XG4gICAgICAgIHMxID0gcGVnJGMzO1xuICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHJ1bGUkZXhwZWN0cyhwZWckZTEpO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQwKSB7XG4gICAgICAgICAgczIgPSBwZWckYzE7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VwYXJhbXMoKTtcbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHJ1bGUkZXhwZWN0cyhwZWckZTIpO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkge1xuICAgICAgICAgICAgICBzNCA9IHBlZyRjMjtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckZjEoczMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHJ1bGUkZXhwZWN0cyhwZWckZTQpO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KSA9PT0gcGVnJGM0KSB7XG4gICAgICAgICAgczEgPSBwZWckYzQ7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIgPSBwZWckcGFyc2VhdG9tKCk7XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJGYyKHMyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICBydWxlJGV4cGVjdHMocGVnJGU1KTtcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA5KSA9PT0gcGVnJGM1KSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRwYXJzZWF0b20oKTtcbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckZjMoczIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZXBhcmFtcygpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNTtcblxuICAgIHZhciBydWxlJGV4cGVjdHMgPSBmdW5jdGlvbiAoZXhwZWN0ZWQpIHtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHBlZyRleHBlY3QoZXhwZWN0ZWQpO1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VrZXlfdmFsdWVfcGFpcigpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBydWxlJGV4cGVjdHMocGVnJGU2KTtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgczQgPSBwZWckYzY7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VrZXlfdmFsdWVfcGFpcigpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IFtzNCwgczVdO1xuICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgcnVsZSRleHBlY3RzKHBlZyRlNik7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRjNjtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZWtleV92YWx1ZV9wYWlyKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IFtzNCwgczVdO1xuICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckZjQoczEsIHMyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VrZXlfdmFsdWVfcGFpcigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICB2YXIgcnVsZSRleHBlY3RzID0gZnVuY3Rpb24gKGV4cGVjdGVkKSB7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSBwZWckZXhwZWN0KGV4cGVjdGVkKTtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHJ1bGUkZXhwZWN0cyhwZWckZTcpO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE5KSA9PT0gcGVnJGM3KSB7XG4gICAgICBzMSA9IHBlZyRjNztcbiAgICAgIHBlZyRjdXJyUG9zICs9IDE5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VwYXJhbXMoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBydWxlJGV4cGVjdHMocGVnJGUyKTtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkge1xuICAgICAgICAgIHMzID0gcGVnJGMyO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJGY1KHMyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBydWxlJGV4cGVjdHMocGVnJGU4KTtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE2KSA9PT0gcGVnJGM4KSB7XG4gICAgICAgIHMxID0gcGVnJGM4O1xuICAgICAgICBwZWckY3VyclBvcyArPSAxNjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZXBhcmFtcygpO1xuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBydWxlJGV4cGVjdHMocGVnJGUyKTtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjMjtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJGY1KHMyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBydWxlJGV4cGVjdHMocGVnJGU5KTtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMjMpID09PSBwZWckYzkpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjOTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSAyMztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIgPSBwZWckcGFyc2VwYXJhbXMoKTtcbiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHJ1bGUkZXhwZWN0cyhwZWckZTIpO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRjMjtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckZjYoczIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHJ1bGUkZXhwZWN0cyhwZWckZTEwKTtcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyMSkgPT09IHBlZyRjMTApIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMDtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDIxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczIgPSBwZWckcGFyc2VwYXJhbXMoKTtcbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBydWxlJGV4cGVjdHMocGVnJGUyKTtcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJGMyO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJGY3KHMyKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBzMSA9IHBlZyRwYXJzZWF0b20oKTtcbiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBydWxlJGV4cGVjdHMocGVnJGUxMSk7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRjMTE7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VhdG9tKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJGY4KHMxLCBzMyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlYXRvbSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHZhciBydWxlJGV4cGVjdHMgPSBmdW5jdGlvbiAoZXhwZWN0ZWQpIHtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHBlZyRleHBlY3QoZXhwZWN0ZWQpO1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRwYXJzZXZhbGlkY2hhcigpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZXZhbGlkY2hhcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRmOShzMSk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2V2YWxpZGNoYXIoKSB7XG4gICAgdmFyIHMwO1xuXG4gICAgdmFyIHJ1bGUkZXhwZWN0cyA9IGZ1bmN0aW9uIChleHBlY3RlZCkge1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgcGVnJGV4cGVjdChleHBlY3RlZCk7XG4gICAgfVxuXG4gICAgcnVsZSRleHBlY3RzKHBlZyRlMTIpO1xuICAgIGlmIChwZWckcjAudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG5cbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3QoKSB7XG4gICAgICAgIHZhciByZXQgPSB7fTtcbiAgICAgICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaTxsZW47IGkrKykge1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gYXJndW1lbnRzW2ldKSB7XG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgICAgICAgIHJldFtwXSA9IGFyZ3VtZW50c1tpXVtwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cblxuXG4gIHBlZyRiZWdpbigpO1xuICBwZWckcmVzdWx0ID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uKCk7XG5cbiAgaWYgKHBlZyRyZXN1bHQgIT09IHBlZyRGQUlMRUQgJiYgcGVnJGN1cnJQb3MgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiBwZWckcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICBwZWckZXhwZWN0KHBlZyRlbmRFeHBlY3RhdGlvbigpKTtcbiAgICB9XG5cbiAgICB0aHJvdyBwZWckYnVpbGRFcnJvcigpO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIHBlZyRTeW50YXhFcnJvciBhcyBTeW50YXhFcnJvcixcbiAgcGVnJHBhcnNlIGFzIHBhcnNlXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFN5bnRheEVycm9yOiBwZWckU3ludGF4RXJyb3IsXG4gIHBhcnNlOiBwZWckcGFyc2Vcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgeyBTeW50YXhFcnJvciwgcGFyc2UgfSBmcm9tICcuL2ZyYWdtZW50LmpzJztcblxuLyoqXG4gKiBDb252ZXJ0IGEgU2VsZWN0b3Igb3IgU3RhdGUgaW50byBhIGZyYWdtZW50IGlkZW50aWZpZXIgc3RyaW5nLlxuICogQHBhcmFtIHsoU2VsZWN0b3J8U3RhdGUpfSByZXNvdXJjZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KHJlc291cmNlKSB7XG4gIGNvbnN0IGRhdGEgPSBPYmplY3Qua2V5cyhyZXNvdXJjZSlcbiAgICAubWFwKGtleSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSByZXNvdXJjZVtrZXldO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB2YWx1ZSA9IHZhbHVlLnZhbHVlT2YoKTtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB2YWx1ZSA9IHN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHt2YWx1ZX1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtrZXksIHZhbHVlXS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCc9Jyk7XG4gICAgfSlcbiAgICAuam9pbignLCcpO1xuXG4gIGlmICgvU2VsZWN0b3IkLy50ZXN0KHJlc291cmNlLnR5cGUpKSByZXR1cm4gYHNlbGVjdG9yKCR7ZGF0YX0pYDtcbiAgaWYgKC9TdGF0ZSQvLnRlc3QocmVzb3VyY2UudHlwZSkpIHJldHVybiBgc3RhdGUoJHtkYXRhfSlgO1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXNvdXJjZSBtdXN0IGJlIGEgU2VsZWN0b3Igb3IgU3RhdGUnKTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUmVmaW5hYmxlKHNlbGVjdG9yQ3JlYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3Ioc291cmNlKSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBzZWxlY3RvckNyZWF0b3Ioc291cmNlKTtcblxuICAgIGlmIChzb3VyY2UucmVmaW5lZEJ5KSB7XG4gICAgICBjb25zdCByZWZpbmluZ1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3Ioc291cmNlLnJlZmluZWRCeSk7XG5cbiAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiogbWF0Y2hBbGwoc2NvcGUpIHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBtYXRjaCBvZiBzZWxlY3RvcihzY29wZSkpIHtcbiAgICAgICAgICB5aWVsZCogcmVmaW5pbmdTZWxlY3RvcihtYXRjaCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImRlbW8vaW5kZXguaHRtbFwiOyIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGdsb2JhbCBjb3JwdXMsIG1vZHVsZSwgcGFyc2VkLCBzZWxlY3RhYmxlICovXG5cbmltcG9ydCB7XG4gIHBhcnNlIGFzIHBhcnNlRnJhZ21lbnQsXG4gIHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlGcmFnbWVudCxcbn0gZnJvbSAnQGFubm90YXRvci9mcmFnbWVudC1pZGVudGlmaWVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZVJhbmdlU2VsZWN0b3JDcmVhdG9yLFxuICBjcmVhdGVUZXh0UXVvdGVTZWxlY3RvcixcbiAgZGVzY3JpYmVUZXh0UXVvdGUsXG4gIGhpZ2hsaWdodFJhbmdlLFxufSBmcm9tICdAYW5ub3RhdG9yL2RvbSc7XG5pbXBvcnQgeyBtYWtlUmVmaW5hYmxlIH0gZnJvbSAnQGFubm90YXRvci9zZWxlY3Rvcic7XG5cbmNvbnN0IGNsZWFudXBGdW5jdGlvbnMgPSBbXTtcblxuZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgbGV0IHJlbW92ZUhpZ2hsaWdodDtcbiAgd2hpbGUgKHJlbW92ZUhpZ2hsaWdodCA9IGNsZWFudXBGdW5jdGlvbnMuc2hpZnQoKSkge1xuICAgIHJlbW92ZUhpZ2hsaWdodCgpO1xuICB9XG4gIGNvcnB1cy5ub3JtYWxpemUoKTtcbn1cblxuY29uc3QgY3JlYXRlU2VsZWN0b3IgPSBtYWtlUmVmaW5hYmxlKHNlbGVjdG9yID0+IHtcbiAgY29uc3Qgc2VsZWN0b3JDcmVhdG9yID0ge1xuICAgIFRleHRRdW90ZVNlbGVjdG9yOiBjcmVhdGVUZXh0UXVvdGVTZWxlY3RvcixcbiAgICBSYW5nZVNlbGVjdG9yOiBjcmVhdGVSYW5nZVNlbGVjdG9yQ3JlYXRvcihjcmVhdGVTZWxlY3RvciksXG4gIH1bc2VsZWN0b3IudHlwZV07XG5cbiAgaWYgKHNlbGVjdG9yQ3JlYXRvciA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBzZWxlY3RvciB0eXBlOiAke3NlbGVjdG9yLnR5cGV9YCk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0b3JDcmVhdG9yKHNlbGVjdG9yKTtcbn0pO1xuXG5jb25zdCByZWZyZXNoID0gYXN5bmMgKCkgPT4ge1xuICBjbGVhbnVwKCk7XG5cbiAgY29uc3QgZnJhZ21lbnQgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTtcbiAgaWYgKCFmcmFnbWVudCkgcmV0dXJuO1xuXG4gIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHBhcnNlRnJhZ21lbnQoZnJhZ21lbnQpO1xuICBjb25zdCBtYXRjaEFsbCA9IGNyZWF0ZVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgY29uc3QgcmFuZ2VzID0gW107XG5cbiAgZm9yIGF3YWl0IChjb25zdCByYW5nZSBvZiBtYXRjaEFsbChjb3JwdXMpKSB7XG4gICAgcmFuZ2VzLnB1c2gocmFuZ2UpO1xuICB9XG5cbiAgZm9yIChjb25zdCByYW5nZSBvZiByYW5nZXMpIHtcbiAgICBjb25zdCByZW1vdmVIaWdobGlnaHQgPSBoaWdobGlnaHRSYW5nZShyYW5nZSk7XG4gICAgY2xlYW51cEZ1bmN0aW9ucy5wdXNoKHJlbW92ZUhpZ2hsaWdodCk7XG4gIH1cblxuICBwYXJzZWQuaW5uZXJUZXh0ID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0b3IsIG51bGwsIDIpO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZGVzY3JpYmVTZWxlY3Rpb24oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpO1xuICBpZiAoc2VsZWN0aW9uLnR5cGUgIT09ICdSYW5nZScpIHJldHVybjtcblxuICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICBpZiAocmFuZ2UuY29sbGFwc2VkKSByZXR1cm47XG5cbiAgY29uc3Qgc2NvcGUgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBzY29wZS5zZWxlY3ROb2RlQ29udGVudHMoc2VsZWN0YWJsZSk7XG5cbiAgaWYgKCFzY29wZS5pc1BvaW50SW5SYW5nZShyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQpKSByZXR1cm47XG4gIGlmICghc2NvcGUuaXNQb2ludEluUmFuZ2UocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpKSByZXR1cm47XG5cbiAgcmV0dXJuIGRlc2NyaWJlVGV4dFF1b3RlKHJhbmdlLCBzY29wZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9uU2VsZWN0aW9uQ2hhbmdlKCkge1xuICBjb25zdCBzZWxlY3RvciA9IGF3YWl0IGRlc2NyaWJlU2VsZWN0aW9uKCk7XG4gIGNvbnN0IGZyYWdtZW50ID0gc2VsZWN0b3IgPyBzdHJpbmdpZnlGcmFnbWVudChzZWxlY3RvcikgOiAnJztcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIHVybC5oYXNoID0gZnJhZ21lbnQgPyBgIyR7ZnJhZ21lbnR9YCA6ICcnO1xuXG4gIGlmICh1cmwuaHJlZiAhPT0gd2luZG93LmxvY2F0aW9uLmhyZWYpIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoc2VsZWN0b3IsIG51bGwsIHVybC5ocmVmKTtcbiAgICByZWZyZXNoKCk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgcmVmcmVzaCk7XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgcmVmcmVzaCk7XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBvblNlbGVjdGlvbkNoYW5nZSk7XG5cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KCk7XG4gIG1vZHVsZS5ob3QuZGlzcG9zZSgoKSA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgcmVmcmVzaCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIHJlZnJlc2gpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIG9uU2VsZWN0aW9uQ2hhbmdlKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 |